Recueil de liens
- https://berma.pagesperso-orange.fr/Files_fr/OOo_API_intro.pdf ++++
Super document - A appliquer à la feuille crédit (pour mémoire) - https://static.fnac-static.com/multimedia/editorial/pdf/9782212132472.pdf
- https://wiki.documentfoundation.org/images/a/a8/CG3512FR-Macros.pdf
- https://wiki.documentfoundation.org/images/2/2d/GS4013FR-Macros.pdf
- https://fr.wikibooks.org/wiki/LibreOffice_et_Apache_OpenOffice/Writer/Macros
- https://wiki.documentfoundation.org/Macros/General/fr
Application des macros sur un classeur sur le crédit
Lien vers le classeur avec la macro LibreOffice Calc - classeur avec macro
Lien vers le support de cours sur le crédit Cours sur le crédit
Vidéo de présentation
Rq: Les boutons de la feuille 2 fonctionnent maintenant dès l'ouverture du classeur suite à la suggestion de Prog.amateur sur le forum d'entre aide de Libre Office ;)
Script de la macro commenté
Script commenté en dessous, ' génère une ligne de commentaire!
REM ***** BASIC *****
' Script lancé par le bouton Macro - Crédit
Sub Credit
' ------------------- declaration variables
Dim MonDocument As Object
Dim MaFeuille As Object
Dim MaCellule As Object
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 (a verifier quand meme)
Dim echeance_maths As Currency
Dim tot_credit As Currency
Dim 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 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
Dim MonDocument As Object
Dim MaFeuille As Object
Dim MaPlage As Object
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
---------------
Script amélioré
Car tenant compte des remarques du document https://berma.pagesperso-orange.fr/Files_fr/OOo_API_intro.pdf - voir &2.3 page 12
Script en dessous
REM ***** BASIC *****
' Grâce à cette instruction, vous aurez 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
' Variable specifique au sous programme
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 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
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
Aucun commentaire:
Enregistrer un commentaire
Tout commentaire nous engage ;)