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 pour ton retour, et pour avoir passé le sujet en résolu !
bonne continuation !
dhany