VBA coller transposé de plusieurs colonnes à la suite

Résolu/Fermé
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019 - 13 déc. 2016 à 18:38
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019 - 14 déc. 2016 à 19:22
Bonsoir,

Voilà ce que j'aimerais obtenir:

a b c
e f g

a e b f c g

Pour cela j'ai écris le code suivant. Cependant il y a quelque chose qui ne va pas, quelqu'un pourrait m'aider. Je suis pas bonne en programmation mais j'y travaille.

Sub transposé()

Worksheets(2).Activate

Dim Firstline As Long
Dim Lastline As Long
Dim Column As Long
Dim NbrCol As Long
Dim Nbrline As Long
Dim Col As Long
Dim Firstcolumn As Long

Firstcolumn = 2
Firstline = 3
Lastline = 4
NbrCol = 3
Nbrline = 2

For Column = 2 To 4 Step 1
Range(Cells(Firstline, Column), Cells(Lastline, Column)).Select
Selection.Copy
For Col = Firstcolumn To NbrCol * Nbrline Step Nbrline
Cells(Lastline + 2, Col).Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Next Col
Next Column



End Sub

1 réponse

thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681
13 déc. 2016 à 19:23
Bonsoir,

Essayer ce code

Const Firstline As Long = 3
Const Lastline As Long = 4
Const NbrCol As Long = 3
Const Nbrline As Long = 2
Const Firstcolumn As Long = 2
Dim c As Long

For c = 0 To NbrCol - 1
Cells(Lastline + 2, Firstcolumn + c * Nbrline).Resize(, Nbrline).Value = Application.Transpose(Range(Cells(Firstline, Firstcolumn + c), Cells(Lastline, Firstcolumn + c)).Value)
Next c

--
 
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
13 déc. 2016 à 19:45
ça marche ! Merci !
Mon code était vraiment trop mauvais ? J'aurai bien aimé comprendre ce qui n'allait pas.
0
thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024 681 > camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019
Modifié par thev le 13/12/2016 à 21:26
Je ne pense pas et j'y ai trouvé du bon comme la bonne explicitation des constantes.
Une double boucle n'était pas vraiment nécessaire. Avec une simple boucle, il est plus facile de voir ce qui ne fonctionne pas.

Cette instruction :
Cells(Lastline + 2, Col).Select 
ne sélectionne qu'une cellule. Pour sélectionner une plage à partir d'une cellule, il faut utiliser la propriété resize :
Cells(Lastline + 2, Col).resize(2) 
= plage de 2 cellules sur 1 colonne et 2 lignes
Cells(Lastline + 2, Col).resize(,2) 
= plage de 2 cellules sur 2 colonnes et 1 ligne
Cells(Lastline + 2, Col).resize(2,2) 
= plage de 4 cellules sur 2 colonnes et 2 lignes
0
camcam1404 Messages postés 64 Date d'inscription mardi 13 décembre 2016 Statut Membre Dernière intervention 9 septembre 2019 > thev Messages postés 1852 Date d'inscription lundi 7 avril 2008 Statut Membre Dernière intervention 23 avril 2024
14 déc. 2016 à 19:22
Très bien, merci ! C'est noté.
0