Page 3 sur 3
Classeur, crédit et macros
- Lien vers le classeur contenant la macro
test macro classeur credit.ods - Source inspirante:
https://berma.pagesperso-orange.fr/Files_fr/OOo_API_intro.pdf
Fonctionnement
- Feuille 1:
Crédit avec tableau d'amortissement et utilisation des formules financières
=> Pb: Si je modifie le nombre d'année, mon tableau d'amortissement ne fonctionne plus ;-( - Feuille 2:
Présence de 2 boutons
Macro - Crédit lance Sub Credit
Macro - Effacement lance Sub Effacement
=> Plus de Pb: Si je modifie le nombre d'année, il me suffit d'effacer les données et de relancer la macro "crédit"
Principe d'utilisation
- Se rendre sur la feuille 2
- Saisir
- le montant
- le taux annuel
- la durée en année (Valeur entière >=1)
- Cliquer sur Macro - Crédit
Pour calculer le tableau d'amortissement - Cliquer sur Macro - Effacement
Pour effacer les données jusqu'à la ligne 1000
Visualiser/Modifier la macro
Via me menu Outils/Macro/Editer les macros
Développer dans le catalogue d'objet en partant de la feuille
En dessous le contenu de la macro avec des commentaires (lignes commençant par ')
REM ***** BASIC *****
' L'instruction Option explicit renvoie un message d’erreur pour toute variable non définie, ou mal orthographiée.
Option explicit
' ------------------- declaration variables du module donc pour les 2 macros Sub
Dim MonDocument As Object
Dim MaFeuille As Object
Dim MaCellule As Object
Dim MaPlage As Object
' Script lancé par le bouton Macro - Crédit
Sub Credit
' Variables specifiques au sous programme Credit
Dim montant_emprunte As Variant, taux_an As Variant, taux_periodique As Variant, duree_an As Variant, duree_mois As Variant
MonDocument = ThisComponent
MaFeuille = MonDocument.CurrentController.ActiveSheet
' ------------------ recup valeur des cellules et affectation variables
' Principe appliqué ici:
' Se positionner sur la cellule ad hoc avec getCellByPosition(col,ligne)
' Rq ici (1,3) pour B4
' Affectation de sa valeur avec la propriété .Value
'
' Les donnees sont dans les cellules des lignes de 1 à 6
'
MaCellule = MaFeuille.getCellByPosition(1,3)
montant_emprunte = MaCellule.Value
'
MaCellule = MaFeuille.getCellByPosition(1,4)
taux_an = MaCellule.Value
taux_periodique=taux_an/12
'
MaCellule = MaFeuille.getCellByPosition(1,5)
duree_an = MaCellule.Value
duree_mois =duree_an*12
' ------------------ si besoin astuce pour afficher les valeurs
' Principe :
' Utilisation du print "texte à afficher";variable
'
' Affichage pour verifier (a decommenter si necessaire)
'print "nom feuille ";MaFeuille.Name
'print "verif valeurs ";montant_emprunte;taux_an;taux_periodique;duree_an;duree_mois
' ---------------------- calculs echeance, tot credit et tot interet
' Objectif:
' Calculer puis afficher les résultats dans des cellules
' Affichage entre les lignes 10 et 12
'
' Principe:
' Calculer les valeurs et les affectées a des variables
' Saisir l'etiquette et la valeur avec les proprietes .String pour le texte et .Value pour les nombres
' Déclaration des variables puis calculs
' Currency pour format monetaire
' Propriete .NumberFormat=108 pour affichage au format monetaire
Dim echeance_maths As Currency, tot_credit As Currency, tot_interet As Currency
'
echeance_maths=(montant_emprunte*taux_periodique)/(1-(1+taux_periodique)^(-duree_mois))
tot_credit=echeance_maths*duree_mois
tot_interet=tot_credit-montant_emprunte
' Affichage pour verifier (a decommenter si necessaire)
'print "echeance=";echeance_maths;"tot credit=";tot_credit;tot_interet
' Affichage des resultats dans cellules de la feuille active
MaCellule = MaFeuille.getCellByPosition(0,9)
MaCellule.String = "Echéance"
MaCellule = MaFeuille.getCellByPosition(1,9)
MaCellule.NumberFormat=108
MaCellule.Value = echeance_maths
'
MaCellule = MaFeuille.getCellByPosition(0,10)
MaCellule.String = "Total crédit"
MaCellule = MaFeuille.getCellByPosition(1,10)
MaCellule.NumberFormat=108
MaCellule.Value = tot_credit
'
MaCellule = MaFeuille.getCellByPosition(0,11)
MaCellule.String = "Total intérêt"
MaCellule = MaFeuille.getCellByPosition(1,11)
MaCellule.NumberFormat=108
MaCellule.Value = tot_interet
' ------------------- Calcul du tableau d'amortissement
MaCellule = MaFeuille.getCellByPosition(0,16)
MaCellule.String = "Tableau d'amortissement"
' Mise en place des étiquettes des colonnes
MaCellule = MaFeuille.getCellByPosition(1,17)
MaCellule.String = "Total"
MaCellule = MaFeuille.getCellByPosition(0,18)
MaCellule.String = "Rang"
MaCellule = MaFeuille.getCellByPosition(1,18)
MaCellule.String = "Restant dû"
MaCellule = MaFeuille.getCellByPosition(2,18)
MaCellule.String = "Intérêt"
MaCellule = MaFeuille.getCellByPosition(3,18)
MaCellule.String = "Principal"
MaCellule = MaFeuille.getCellByPosition(4,18)
MaCellule.String = "Echéance"
' Mise en place des totaux de la ligne 18
' Principe:
' Propriété .FormulaLocal pour pouvoir saisir une formule comme dans le classeur
' A noter l'astuce +Ltrim(str... afin de pouvoir faire tourner la valeur de la ligne
' Ex
' "=SOMME(C20:C"+Ltrim(str(19+duree_mois))+")"
' donnera si duree_mois correspond à 24 mois soit un credit de 2 ans
' "=SOMME(C20:C43)"
' Rappel la somme doit aller jusqu'à la ligne 19+duree_mois
' Mise en place de la somme avant la boucle pour voir l'evolution en cours de calculs
' Total interet
MaCellule = MaFeuille.getCellByPosition(2,17)
MaCellule.NumberFormat =108
MaCellule.FormulaLocal = "=SOMME(C20:C"+Ltrim(str(19+duree_mois))+")"
' Total principal - doit correspondre au montant emprunte
MaCellule = MaFeuille.getCellByPosition(3,17)
MaCellule.NumberFormat =108
MaCellule.FormulaLocal = "=SOMME(D20:D"+Ltrim(str(19+duree_mois))+")"
' Total echeance
MaCellule = MaFeuille.getCellByPosition(4,17)
MaCellule.NumberFormat =108
MaCellule.FormulaLocal = "=SOMME(E20:E"+Ltrim(str(19+duree_mois))+")"
' Mise en place de la première valeur du restant dû
' Cette valeur ne peut pas être dans la boucle car decalage
MaCellule = MaFeuille.getCellByPosition(1,19)
MaCellule.NumberFormat =108
MaCellule.FormulaLocal = "=B4"
' mise en place de la boucle pour les valeurs du tableau
' Principe:
' Propriété .FormulaLocal pour pouvoir saisir une formule comme dans le classeur
' A noter l'astuce +Ltrim(str... afin de pouvoir faire tourner la valeur de la ligne
' Ex
' =INTPER(B5/12;A"+Ltrim(str(i+20))+";B6*12;B4)
' donnera pour i = 0
' =INTPER(B5/12;A20;B6*12;B4)
Dim i As Integer
for i = 0 to duree_mois-1
MaCellule = MaFeuille.getCellByPosition(0,19+i)
MaCellule.NumberFormat = 1
MaCellule.FormulaLocal=1+i
MaCellule = MaFeuille.getCellByPosition(2,19+i)
MaCellule.NumberFormat = 108
MaCellule.FormulaLocal="=INTPER(B5/12;A"+Ltrim(str(i+20))+";B6*12;B4)"
MaCellule = MaFeuille.getCellByPosition(3,19+i)
MaCellule.NumberFormat = 108
MaCellule.FormulaLocal="=PRINCPER(B5/12;A"+Ltrim(str(i+20))+";B6*12;B4)"
MaCellule = MaFeuille.getCellByPosition(4,19+i)
MaCellule.NumberFormat = 108
MaCellule.FormulaLocal="=VPM(B5/12;B6*12;B4)"
MaCellule = MaFeuille.getCellByPosition(1,20+i)
MaCellule.NumberFormat = 108
MaCellule.FormulaLocal="=B"+Ltrim(str(i+20))+"+D"+Ltrim(str(i+20))+""
Next i
End Sub
'----------------------------------------------------------------------
'----------------------------------------------------------------------
' Script lancé par le bouton Macro - Effacement
Sub Effacement
' Variable specifique au sous programme Effacement
MonDocument = ThisComponent
MaFeuille = MonDocument.CurrentController.ActiveSheet
' Efface les donnees numeriques, alphanumeriques et les formules
MaPlage = MaFeuille.GetCellRangeByName ("A10:E1000")
MaPlage.clearContents(com.sun.star.sheet.CellFlags.VALUE OR _
com.sun.star.sheet.CellFlags.STRING OR _
com.sun.star.sheet.CellFlags.FORMULA)
End Sub