Afficher et Masquer en VBA (avec une liste pour gérer)

Bonjour,

Voici un petit vba que j'ai pu faire en cherchant des exemples sur le net et surtout en me promenant ici.

Cela permet d'afficher ou masquer des colonnes dans des feuilles.

  • On renseigne dans une feuille nommé "Liste" les feuilles qui seront affecté par la macro
  • On renseigne, en face du nom de chaque feuilles les colonnes qui sont a afficher ou masquer.

Dans mon cas j'avais 4 zones a masquer ou afficher.

J'ai mi en vert certaines lignes des macros qui font partie de la protection que j'utilise sur mon fichier de base

Je sais pas si je suis clair ^^

Je n'ai pas de demande, c'est pour le partage. Mais j'ai contre des critiques pour me faire progresser !

Cdt

Harrisa23

52affichemasque.zip (13.22 Ko)

Bonjour Harissa, bonjour le forum,

Ci-dessous ton code simplifié et commenté. Il faut absolument éviter les Select inutiles qui ne font que ralentir l'exécution du code. Le code que je te propose va fonctionner même si tu rajoutes des onglets et/ou des zones. Il boucle sur tous les onglets autres que Accueil et Liste. Ensuite il recherche dans la colonne A de l'onglet Liste le nom de l'onglet de la boucle. On obtient ainsi la ligne où sont stockées les zones. il suffit de parcourir les colonnes 5 à dernière colonne éditée de cette ligne pour masquer les colonnes de l'onglet de la boucle.

Pour afficher j'ai fait au plus simple...

Le code :

Private L As Worksheet 'déclare la variable L (onglet Liste)
Private O As Worksheet 'déclare la variable O (Onglets)

Sub masquer()
Dim R As Range 'déclare la variable R (Recherche)
Dim C As Byte 'déclare la variable C (Colonne)

Set L = Sheets("Liste") 'déclare la variable B
For Each O In Sheets 'boucle 1 : sur tous les onglets du classeur
    If Not O.Name = "Accueil" And Not O.Name = "Liste" Then 'condition 1 : si le nom l'onglet est différent de "Accueil" ou de "Liste"
        Set R = L.Columns(1).Find(O.Name, , xlValues, xlWhole) 'définit la recherche R (recherche le nom entier de l'onglet de la boucle dans la colonne 1 de l'onglet "Liste")
        If Not R Is Nothing Then 'condition 2 : si il existe au moins une occurrence trouvée
            For C = 5 To L.Cells(R.Row, Application.Columns.Count).End(xlToLeft).Column 'boucle 2 : sur les colonnes 5 à la dernière colonne éditée de la ligne de l'occurrence trouvée
                O.Columns(L.Cells(R.Row, C).Value).Hidden = True 'masque la ou les colonnes indiquées dans la cellule correspondante
            Next C 'prochaine colonne de la boucle 2
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next O 'prochain onglet de la boucle 1
End Sub

Sub Afficher()
For Each O In Sheets 'boucle sur tous les onglets du classeur
    O.Cells.EntireColumn.Hidden = False 'affiche toutes les colonnes de l'onglet
    'O.Cells.EntireRow.Hidden = False
Next O 'prochain onglet de la boucle
End Sub

Sub cacheliste() 'permet de masquer ou d'afficher la feuille liste
Set L = Sheets("Liste") 'définit l'onglet L
L.Visible = Not L.Visible 'masque/affiche l'onglet L
End Sub

Merci ThauThème pour ta réponse.

J'en prends bonne note pour Select, il est clair que pour le moment j'en suis a un stade de débutant mais je me rends tout de même bien compte que je fais des macros assez lourds...D’ailleurs, la déclaration de variable n'est pas mon fort. C'est une chose que je vais tenter de vite corrigé ( en plus ça me semble pas si compliqué )

Par contre dans mon cas, je ne peux pas afficher toutes les colonnes des feuilles autres que Accueil et Liste.

Le code que j'ai extrait viens d'un fichier de chiffrage. J'ai plusieurs feuilles du type feuil1, mais plusieurs autres également ou ne faut surtout pas afficher les colonnes masqué. Exemple une feuille Descriptif où je masque et j'affiche une colonne avec des références de produit selon le cas ou j'imprime la feuille pour le commerce ou la production.

Merci encore, dès que j'ai plus la tête à cela et le temps surtout ( de comprendre ce que je fais XD ), j'adapterai mes macros sur la base des tiennes.

Cdt

Harrisa23

Bonjour Harrissa, bonjour le forum,

Dans ce cas pour Afficher tu peux utiliser le même code que pour la macro Masquer en remplaçant juste Hidden = True par Hidden = False...

Oui en effet, pas besoin d'avoir du temps ni la tête à cela, bon je n'ai plus qu'a faire du copier coller.

Merci encore ThauThème !

Cdt

Rechercher des sujets similaires à "afficher masquer vba liste gerer"