[VBA] Masquer des colonnes identiques

Résolu
actaris51 Messages postés 106 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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