CISCO
XLDnaute Barbatruc
Bonjour à tous
Comme je débute en VBA, et qu'il me reste quelques habitudes de Basic et de Fortran, je fais de nombreux essais avant d'arriver à un code qui fonctionne correctement.
Exemple, sur ce fil, dans une première version (post #8 du fil cité), je travaille avec la plage B2: D2 donc je peux faire par exemple
mais comme c'est dans une boucle, comme je sais que je travaille sur la plage allant de B à D sur la ligne i, cela me donne
Dans une autre version (post #10 du fil cité ci-dessus), je travaille avec une plage dont je ne connais pas exactement la position (la ligne et les colonnes peuvent changer car la macro doit pouvoir fonctionner sur plusieurs tableaux dont on ne connait pas la position à l'avance). J'ai fait, pour obtenir la même chose que précédemment, avec
Autrement dit, j'ai attribué l'adresse (la référence) du début de la plage à copier au nom Totaldébut, l'adresse de la fin à Totalfin, et j'ai mis cela dans Range, ce qui donne Range(Totaldébut, Totalfin). De même, j'ai attribué l'adresse de la cellule destinatrice à Pasdutoutdébut avant de faire le collage spécial.
1ère question : Est-ce qu'il ni a pas plus simple, par exemple
ou encore
J'ai essayé, et cela ne fonctionne pas. Dommage...
2ème question : Dans la méthode précédente, Range(Totaldébut, Totalfin) désigne toute la plage allant de l'adresse totaldébut à l'adresse Totalfin. Comment fait-on si on ne veut que la plage contenant les deux cellules non contiguës correspondant aux adresses Totaldébut et Totalfin, et non la plage allant de l'une à l'autre, ces cellules y comprises ?
Merci
@ plus
Comme je débute en VBA, et qu'il me reste quelques habitudes de Basic et de Fortran, je fais de nombreux essais avant d'arriver à un code qui fonctionne correctement.
Exemple, sur ce fil, dans une première version (post #8 du fil cité), je travaille avec la plage B2: D2 donc je peux faire par exemple
Code:
Range("B2:D2").Copy
Range("B8").PasteSpecial xlValue
Code:
For i = 2 To Dernligne Step Paquetligne
Range("B" & i & ":D" & i).Copy
Range("B" & i + Paquetligne - 1).PasteSpecial xlValue
Next
Dans une autre version (post #10 du fil cité ci-dessus), je travaille avec une plage dont je ne connais pas exactement la position (la ligne et les colonnes peuvent changer car la macro doit pouvoir fonctionner sur plusieurs tableaux dont on ne connait pas la position à l'avance). J'ai fait, pour obtenir la même chose que précédemment, avec
Code:
For i = Premligne To Dernligne - 1 Step Paquetligne
Totaldébut = Cells(i + 1, Premcol + 1).AddressLocal
Totalfin = Cells(i + 1, Derncol).AddressLocal
Range(Totaldébut, Totalfin).Copy
Pasdutoutdébut = Cells(i + Paquetligne, Premcol + 1).AddressLocal
Range(Pasdutoutdébut).PasteSpecial xlValue
Autrement dit, j'ai attribué l'adresse (la référence) du début de la plage à copier au nom Totaldébut, l'adresse de la fin à Totalfin, et j'ai mis cela dans Range, ce qui donne Range(Totaldébut, Totalfin). De même, j'ai attribué l'adresse de la cellule destinatrice à Pasdutoutdébut avant de faire le collage spécial.
1ère question : Est-ce qu'il ni a pas plus simple, par exemple
Code:
Total = Cells(i + 1, Premcol + 1) & ":" & Cells(i + 1, Derncol)
Range(Total).Copy
Code:
Range(Cells(i + 1, Premcol + 1) & ":" & Cells(i + 1, Derncol)).Copy
2ème question : Dans la méthode précédente, Range(Totaldébut, Totalfin) désigne toute la plage allant de l'adresse totaldébut à l'adresse Totalfin. Comment fait-on si on ne veut que la plage contenant les deux cellules non contiguës correspondant aux adresses Totaldébut et Totalfin, et non la plage allant de l'une à l'autre, ces cellules y comprises ?
Merci
@ plus
Dernière édition: