Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Signification de cette ligne

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

michelexcel

XLDnaute Occasionnel
Bonsoir tout le monde.
J'aimerais Comprendre ce que signifie cette ligne suivante. Ce n'est pas l'Aide d'Excel qui m'aide dans ce cas.
Alors cette ligne est : .Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value qui est dans cette partie de macro archivage:

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

Est-ce-que ca veut dire Aller sur ligne 1 colonne 2
et le For i = 16 to lig veut dire qu'il lit de la ligne 16 à 32 ?

Merci de votre attention et bonne fin de soirée
Michel
 
Re : Signification de cette ligne

salut

je suis pas tres fort en vba, mais je vais essayer
lire la ligne toute seule ne veu pas dire grand chose
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value
.cells
le point devant indique une sous classe dont la classe pricipale est definie par un with
plus haut nous avons with sheets("Archive") : nous avon donc affaire à la feuille archive et nous traitons donc une mise en place des informations dans une page archive sur la derniere ligne sur des colonnes 1,2,3
tu dois avoir une erreur de recopie
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value
doit etre
.Cells(ligne, 2) = Sheets("Facture").Cells(i, 2).Value

les differentes ligne de la page factures passent en archives

bonne soirée
 
Re : Signification de cette ligne

Bonsoir Michelexcel, Wilfried, bonsoir le forum,

Wilfried permets moi de completer ta réponse car il y a quelques erreurs dans le code d'origine et je souhaiterais en faire part à Michel.

Pour commencer, la ligne de déclaration :
Code:
Dim i, lig, ligne As Integer
Ce code n'est pas bien écrit et ne correspond pas, je pense, au souhait de celui qui l'a écrit. On peut déclarer plusieurs variables sur la même lignes mas il faut spécifier le type pour chacune d'entre elles. Je pense que l'auteur voulait déclarer ces trois variables comme Integer. Le code juste serait alors :
Code:
Dim i As Integer, lig As Integer, ligne As Integer

Viens alors cette bizarrerie qui définit la variable lig comme :
Code:
lig = Sheets("Facture").Range("A32").Row
En principe on utilise une variable quand celle-ci est susceptible de varier... Le numero de ligne de la cellule A32 de l'onglet Facture était, est et restera immuablement : 32. Donc une ligne pour rien et une variable pour rien... Car la ligne suivante devenait simplement :
Code:
For i = 16 To 32
Ce qui signifie que l'on va faire une boucle sur les lignes suivante dans laquelle la variable i va chaque fois changer de valeur de 16 à 32.
Code:
With Sheets("Archives")
Je ne reviendra pas sur l'excellente explication de Wilfried...
Code:
ligne = .Range("A65536").End(xlUp).Row + 1
Le code au dessus définit la variable ligne. Elle correspond à la première ligne vide de la colonne A (de l'onglet Archives œuf corse, à cause du point devant)
Code:
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value 
.Cells(ligne, [COLOR=red]2[/COLOR]) = Sheets("Facture").Cells(i, 2).Value 
.Cells(ligne, 3) = Sheets("Facture").Cells(i, 3).Value
(évidemment même remarque que Wilfried concernant l'erreur de recopie)
Cells(x,y) renvoie la cellule à l'intersection de la ligne x et de la yème colonne. Cells(1, 1) correspond à Range("A1"), Cells(2, 5) = Range("E2")...
Imaginons que ligne=25, la cellule A25 (de l'onglet Archives, toujours à cause du point devant) prend la même valeur que la cellule A16 de l'onglet Facture. B25 = B16 et C25 = C16.

Il manque le Next i dans ton code qui recommencerait la boucle avec i = 17. La variable Ligne deviendrait 26 et on aurait A26=A17, B26=B17, C26=C17... Jusqu'à i=32...

Finalement si on considère que la première ligne vide de l'onglet Archives était la ligne 25. À la fin de la macro, la plage A25:C40 de cet onglet récupère les valeurs de la plage A16:C32 de l'onglet Facture.
 
Re : Signification de cette ligne

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
 
Re : Signification de cette ligne

Bonsoir Robert et tous les lecteurs,

Je répondais à Wilfried et en retournant oups une autre réponse. Je te remercie beaucoup pour ta réponse détaillée qui va me permettre de comprendre le processus. Je viens d'imprimer vos réponses et ce sera un grand pas pour mes connaissances.

Encore une fois un gros Merci
Michel
 
Re : Signification de cette ligne

re:

je ne pense pas avoir dit qu'il y avait un message d'erreur du compilateur
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 2).Value
la syntacxe est bonne mais personnelement je ne pense pas que l'on puisse stocker 2 renseignements dans une seule cellule de cette maniere
le colonne A de la farcture, meme si elle est archivée, elle est finalement ecrasée par la colonne B
si en colonne a tu as le code produit, il n'y est pas en archevage

A+
 
Re : Signification de cette ligne

Bonjour Michel, Wilfried, bonjour le forum

En fait la cellule de la ligne ligne de la colonne A (de l'onglet Archives)prend d'abord la valeur de la cellule de la ligne i de la colonne A de l'onglet Facture, puis juste après celle de la cellule de la ligne i de la colonne B.
Évidemment dans ce cas il y aurait une ligne en trop et c'est pour ça que nous pensons avec Wilfried que le code correct serait :
Code:
.Cells(ligne, 1) = Sheets("Facture").Cells(i, 1).Value 
.Cells(ligne, [B][COLOR=red]2[/COLOR][/B]) = Sheets("Facture").Cells(i, 2).Value
 
Re : Signification de cette ligne

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+
 
Re : Signification de cette ligne fichier xls

Bon matin à tous.

Comment vous remercier, Wilfried, Robert et Gorfael, pour vos réponses très détaillées, ce qui va m'aider réellement dans mon apprentissage. Je tente de vous faire parvenir pour votre curiosité le fichier xls en question que j’ai trouvé au cours de mes recherches (ce que j’aurais dû faire dès le début).

Alors si quelqu’un d’autre sur le forum veut profiter de vos expliquations pourra le faire, ayant en main le fichier de départ.

Encore une fois merci et je retourne lire vos explications.
Bonne journée
Michel
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
911
Réponses
15
Affichages
784
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
8
Affichages
780
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…