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 :

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