Transposition de données

Bonjour à tous,

Je sollicite votre aide afin de m’aider à trouver une manière de transposer des données dans le cadre de ma thèse.

En effet, je possède un dataset qui se trouve comme celui-ci, c’est-à-dire avec plus de 1000 entreprises en ligne et 6 ratios réparti en 6 années pour les colonnes.

Mon superviseur veut que je transpose les données dans la manière suivante pour toutes les entreprises:

C’est à dire avoir toujours les ratios en colonne, mais cette fois-ci avec les années en ligne.

J’ai beau essayer avec différentes formule telles que Index ou rechercheV, je ne trouve pas une manière efficace pour m’éviter de devoir tout transposer à la main.

Dataset v2 Thesis EdouardD.xlsx (447,4 Ko)

Merci beaucoup d’avance !
Bonne soirée :slight_smile:

bonsoir,
cela s’appèle un « unpivot » (le contraire de créer un TCD, tableau croisé dynamique)
on peut utiliser PQ, VBA ou les nouveaux fonctions 365.
Ici une solution avec VBA (=une macro)

Sub Unpivot()
     Dim c, aA, aOut, i, aEntete

     t = Timer
     With Sheets("résultats")
          Set c = .Range("A3:A" & .Range("A" & Rows.Count).End(xlUp).Row).Resize(, .Cells(2, Columns.Count).End(xlToLeft).Column)     'la plage des données
          aA = c.Value                       'lire les données
          aEntete = c.Offset(-1).Resize(1).Value     'les années dans l'entête
          ReDim aOut(1 To UBound(aA) * 6, 1 To 13)     'préparer dimensions du tableau

          For i1 = 1 To UBound(aA)           'boucle les lignes
               For i2 = 1 To 6               'boucle les années
                    ptr = ptr + 1            'incrementer pointer
                    aOut(ptr, 7) = aEntete(1, 6 + i2)     '7ieme colonne du tableau = l'année
                    For i3 = 1 To 6          'boucle de 1 à 6
                         aOut(ptr, i3) = aA(i1, i3)     'les 6 premières colonnes = 6 premières colonnes de Résultat
                         aOut(ptr, 7 + i3) = aA(i1, 6 + i2 + (i3 - 1) * 6)     'les colonnes 8 à 13 = leverage, self finance, ....
                    Next
               Next
          Next
     End With

     With Sheets("blad1")                    'feuille pour coller les résultat
          .UsedRange.Offset(1).ClearContents     'RAZ
          .Range("A2").Resize(ptr, UBound(aOut, 2)).Value = aOut     'coller
          .UsedRange.EntireColumn.AutoFit    'ajuster largeur des colonnes
     End With
     MsgBox "prêt en " & Format(Timer - t, "0.00\s")

End Sub

Dataset v2 Thesis EdouardD.xlsm (963,7 Ko)

Cela m’avance grandement, un immense merci!

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.