Explication de termes d'une macro

Résolu
Bonjour,

J'aurai à nouveau besoin de vous pour m'expliquer les termes d'une macro qui m'a été donné. Pouvez-vous insérer un commentaire à chaque ligne ... (s'arrêter juste avant Case 2 biensûr)? Je débute avec VBA, et je ne comprends pas grand chose (même avec l'aide Excel).

Voici la macro :

Private Sub PutFormulas(cas As Integer) 
Dim nbLi As Long 
nbLi = Feuil1.[A1].CurrentRegion.Rows.Count 
With Feuil1.Range("C" & nbLi + 1) 
.EntireRow.Insert 
Select Case cas 
Case 1 
.Offset(-1, 0).Formula = .Offset(-2, 0).Formula 
.Offset(-1, 1).Formula = .Offset(-2, 1).Formula 
Case 2 
.Offset(-1, 0).Formula = .Offset(-2, 0).Formula 
.Offset(-1, 1).Formula = 0 
Case 3 
.Offset(-1, 0).ClearContents 
.Offset(-1, 1).Formula = .Offset(-2, 1).Formula 
End Select 
End With 
End Sub 


Je vous remercie par avance pour votre réponse.

3 réponses

  1. Bonjour Jenor, bonjour le forum,

    Private Sub PutFormulas(cas As Integer)
    Dim nbLi As Long 'déclare la variable nbLi (nombre de lignes) de type Long (compris  entre -2 147 483 648 et 2 147 483 647)
    
    nbLi = Feuil1.[A1].CurrentRegion.Rows.Count 'définit la variable nbLi (le nombre de lignes)
    'CurrentRegion correspond à toutes les cellules autour de A1 sans qu'une ligne ou une colonne vide ne les sépare
    'de cet ensemble de cellules on en compte le nombre de lignes (ça correspond à [Ctrl]+[*] dans une cellule)...
    
    'Offset est le décalage (x, y) par rapport à une cellule. x correspond aux lignes (positif on descend, négatif on monte),
    'y correspond au colonnes (positif vers la droite, négatif vers la gauche)
    
    With Feuil1.Range("C" & nbLi + 1) 'prend en compte la cellule ligne nbLi + 1, colonne C de l'onglet Feuil1 ( c'est la base pour le décalage)
        .EntireRow.Insert 'insère une ligne
        Select Case cas 'agit en fonction de la variable cas définie comme entier dans la procédure
            Case 1 'si cas vaut 1
                'renvoie la formule de la cellule deux lignes au-dessus de la base, dans la cellule une ligne au-dessus de la base
                .Offset(-1, 0).Formula = .Offset(-2, 0).Formula
                'renvoie la formule de la cellule deux lignes au-dessus une colonne à à droite de la base, dans la cellule une ligne au-dessus une colonne à droite de la base
                .Offset(-1, 1).Formula = .Offset(-2, 1).Formula
            Case 2 'si cas vaut 2
                'renvoie la formule de la cellule deux lignes au-dessus de la base, dans la cellule une ligne au-dessus de la base
                .Offset(-1, 0).Formula = .Offset(-2, 0).Formula
                'renvoie zéro dans le cellule une ligne au-dessus une colonne à droite de la base
                .Offset(-1, 1).Formula = 0
            Case 3 'si cas vaut 3
                'efface la cellule une ligne au-dessus de la base
                .Offset(-1, 0).ClearContents
                'renvoie la formule de la cellule deux lignes au-dessus une colonne à à droite de la base, dans la cellule une ligne au-dessus une colonne à droite de la base
                .Offset(-1, 1).Formula = .Offset(-2, 1).Formula
        End Select 'fin de l'action en fonction de la variable cas
    End With 'fin de la prise en compte de la cellule ligne nbLi + 1, colonne C de l'onglet Feuil1 (base)
    End Sub

    1. Bonjour

      Private Sub PutFormulas(cas As Integer) 
      Dim nbLi As Long 
      ' nombre (.Count)  de lignes (.Rows) de la plage occupée à partir de A1 dans la feuille 1
      ' la plage occupée part de A1 
      ' jusqu'à la dernière ligne contenant une valeur
      ' jusqu'à la dernère colonne contenant une valeur
      nbLi = Feuil1.[A1].CurrentRegion.Rows.Count 
      ' pour la cellule "C" & nbLi+1 de la feuille 1
      ' pour exemple : si Nbli = 10, la suite se refèrera à C11
      With Feuil1.Range("C" & nbLi + 1) 
        ' insertion d'une ligne à la ligne 11 
        .EntireRow.Insert 
        ' selon la valeur de cas
        Select Case cas 
        ' si cas = 1
        Case 1 
          ' Formule en C10 = formule en C9
          .Offset(-1, 0).Formula = .Offset(-2, 0).Formula 
          ' Formule en D10 = formule en D9
          .Offset(-1, 1).Formula = .Offset(-2, 1).Formula 
        Case 2 
          .Offset(-1, 0).Formula = .Offset(-2, 0).Formula 
          .Offset(-1, 1).Formula = 0 
        Case 3 
          ' suppression du contenu de C10
          .Offset(-1, 0).ClearContents 
          .Offset(-1, 1).Formula = .Offset(-2, 1).Formula 
        End Select 
      End With 
      End Sub

      Cdlmnt