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 le point d'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 BASIC 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.

    Articles sur le sujet :

  • Réorganisation des tables (Unpivot) dans Excel