VBA coller transposé de plusieurs colonnes à la suite

Résolu
camcam1404 Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -  
camcam1404 Messages postés 64 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

1 réponse

thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713
 
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   Statut Membre Dernière intervention  
 
ça marche ! Merci !
Mon code était vraiment trop mauvais ? J'aurai bien aimé comprendre ce qui n'allait pas.
0
thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention   713 > camcam1404 Messages postés 64 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > thev Messages postés 1986 Date d'inscription   Statut Membre Dernière intervention  
 
Très bien, merci ! C'est noté.
0