Afficher/masquer des colonnes en fonction 1 cellule colonnes

Bonjour à tous,

Je suis tout nouveau sur ce forum et je découvre tout juste le monde VBA.

N'ayant pas trouvé la solution après de multiples recherches sur différents forums, je sollicite votre aide sur plusieurs points concernant le fichier joint ci-dessous:

- j'aimerai afficher ou masquer des colonnes d'un tableau (plage dynamique), en fonction du contenu de la cellule en haut de chaque colonne, (tableau en B2:M9 pour l'exemple, liste déroulante en A2 et ligne 1 contenant les noms des utilisateurs)

par exemple : si B1 contient "Titi", E1 contient "Koko" et H1 contient "Lala", je voudrais n'afficher que les colonnes contenant "Titi", ou uniquement celles contenant "Koko" ou uniquement celles contenant "Lala", soit juste B1 ou juste E1 ou juste H1, en fonction du choix fait dans la liste déroulante (créée par validation de données)=> j'y arrive à peu près.

Mais ça se corse lorsque l'on retrouve plusieurs entrées dans la cellule supérieure: si j'ai "Tous" en L1, ou si j'ai "Titi" et "Koko" dans la même cellule J1 ou "Koko Lala" en M1, je n'arrive plus à faire ma sélection.

Le but étant que l'utilisateur Koko puisse voir toute les colonnes qui l'intéressent en choisissant simplement dans la liste déroulante son nom "Koko", idem pour "Titi" et pour "Lala". Certaines colonnes intéressent les 3 utilisateurs donc ils doivent y avoir accès. Et il ne faut pas qu'ils voient les champs ne les intéressant pas, afin de simplifier l'utilisation du fichier (beaucoup plus de colonnes et de lignes dans le vrai fichier^^)

L'option "Tout afficher" permet tout de même de voir tous les champs.

- optimiser le code pour plus de rapidité d'ouverture du fichier et d'application des macros.

Les en-têtes du tableau importent peu.

Le fichier simplifié contient le code que j'ai essayé dans VBA, mais je n'arrive pas à afficher les colonnes pour lesquelles plusieurs utilisateurs doivent avoir la visibilité.

Pourriez-vous m'aider s'il vous plaît, soit en m'indiquant un sujet similaire duquel je suis passé à côté soit en m'indiquant le code nécessaire?

Je vous remercie d'avance pour le temps que vous y consacrerai, vous me sauverez la mise.

Bonne journée à tous,

Cordialement,

Lebowski.

Bonjour à tester,

voir si ça peut te convenir.

Cordialement.

Bonjour BigDaddy154,

Je te remercie pour cette réponse, je vais essayer de l'appliquer à mon vrai fichier plus compliqué et je reviens vers toi pour te tenir au courant.

Je mettrai résolu après mes tentatives, au cas où

Merci beaucoup en tout cas, ça semble bien plus simple que ce que j'avais fait !!!

Bon après-midi.

Bonjour BigDaddy154,

Il me manquait le like suivi de Tous imbriqué, merci beaucoup!

Pour info voici mon code final, surement optimisable mais bon tant qu'il marche ^^

Private Sub Worksheet_Change(ByVal R As Range)

    Application.ScreenUpdating = False 'on ne met pas à jour l'écran pour gagner en rapidité

     If R.Address <> "$A$4" Then Exit Sub 'si une case différente de A4 est choisie on arrête, sinon si A4 est choisie on applique:

      Dim dc As Integer 'définition des variables
      Dim n As Integer
      Dim nom As String

       With Sheets("XXX").Cells 'sélectionne toute les cellules
       .EntireColumn.Hidden = False 'afficher toutes les colonnes
       End With

        Select Case R.Value 'si la valeur de r, soit A4, est:

           Case Is = "" 'si la valeur de r = rien
              R.Value = "Veuillez choisir votre service svp" 'écrire ce texte dans la cellule
              R.Font.Bold = True 'mettre en gras la cellule
              R.Font.ColorIndex = 3 'mettre en rouge la cellule

           Case Is = "Tout afficher"
             With Sheets("XXX").Cells 'sélectionne toute les cellules
             .EntireColumn.Hidden = False 'afficher toutes les colonnes
             End With
             R.Font.Bold = False 'modification police
             R.Font.ColorIndex = 1
             Range("B4").Select

           Case Is <> "", "Tout afficher", "Veuillez choisir votre service svp" 'si la valeur de r est différente de rien ou tout afficher
             dc = Cells(3, Columns.Count).End(xlToLeft).Column 'dc est la dernière case de la ligne 3 non vide
             nom = Range("a4")
              For n = dc To 2 Step -1
                 If Not Cells(3, n) Like "*" & nom & "*" Then
                   If Cells(3, n) <> "Tous" Then Columns(n).Hidden = True
                 End If
              Next n
             R.Font.Bold = False
             R.Font.ColorIndex = 1
             Range("B4").Select

        End Select

      Application.ScreenUpdating = True 'remettre l'écran à jour pour voir les modificiations

End Sub

Je te remercie grandement.

Bonne continuation,

Lebowski.

Rechercher des sujets similaires à "afficher masquer colonnes fonction"