VBA coller transposé de plusieurs colonnes à la suite

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