Masquer des colonnes en fonction du libellé de la première ligne

Bonjour à tous,

J'utilise un logiciel de de gestion, avec lequel je fais régulièrement des extractions sur Excel.

Le logiciel extrait beaucoup d'informations, bien plus que ce qu'il me faut. J'avais donc créé une macro très simple me permettant de cacher en 1 clic toutes les colonnes qui ne m'intéressent pas.

Basiquement je me contentais de sélectionner les colonnes puis de les masquer (Il y a sans doute des moyens plus efficaces mais à mon niveau c'était le plus simple pour être sur que ça fonctionne :D ) (Exemple raccourci ci dessous)

Sub MacroSimple()

    Range("A").Select
    Selection.EntireColumn.Hidden = True
    Range("C").Select
    Selection.EntireColumn.Hidden = True
End Sub

Le soucis est que ce logiciel est souvent mis à jour, et des colonnes apparaissent, disparaissent, décalant tout à chaque mise à jour.

Pour ne pas devoir modifier ma macro précédente à chaque fois, j'essaie de créer une macro qui puisse cacher la colonne en fonction du libellé de la première ligne.

Mon idée est donc de créer une liste, puis de faire un tableau avec tous les libellés sur la ligne 1, puis de tester au fur et à mesure si le libellé est dans la liste, et si oui cacher la colonne.

Voici le code de mon idée:

Sub MacroTableau()
    Dim tableau2()
    Dim tableau(), i As Integer

    tableau2 = Array("TEST", "MESSAGE", "SOMME", "BOOP", "MSG", "TXT") ' liste des libellés des colonnes à masquer
    tableau = Range("A1:AN1")                                          ' 40 premières valeurs de la ligne 1
        For i = 1 To 40                  ' pour chaque i
            For j = 0 To 5               ' pour chaque j
                If tableau(1, i) = tableau2(j) Then 'on teste si la valeur de la case est dans la liste des libellés à cacher
                    Select Range()
                    Selection.EntireColumn.Hidden = True  'on cache
            Next
        Next

End Sub

Étant débutant/casu j'ai un peu de mal à travailler avec les colonnes. J'aimerai savoir comment sélectionner la colonne correspondante à la ligne 9 du code. Je ne sais pas si le reste du code est bon mais je test petit à petit ^-^

Si vous avez une autre solution qui vous parait évidente mais qui ne l'est pas pour moi je suis aussi preneur, comme je l'ai dit je n'utilise vba que très casuellement, et à part ça j'ai appris quelques bases de certains langages mais je ne suis pas développeur!

J'espère avoir réussi à exprimer clairement mon problème, s'il faut je pourrai faire un fichier d'exemple.

Merci d'avance! :)

Je reste à votre dispo pour toutes questions!

Bonjour

Tu devrais joindre un extrait de ton tableau en indiquant les colonnes que tu veux afficher (en mettant en couleur le titre de leur colonne, par exemple..

Bye !

Bonjour à tous,

Un exemple en partant du principe que tous les libellés seront trouvés sur la ligne 1, c'est à dire que je ne me suis pas penché sur la gestion d'erreur dans le cas où un libellé n'est pas trouvé. N'étant pas fan des boucles imbriquées, génératrices de ressources j'ai utilisé la méthode .find. Je ne suis pas développeur non plus, donc pas sûr que ce soit le plus optimal mais c'est fonctionnel :

Sub MacroTableau()
Dim LIBELLES(), LIBELLE As Variant, COL%
LIBELLES = Array("TEST", "MESSAGE", "SOMME", "BOOP", "MSG", "TXT")
For Each LIBELLE In LIBELLES
    COL = Worksheets("Feuil1").Rows(1).Find(LIBELLE).Column 'Nom de la feuille à adapter
    Worksheets("Feuil1").Columns(COL).EntireColumn.Hidden = True 'Nom de la feuille à adapter
Next
End Sub

Cdlt,

Bonjour

Tu devrais joindre un extrait de ton tableau en indiquant les colonnes que tu veux afficher (en mettant en couleur le titre de leur colonne, par exemple..

Bye !

Bonjour!

Je ne pensais pas que ce serai nécessaire mais c'est vrai que c'est quand même plus pratique, j'ai créé un petit fichier pour faire les tests de mon coté ;)

Un exemple en partant du principe que tous les libellés seront trouvés sur la ligne 1, c'est à dire que je ne me suis pas penché sur la gestion d'erreur dans le cas où un libellé n'est pas trouvé. N'étant pas fan des boucles imbriquées, génératrices de ressources j'ai utilisé la méthode .find. Je ne suis pas développeur non plus, donc pas sûr que ce soit le plus optimal mais c'est fonctionnel :

Sub MacroTableau()
Dim LIBELLES(), LIBELLE As Variant, COL%
LIBELLES = Array("TEST", "MESSAGE", "SOMME", "BOOP", "MSG", "TXT")
For Each LIBELLE In LIBELLES
    COL = Worksheets("Feuil1").Rows(1).Find(LIBELLE).Column 'Nom de la feuille à adapter
    Worksheets("Feuil1").Columns(COL).EntireColumn.Hidden = True 'Nom de la feuille à adapter
Next
End Sub

Bonjour Ergotamine, merci de ta réponse!

C'est une très bonne idée d'utiliser le .find , en plus je connaissais mais je n'y ai juste pas pensé et j'ai commencé à faire des boucles par réflexe ^-^

Ton code fonctionne très bien, j'ai ajouté une petite ligne pour gérer les erreurs si un libellé change et n'apparait plus, voici le code final :

Sub MacroTableau2()
Dim LIBELLES(), LIBELLE As Variant, COL%
LIBELLES = Array("BOOP3", "TestErreur", "BOOP4", "BOOP7", "BOOP9", "Erreur2")
For Each LIBELLE In LIBELLES
    On Error Resume Next                                       'Gestion des erreurs
    COL = Worksheets("Base").Rows(1).Find(LIBELLE).Column      'Nom de la feuille à adapter
    Worksheets("Base").Columns(COL).EntireColumn.Hidden = True 'Nom de la feuille à adapter
Next
End Sub

Voilà une petite macro bien pratique qui pourra sans doutes resservir à d'autres!

Un grand merci encore, vous pouvez clore le sujet!

Azounet ;p

Rechercher des sujets similaires à "masquer colonnes fonction libelle premiere ligne"