Explication de termes d'une macro

Résolu/Fermé
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015 - Modifié par pijaku le 24/06/2015 à 15:46
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015 - 25 juin 2015 à 11:39
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.
A voir également:

3 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
24 juin 2015 à 17:03
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
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 juin 2015 à 17:22
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

0
jenor Messages postés 51 Date d'inscription mercredi 10 juin 2015 Statut Membre Dernière intervention 24 juillet 2015
25 juin 2015 à 11:39
Merci à vous deux pour vos explications !!!
0