[VBA] Masquer des colonnes identiques

Résolu/Fermé
actaris51 Messages postés 93 Date d'inscription mardi 15 juillet 2008 Statut Membre Dernière intervention 11 juillet 2011 - 29 mars 2011 à 17:20
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 - 4 avril 2011 à 10:23
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 !

A voir également:

3 réponses

tu veut quoi exactement?
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié par eriiic le 4/04/2011 à 09:54
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
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
4 avril 2011 à 10:23
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