Explication d une macro

bonjour,

voici une macro que je ne saisie pas

quelqu un pourrait il ou t elle me l'expliquer ligne par ligne svp ?

merci

Dim i As Integer

Dim LigneC As Integer

LigneC = 7

With Sheets("biscuits")

.Range("L7:M27").ClearContents

For i = 7 To 34

.Cells(i, 3) = .Cells(159, i + 6)

If .Cells(159, i + 6) <> "" Then

.Cells(i, 2).Resize(, 2).Copy

.Cells(LigneC, 12).Resize(, 2).PasteSpecial Paste:=xlValue

LigneC = LigneC + 1

Application.CutCopyMode = False

End If

Next i

.Cells(159, 5) = .Cells(159, 34)

.Cells(2, 2).Select

End With

Bonjour,

En espérant t'aider à comprendre :

Sub Test()

    Dim i As Integer
    Dim LigneC As Integer

    LigneC = 7 'initialise la variable qui va servir de compteur à 7

    With Sheets("biscuits") 'le bloc With-End With permet de ne pas répéter "Sheets("biscuits")" pour chaque enfant (Range ou Cells)

        .Range("L7:M27").ClearContents 'vide les cellules L7 à M27 de leur contenu

        For i = 7 To 34 'fait une boucle de 7 à 34, ceci veut dire que la variable "i" va commencer à 7 et finir à 34

            'on transpose les valeurs situées en ligne 159 et commençant en colonne M pour finir en colonne AN de la ligne 159
            'dans la colonne C de C7 à C34
            .Cells(i, 3) = .Cells(159, i + 6)

            'si la cellule en ligne 159 n'est pas vide, on copie les cellules en colonne B et C (donc B7 et C7 pour le début de boucle)
            'pour les coller à partir de la ligne 7 en colonne L et M
            If .Cells(159, i + 6) <> "" Then

                .Cells(i, 2).Resize(, 2).Copy
                .Cells(LigneC, 12).Resize(, 2).PasteSpecial Paste:=xlValue 'collage en colonne L et M
                LigneC = LigneC + 1 'compteur
                Application.CutCopyMode = False 'vide le presse papier

            End If
        Next i

        'la cellule E159 reçois la valeur de la cellule AH159
        .Cells(159, 5) = .Cells(159, 34)

        'sélection de B2
        .Cells(2, 2).Select

    End With

End Sub

Bonsoir dann,

voici l'explication détaillée du code VBA :

Dim i As Integer et Dim LigneC As Integer : déclare 2 variables de type entier

LigneC = 7 : LigneC vaut 7

With Sheets("biscuits") .. End With : avec la feuille "biscuits"

.Range("L7:M27").ClearContents : effacement de la plage de cellules L27:M27 ; comme ça commence par un point, c'est donc dépendant du With ; ainsi, cette plage de cellules est celle de la feuille "biscuits" ; note que seules les valeurs sont effacées, pas les formats.


For i = 7 To 34 .. Next i : boucle i, de 7 à 34

pour cette boucle, la suite de mon explication est pour la 1ère valeur de i, donc pour 7 :

.Cells(i, 3) = .Cells(159, i + 6) .Cells(7, 3) = .Cells(159, 7 + 6)

➯ .Cells(7, 3) = .Cells(159, 13) : la cellule C7 prend la valeur de M159

If .Cells(159, i + 6) <> "" Then .. End If : si M159 n'est pas vide

.Cells(i, 2) : .Cells(7, 2) : B7 ; .Resize(, 2) : redimensionné à 2 colonnes : B7:C7 ; donc :

avec .Cells(i, 2).Resize(, 2).Copy c'est B7:C7 qui est copié dans le presse-papier.

.Cells(LigneC, 12) : cellule de la ligne LigneC, colonne L ; .Resize(, 2)

cellules L et M de LigneC ; .PasteSpecial Paste:=xlValue coller en valeurs

.Cells(LigneC, 12).Resize(, 2).PasteSpecial Paste:=xlValue réécrit en plus court :

.Cells(LigneC, 12).PasteSpecial -4163 ; note bien que le .Resize(, 2) était inutile !

LigneC = LigneC + 1 : pour passer à la ligne suivante

Application.CutCopyMode = False : enlève le cadre de tirets défilants

de la plage de cellules qui a été copiée dans le presse-papiers (via .Copy)


.Cells(159, 5) = .Cells(159, 34) ; E159 = AH159

réécrit en plus court : .[E159] = .[AH159]

.Cells(2, 2).Select : attention ! ça va planter si la feuille active n'est pas la feuille "biscuits" !

car sélectionner une cellule d'une feuille autre que la feuille active entraîne un plantage ! tu dois

réécrire ce code ainsi : .Select: [B2].Select

dhany

super ..... merci de votre aide

merci pour ton retour, et pour avoir passé le sujet en résolu !

bonne continuation !

dhany

Rechercher des sujets similaires à "explication macro"