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 je ne comprend pas ce que cela veux dire

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

Rechercher des sujets similaires à "interpreter cette macro"