TOP

Réorganisation des tables (Unpivot) dans LibreOffice Calc

Description

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 " (unpivot data) . À la suite d'un tel " redressage " nous obtenons un tableau où toutes les données similaires sont dans une seule colonne.

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 :

  • Valeur (Values) (bleu à gauche) se développe dans une nouvelle colonne (bleu à droite) ;
  • Les attributs (Attributes) (vert à gauche) sont également développés dans une nouvelle colonne (vert à droite) et dupliqués selon la nouvelle colonne de valeurs.
  • Code StarBASIC pour la procédure UnPivotTable

    Ouvrez le menu Tools - Macros - Edit Macros..., sélectionnez Module1 et copiez le texte suivant dans le module :

    1. Sub UnPivotTable  
    2.   ' moonexcel.com.ua   
    3.   Dim oBook        As Object  
    4.   Dim oActiveSheet As Object  
    5.   Dim oSelRange    As Object  
    6.   Dim oNewSheet    As Object  
    7.     
    8.   Dim i                  As Long  
    9.   Dim iTopLabelRowCount  As Integer  
    10.   Dim iSideLabelColCount As Integer         
    11.     
    12.   oBook        = ThisComponent  
    13.   oActiveSheet = oBook.CurrentController.ActiveSheet  
    14.   oSelRange    = oBook.CurrentSelection  
    15.     
    16.   ' Ajouter une nouvelle feuille   
    17.   oBook.Sheets.insertNewByName("UnPivoted Table",0)  
    18.   oNewSheet = oBook.Sheets(0)  
    19.     
    20.   ' Déterminer la taille des en-têtes   
    21.   iTopLabelRowCount  = InputBox(" Combien de lignes dans l’en-tête supérieur ? ")  
    22.   iSideLabelColCount = InputBox(" Combien de colonnes dans l’en-tête latéral ? ")  
    23.               
    24.   i = 0  
    25.        
    26.   For r = (iTopLabelRowCount + 1) To oSelRange.Rows.Count  
    27.     For c = (iSideLabelColCount + 1) To oSelRange.Columns.Count              
    28.                          
    29.       For j = 1 To iSideLabelColCount                
    30.         oNewSheet.getCellByPosition(j-1, i).Formula = oSelRange.getCellByPosition(j-1, r-1).Formula                 
    31.       Next j  
    32.                
    33.       For k = 1 To iTopLabelRowCount  
    34.         oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, k-1).Formula  
    35.       Next k             
    36.                            
    37.       oNewSheet.getCellByPosition(j + k - 2, i).Formula = oSelRange.getCellByPosition(c-1, r-1).Formula  
    38.       i = i + 1                     
    39.               
    40.     Next c  
    41.   Next r  
    42. 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 "UnPivoted Table" , puis ajoutez un tableau au nouveau format. Avec une telle table, vous pouvez effectuer n'importe quelle analyse dans LibreOffice Calc.

    Utiliser l'extension

    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.

    Articles sur le sujet :

  • Réorganisation des tables (Unpivot) dans Excel