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

  1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721
     
    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
    1. 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
      1. thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention   721 > 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
      2. camcam1404 Messages postés 68 Statut Membre > thev Messages postés 2005 Date d'inscription   Statut Membre Dernière intervention  
         
        Très bien, merci ! C'est noté.
        0