[VBA] Masquer des colonnes identiques

Résolu
Bonjour,

J'ai besoin d'aide pour faire une macro.
J'ai un fichier excel de ce type :

http://www.cijoint.fr/cjlink.php?file=cj201103/cij1b5Q5Ml.xlsx

En gros une base de temps (la premiere ligne), et un certains nombre de variables qui prennent des valeurs au cours du temps. Par exemple dans ce fichier mes lignes 3 à 23 correspondent a 20 variables qui prennent des valeurs pendant le laps de temps entre 0,0 et 0,2.

J'aimerai faire une macro qui masque (ou qui supprime) automatiquement les colonnes ou l'ensemble des variables ne change pas de valeur. En gros si les colonnes cote a cote sont identiques, mis à part le temps qui évolue.

Par exemple dans le fichier joint, il ne faudrait garder que les colonnes A,C,F,G,I et J.

Pouvez vous m'aider ?

Merci !

3 réponses

  1. Contributeur
    Bonjour,

    Tu peux faire un plan sur les colonnes par macro :
    Sub groupeCol() 
        Dim col As Long, lig As Long 
        lig = 3 'ligne de base pour le regroupement des colonnes 
        ' 
        ActiveSheet.Outline.ShowLevels ColumnLevels:=2 
        On Error GoTo suite 
        Columns.Ungroup 
    suite: 
        On Error GoTo 0 
        For col = 2 To Cells(lig, Rows(1).Cells.Count).End(xlToLeft).Column 
            If Cells(lig, col) = Cells(lig, col - 1) Then Cells(lig, col).Columns.Group 
        Next col 
        ActiveSheet.Outline.ShowLevels ColumnLevels:=1 
    End Sub 
    

    Ex : http://www.cijoint.fr/cjlink.php?file=cj201104/cijgL1i7Jd.xls
    Pas le temps de donner plus d'explications mais je reviens dans 1h.

    eric

    edit : de retour, et remplacement par une version un peu plus élaborée.
    Et je viens de voir qu'il faut contrôler les changements sur toutes les lignes, nouvelle version un peut plus tard
    0
    1. Contributeur
      Re,

      La version définitive :
      Sub groupeCol()
          Dim col As Long, lig As Long, derlig As Long
          '
          ActiveSheet.Outline.ShowLevels ColumnLevels:=2
          On Error GoTo suite
          Columns.Ungroup
      suite:
          On Error GoTo 0
          derlig = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row
          For col = 2 To Cells(3, Rows(1).Cells.Count).End(xlToLeft).Column
              For lig = 3 To derlig
                  If Cells(lig, col) <> Cells(lig, col - 1) Then Exit For
              Next lig
              If lig > derlig Then Cells(lig, col).Columns.Group
          Next col
          ActiveSheet.Outline.ShowLevels ColumnLevels:=1
      End Sub

      http://www.cijoint.fr/cjlink.php?file=cj201104/cijVkxPn3x.xls

      eric
      0