Parfois, il est nécessaire de convertir un tableau croisé (pivot) en un tableau plat. Cette procédure est appelée " redressement des données "
Le programme LibreOffice Calc n'a pas de fonctionnalité standard pour convertir les tableaux croisés dynamiques en " plat ", mais vous pouvez écrire vous-même la procédure correspondante. Voyons comment procéder.
Regardons l'image ci-dessous pour mieux comprendre l'essence du problème. A gauche nous avons un tableau sous forme de matrice (tableau croisé dynamique), et à droite - un tableau régulier avec des colonnes (tableau plat) :
Lorsque vous développez une table, vous décompressez la paire attribut-valeur qui constitue l'intersection des colonnes de la table matricielle et vous les réorientez vers les colonnes aplaties de la table plate :
Ouvrez le menu Tools - Macros - Edit Macros..., sélectionnez Module1 et copiez le texte suivant dans le module :
Sub UnPivotTable ' moonexcel.com.ua Dim oBook As Object Dim oActiveSheet As Object Dim oSelRange As Object Dim oNewSheet As Object Dim i As Long Dim iTopLabelRowCount As Integer Dim iSideLabelColCount As Integer oBook = ThisComponent oActiveSheet = oBook.CurrentController.ActiveSheet oSelRange = oBook.CurrentSelection ' Ajouter une nouvelle feuille oBook.Sheets.insertNewByName("UnPivoted Table",0) oNewSheet = oBook.Sheets(0) ' Déterminer la taille des en-têtes iTopLabelRowCount = InputBox(" Combien de lignes dans l’en-tête supérieur ? ") iSideLabelColCount = InputBox(" Combien de colonnes dans l’en-tête latéral ? ") i = 0 For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count For j = 1 To iSideLabelColCount oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula Next j For k = 1 To iTopLabelRowCount oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula Next k oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula i = i + 1 Next c Next r End Sub
Ensuite, fermez Macro Editor et revenez à votre feuille de calcul dans LibreOffice Calc. Sélectionnez le tableau entier avec les en-têtes en haut et à gauche et exécutez notre nouvelle macro via le menu Tools - Macros - Run Macro...
La macro insérera une nouvelle feuille nommée dans votre classeur
Vous pouvez également utiliser l'utilitaire "Tableau croisé dynamique (Unpivot)" en installant l'extension YLC_Utilities.oxt .
Après cela, cet utilitaire sera disponible dans tous les fichiers qui seront ouverts dans LibreOffice Calc.