Interpreter cette macro
Bonsoir,
je decouvre vba et les macro. J'ai actuellement la macro suivante à déchiffrer et j'ai du mal à comprendre dès le debut du code. Ça serait top si quelqu'un pouvait m'aider à traduire. Merci ! (jai mis des commentaires)
Sub CASH_RESTRICTION()
'Optimising the cash restriction on dividends
'counter = 0
i = Range("CR_INP").Count
Do
counter = counter + 1
If counter = 1 Then
Range("CR_INP").Value = 0
Calculate
End If
For j = i To 1 Step -1 ici non plus
If Range("CR_INP").Columns(j).Offset(-1, 0).Value = 1 Then ici non plus
If Range("CR_INP").Columns(j).Offset(1, 0).Value = 1 Then
Range("CR_INP").Columns(j).Value = Range("CR_INP").Columns(j).Offset(-2, 0).Value
Calculate
Range("CFAD_INP").Value = Range("CFAD_CALC").Value ici si je comprend bien c'est un copie coller valeur?
Calculate
End If
Else
Range("CR_INP").Columns(j).Value = 0
End If
If Range("CR_CHK").Value = 0 Then Exit For
Next j
Loop Until Range("CR_CHK").Value = 0
Bonjour,
un essai d'explications :
Sub CASH_RESTRICTION()
'Optimising the cash restriction on dividends
'counter = 0 ' avec un guillemet c'est un commentaire, du coup on écrit ce que l'on veut
' ici c'est un commentaire pour indiquer qu'au début de la macro la variable counter vaut 0
' pour en être sur il vaut mieux le définir par counter = 0
counter = 0 ' c'est ce que je mettrais pour être sur qu'au départ counter = 0
i = Range("CR_INP").Count ' ici on demande à VBA de mettre dans la variable i le nombre de cellules que comporte la plage CR_INP
Do ' ici on lance une boucle indéfinie, tant qu'on ne dit pas d'en sortir on reste dedans
counter = counter + 1 ' ici on incrémente la valeur de counter de 1 si counter = 0 alors counter = 0 + 1 = 1
If counter = 1 Then ' si counter = 1
Range("CR_INP").Value = 0 ' on met la valeur 0 dans toutes les cellules de la plage CR_INP
Calculate ' on lance le calcul du classeur Excel afin de mettre "à jour" les valeurs des formules qui prennent en comptent les valeurs des cellule de la plage CR_INP
End If ' fin du test
For j = i To 1 Step -1 ' ici on lance une boucle déterminée, qui va de la valeur j= i à 1 par step de -1
' donc si i=10 (nombre de cellule de la plage CR_INP) alors j prendra successivement les valeur de 10, puis 10 plus le step -1 = 9, puis huit et ce jusqu'à 1
If Range("CR_INP").Columns(j).Offset(-1, 0).Value = 1 Then ' ici non plus
' sur la plage CR_INP on part de la colonne "J" de la plage puis on se décale (OffSet) de -1 ligne, et 0 colonne et sur cette cellule on met la valeur 1
' en reprenant i = 10 au premier tour de j on met la valeur "0" dans la cellule qui se trouve au dessus de la dernière cellule à droite de la plage CR_INP
' si la plage de 10 cellule va de F3:O3, alors plage.count = 10, alors Range("CR_INP").Column(10) = la dixième colonne de la plage
' donc on va prendre en référence de décalage la cellule O3, on décale d'une ligne vers le haut et de 0 colonne, du coup on se retrouve en O2
' en O2 on met la valeur 1
If Range("CR_INP").Columns(j).Offset(1, 0).Value = 1 Then ' ici c'est pareil mais on passe à la celule du dessous
Range("CR_INP").Columns(j).Value = Range("CR_INP").Columns(j).Offset(-2, 0).Value ' là dans la 10ième cellule on met la valeur qui se trouve dan sla cellule
' qui se trouve 2 lignes au dessus donc la O1
' on relance les calculs suite à ces changements de valeurs
Calculate
Range("CFAD_INP").Value = Range("CFAD_CALC").Value ' ici si je comprend bien c'est un copie coller valeur?
' ici on fait un copier coller des valeurs de la deuxième plage (CFAD_CALC) vers la première plage (CFAD_INP)
Calculate ' on relance les calculs
End If ' ici fin du test
Else ' cela veut sinon faire ceci, donc si le test du Range("CR_INP").Columns(j).Offset(-1, 0).Value = 1 est faux alors faire ceci
Range("CR_INP").Columns(j).Value = 0 ' on met en O3 la valeur "0" (où O3 est dans mon exemple la 10ième cellule de la plage CR_INP
End If ' fin du test !
' un nouveau test, s'il est vrai alors on sort "prématurément" de la boucle j, on attend pad d'être à 1 !
If Range("CR_CHK").Value = 0 Then Exit For
Next j ' on boucle sur j qui prendra alors la valeur de 9, puis 8....
Loop Until Range("CR_CHK").Value = 0 ' on boucle tant que Range("CR_CHK").Value = 0
Remarquez l'indentation du code qui permet de mieux se repérer et de faire ressortir "les blocs" de code pour améliorer la compréhension.
Et remarquez également l'utilisation des balise de codes pour afficher quelque chose de propre sur le forum.
Elles se situent au dessus de la fenêtre d'édition des messages.
@ bientôt
LouReeD
Bonjour LouReeD,
merci beaucoup pour ton temps et pour ta réponse!
Je me demandais si la fonction counter compte uniquement les cellules remplie ou si elle compte chacune des cellules vides/no vides de la plage définie?
Bonne fin de journée,
Henri