Transposition en chaine

Bonjour,

Malgré des recherches sur le forum je n'ai pas trouvé de réponse à mon problème.

Je me permet donc de vous le poster ici.

Mon problème me semble très simple, mais je n'ai pas les connaissances en VBA pour construire la réponse.

J'ai un tableau de 8 colonnes et un nombre de ligne variable selon le fichier à traiter.

Mon but est de copié et coller transposer les 8 colonnes en 1 seul colonne mais 8 lignes.

Donc :

02/01/2020 bq2 471000 NA34004685 ABON LCL 4,10 (vide) 1

Vers :

02/01/2020

bq2

471000

NA34004685

ABON LCL

4,10

(vide)

1

Sur un nombre restreint de ligne c'est exécutable manuellement, sur des centaines de fichiers avec des centaines de ligne cela devient impossible.

Merci d'avance de votre aide !

Cordialement

Bonjour,

Sans VBA, il existe un collage spécial "transposé", si ça peut vous aider...

Pour VBA, une syntaxe très générique (à adapter) :

Sub Transpose()

Dim Lig As Long, LigMax As Long, Col As Integer, ColMax As Integer

With Sheets("Source") 'Nom feuille à adapter
     LigMax = .Range("A" & Rows.Count).End(xlUp).Row 'Dernière ligne (basé sur colonne "A")
     ColMax = .Cells(1, Columns.Count).End(xlToLeft).Column 'Dernière colonne (basé sur ligne 1)
     For Lig = 1 To LigMax 'Boucle sur les lignes
          For Col = 1 To ColMax 'Boucle sur les colonnes
               Sheets("Destination").Cells(Col, Lig) = .Cells(Lig, Col) 'Inversion des indices de ligne et colonne entre les 2 feuilles 
          Next Col
     Next Lig
End With

End Sub

PS : il est aussi possible de boucler sur les fichiers d'un répertoire, et/ou sur les feuilles d'un classeur

Bonjour,

Merci de votre retour.

La macro me retourne :

Erreur de compilation

Référence de variable de contrôle incorrecte dans Next

et met en surbrillance "Ligne"

Cordialement

La macro me retourne :

Erreur de compilation

Référence de variable de contrôle incorrecte dans Next

et met en surbrillance "Ligne"

Cordialement

Une erreur d'inattention de ma part, ma variable s'appelle Lig, c'est donc Next Lig.

Bonjour,

J'ai fait la modification, mais cela me indique autre erreur :

Erreur d'exécution '1004':

Erreur définie par l'application ou par l'objet

Débogage me renvoie :

Sheets("B").Cells(Colonne, Ligne) = .Cells(Ligne, Colonne) 'Inversion des indices de ligne et colonne entre les 2 feuilles

Désoler de vous prendre du temps pour mon incompétence sur ce domaine.

Cordialement

Même punition ! C'est Lig et Col partout, ou Ligne et Colonne partout...

Désolé de la boulette, j'aurais du me relire !

Bonjour,

merci ça fonctionne très bien, mais le résultat n'est pas celui voulu.

Je me suis surement mal exprimé au départ, mais je souhaite que toutes les lignes sois transposer en une seule colonne.

Donc :

02/01/2020 bq2 471000 NA34004685 ABON LCL 4,10 (vide) 1

02/01/2020 bq2 512330 NA34004685 ABON LCL (vide) 4,10 1

Vers :

43832

bq2

471000

NA34004685

ABON LCL

4,1

(vide)

1

43832

bq2

512330

NA34004685

ABON LCL

(vide)

4,1

1

Ainsi, cela revient à mettre bout à bout chaque colonne de la macro précédente dans une seul colonne.

Merci d'avance de votre retour.

Cordialement.

Autre essai :

Sub Transpose()

Dim Lig As Long, LigMax As Long, Col As Integer, ColMax As Integer, i As Long

With Sheets("Source") 'Nom feuille à adapter
     LigMax = .Range("A" & Rows.Count).End(xlUp).Row 'Dernière ligne (basé sur colonne "A")
     ColMax = .Cells(1, Columns.Count).End(xlToLeft).Column 'Dernière colonne (basé sur ligne 1)
     For Lig = 1 To LigMax 'Boucle sur les lignes
          For Col = 1 To ColMax 'Boucle sur les colonnes
               i = i + 1 'Incrémente le compteur des lignes de destination
               Sheets("Destination").Cells(i, 1) = .Cells(Lig, Col)
          Next Col
     Next Lig
End With

End Sub

Bonjour,

Bonjour Pedro22,

Une autre proposition.

Cdlt.

6kyopi.xlsm (19.02 Ko)
Public Sub TransposeData()
Dim ws As Worksheet, ws2 As Worksheet
Dim lastRow As Long, lRow As Long, rw As Long
Const N As Long = 8
    Set ws = Worksheets("Sheet1"): Set ws2 = Worksheets("Sheet2")
    ws2.Cells(1).CurrentRegion.ClearContents
    lRow = 1
    With ws
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For rw = 1 To lastRow
            ws2.Cells(lRow, 1).Resize(N).Value = WorksheetFunction.Transpose(.Cells(rw, 1).Resize(, N).Value)
            lRow = lRow + N
        Next rw
    End With
End Sub

Bonjour a vous deux

Merci pour vos solutions, la proposition de Jean-Eric me convient parfaitement.

Merci de ton aide Pedro22.

Cordialement

Rechercher des sujets similaires à "transposition chaine"