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.
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.
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