Re : Signification de cette ligne
michelexcel à dit:
Merci beaucoup Wilfried pour les explications.
Je comprends un peux mieux. Non il n'y a aucun message d'erreur lors de l'exécution de cette macro que je t'envoie. Macro complete qui va archiver les données de la facture. J'ai fait plusieurs substitution avec les
Cells(i, 4). par exemple pour voir ce qui se passe pour que je puisse comprendre mais je ne comprends toujours pas le processus à savoir
par exemple - For i = 16 To lig -ou encore .Cells(ligne, 5) = Sheets("Facture").Cells(i, 5).Value. Que veulent dire les 5..5ieme ligne, 5ieme colonne? C'est cela que je veux comprendre. Voici donc la macro complete.
Encore une fois merci beaucoup pour ton aide.
Michel
Sub Transfert()
'ARCHIVAGE
' Transfert des données Facture vers Archive
Dim i, lig, ligne As Integer
lig = Sheets("Facture").Range("A32").Row
For i = 16 To lig
With Sheets("Archives")
ligne = .Range("A65536").End(xlUp).Row + 1
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value
.Cells(ligne, 3) = Sheets("Facture").Cells(i, 3).Value
.Cells(ligne, 4) = Sheets("facture").Cells(i, 4).Value
.Cells(ligne, 5) = Sheets("Facture").Cells(i, 5).Value
.Cells(ligne, 6) = Sheets("Facture").Cells(i, 6).Value
.Cells(ligne, 7) = Sheets("Facture").Cells(i, 7).Value
' .Cells(ligne, 4) = Sheets("Facture").Cells(i, 6).Value
End With
Next i
End Sub
Salut
je ferais différemment, mais chacun sa méthode
Sub Transfert()
'ARCHIVAGE
' Transfert des données Facture vers Archive
Dim i, lig, ligne As Integer
lig = Sheets("Facture").Range("A32").Row
lig = ligne de la cellule A32 de Facture
For i = 16 To lig
pour i = 16 jusqu'à lig (32) par augmentation de 1
With Sheets("Archives")
avec la feuille Archives
ligne = .Range("A65536").End(xlUp).Row + 1
ligne = première ligne non-vide en partant du bas vers le haut +1
ça correspond dans ta feuille à sélectionner la cellule A65536 (dernière de la colonne A) et à faire Ctrl+flèche de déplacement vers le haut.
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value
cellule (colonne=A, ligne=ligne) de la feuille archives = cellule (colonne=A, ligne=i) de la feuille Facture
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value
cellule (colonne=B, ligne=ligne) de la feuille archives = cellule (colonne=B, ligne=i) de la feuille Facture , etc pour les autres
.Cells(ligne, 3) = Sheets("Facture").Cells(i, 3).Value
.Cells(ligne, 4) = Sheets("facture").Cells(i, 4).Value
.Cells(ligne, 5) = Sheets("Facture").Cells(i, 5).Value
.Cells(ligne, 6) = Sheets("Facture").Cells(i, 6).Value
.Cells(ligne, 7) = Sheets("Facture").Cells(i, 7).Value
' .Cells(ligne, 4) = Sheets("Facture").Cells(i, 6).Value
End With
Next i
'on retourne à la ligne For i=16....
End Sub
Comme je suis un feignant, on va simplifier : on ne s'occupe que des lignes suivies de commentaires en bleu
Page Archives, la dernière ligne non-vide est par exemple la 254
Ce qui donne :
lig = Sheets("Facture").Range("A32").Row
lig = 32
For i = 16 To lig
Premier passage
i = 16 => i>lig = Faux => on passe à la ligne suivante
ligne = .Range("A65536").End(xlUp).Row + 1
ligne = 254 + 1 = 255
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value
A255 de Archives = A16 de Facture etc...
Next i Retour à la ligne for
For i = 16 To lig
Deuxième passage
i = 16 + 1 => i>lig = Faux => on passe à la ligne suivante
ligne = .Range("A65536").End(xlUp).Row + 1
ligne = 255 + 1 = 256
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value
A256 de Archives = A17 de Facture etc...
Next i Retour à la ligne for
Next i
Donc, i et ligne vont prendre les valeurs suivantes successivement :
i=18 / ligne=257
i=19 / ligne=258
i=20 / ligne=259
i=21 / ligne=260
i=22 / ligne=261
i=23 / ligne=262
i=24 / ligne=263
i=25 / ligne=264
i=26 / ligne=265
i=27 / ligne=266
i=28 / ligne=267
i=29 / ligne=268
i=30 / ligne=269
i=31 / ligne=270
i=32 / ligne=271 on arrive à Next I, qui nous renvoie à la ligne for....
For i = 16 To lig
Dernier passage
i = 32+1=33 => 33>lig = VRAI (lig=32) => on passe directement à la ligne suivant la ligne Next i
Une autre manière de voir ta macro :
Sub Transfert()
Dim X as Byte
Dim Y as byte
Dim Ligne As Long
Ligne = Sheets("Archives").Range("A65536").End(xlUp).Row - 15
For X = 16 To 32
for Y = 1 to 7
Sheets("Archives").Cells(ligne+X, Y) = Sheets("Facture").Cells(X, Y)
next Y
next X
End Sub
A+