Transposer des lignes en colonnes

Bonjour,

Je souhaiterai transposer des lignes d'un tableau en colonne. Pour l'instant j'ai utilisé la formule "transposer", mais elle ne fonctionne que ligne par ligne. Or j'ai 96 lignes par tableau et une trentaine de tableau (qui contien de 20 à 30 colonnes), je vous laisse faire le calcul.

Si une macro existe je serai ravi de l'utiliser

Voici le fichier où j'ai mis un exemple de ce que je recherche sur une dizaine de ligne. Le but étant de transposer les données des cellules vertes sur les cellules bleues en une seule fois ou uune seule formule.

Il y a 2 lignes pour l'exemple mais en réalité il y en a 96 à transposer.

Bonjour,

Voir proposition avec 1 seul tableau et un TCD (manual).

Cdlt.

Merci, mais je recherche l'inverse.

Tu as démarré du 1er tableau pour aller au TDC. Or moi c'est le contraire que je recherche.

Bonjour,

à tester :

Sub transposer()
    Dim data As Variant
    Dim lig As Long, lig2 As Long, col As Long
    Dim result() As Variant

    data = Selection.Value
    If Not IsArray(data) Then
        MsgBox "Sélectionner la plage avec les titres"
        Exit Sub
    End If
       ReDim result(1 To 3, 1 To 1)
    For lig = 2 To UBound(data, 1)
        For col = 2 To UBound(data, 2)
            lig2 = lig2 + 1
            ReDim Preserve result(1 To 3, 1 To lig2)
            result(1, lig2) = data(lig, 1)
            result(2, lig2) = data(1, col)
            result(3, lig2) = data(lig, col)
        Next col
    Next lig
    [A:C].ClearContents
    [A1:C1] = Array("Département", "Tranche de poids", "Tarif")
    [A2].Resize(UBound(result, 2), 3) = Application.Transpose(result)
End Sub

eric

Merci beaucoup !

Elle fonctionne sur le fichier d'exemple. Je vais l'adapter sur mes fichiers grandeurs nature mais étant novice en macro je ne comprends pas tout le scénario que tu as ecrit.

Serait-il possible d'ajouter les commentaires pour comprendre les différentes démarches ?

J'ai commenté, mais finalement ça revient à écrire en français les instructions...

Sub transposer()
    Dim data As Variant
    Dim lig As Long, lig2 As Long, col As Long
    Dim result() As Variant

    ' mettre données en mémoire dans un tableau
    data = Selection.Value
    If Not IsArray(data) Then
        ' si la sélection n'est pas une plage
        MsgBox "Sélectionner la plage avec les titres"
        'quitter
        Exit Sub
    End If

    ReDim result(1 To 3, 1 To 1) ' préparer le tableau résultat
    For lig = 2 To UBound(data, 1) ' pour chaque ligne data
        For col = 2 To UBound(data, 2) ' pour chaque colonne data
            ' redimensionner tableau pour ligne suivante résultat
            lig2 = lig2 + 1
            ReDim Preserve result(1 To 3, 1 To lig2)
            ' stocker résultat
            result(1, lig2) = data(lig, 1) ' département
            result(2, lig2) = data(1, col) ' poids
            result(3, lig2) = data(lig, col) ' tarif
        Next col
    Next lig
    ' nettoyer plage résultat
    [A:C].ClearContents
    ' écrire titres
    [A1:C1] = Array("Département", "Tranche de poids", "Tarif")
    ' écrire résultat
    [A2].Resize(UBound(result, 2), 3) = Application.Transpose(result)
End Sub

eric

Oui mais ça permet de savoir quelles lignes je dois modifier pour élargir le tableau sur 98 département et 33 palettes.

Mais là j'ai du mal à bien repérer les données à modifier pour adapter l'exemple à la taillé reéelle du tableau.

Tu n'as rien à élargir du tout.

Tu sélectionnes ton tableau avec les titres de colonne et de ligne et tu lances la macro.

Elle se débrouille toute seule et te colles les résultat en A:C qui doivent être libres.

Ou bien si tes tableaux démarrent toujours au même endroit on peut le sélectionner automatiquement s'il est entouré de cellules vides.

Ou bien que tu ne désigne qu'une seule de ses cellules (toujours s'il est entouré de cellules vides)

eric

Sur le tableau de résultat il y a d'autres colonnes mais je les rajoute à la main, le contenu est fixe donc juste à rentrer la 1ere donnée de la colonne et à tirer la cellule.

Concernant la macro elle fonctionne, effectivement pas besoin de modification. J'ai essayé de la modifier pour qu'elle me mette le tableau sur d'autres colonnes mais pas réussi.

Merci pour cette macro, je vais pouvoir faire en une matinée le travail d'une bonne semaine (au total, ça me faisait 38 000 lignes à saisir à raison de 30s par ligne).

Merci beaucoup

Bonjour,

J'ai essayé de la modifier pour qu'elle me mette le tableau sur d'autres colonnes mais pas réussi.

Juste les 3 dernières lignes à modifier. Par exemple :

    [E:G].ClearContents
    [E1:G1] = Array("Département", "Tranche de poids", "Tarif")
    [E2].Resize(UBound(result, 2), 3) = Application.Transpose(result)

eric

ok.

Merci pour ton aide

Rechercher des sujets similaires à "transposer lignes colonnes"