Afficher/Maquer des colonnes

Résolu
Bonjour,

Je voudrais savoir s'il est possible de modifier des colonnes en fonction d'un menu déroulant ?

Je m'explique :

Admettons que j'ai une liste déroulante dans ma colonne A (Permis) avec 2 options (Oui / Non)
Je souhaiterais savoir s'il était possible de faire apparaître ou disparaître des colonnes en fonction du résultat (Si "Oui" dans la colonne A, alors la colonne demande la date d'obtention en B apparaît si "Non" elle reste masquée)

Merci par avance pour vos réponses

PS : Pour le moment il s'agit juste d'une question, je ne sais pas ce qu'il est possible de faire avec VBA, masquer des colonnes (.hide ?) ou les afficher (.unhide ? // .ShowAllData ?)
Si vous pensez que cela est possible je joindrais alors un fichier pour que ce soit plus simple

3 réponses

  1. Bonjour,

    J'ai fais exactement cela pour un ami dernièrement, mais à l'aide de cases à cocher et non d'un menu déroulant.

    Je peux vous expliquer en détail si cela vous intéresse.
    0
    1. Effectivement je suis très intéressé !

      Je veux bien vos explications, mais je préfère vous prévenir je suis débutant en VBA.

      Je vous joint un exemple de mon fichier afin que ce soit plus facile.

      --> http://cjoint.com/data3/3GmoUjDNZQs.htm

      Merci pour votre aide.
      0
      1. Je vois qu'il y aura un problème...

        SI la ligne Ref1 dit de voir les colonnes L et M
        et qu'en Ref2 on doit les cacher, il y aura un conflit d'interet malheureusement.

        Je ne pense pas que cacher les colonnes soit la meilleure choses a faire.

        Soit 1)
        faire deux feuilles une sans arret et l'autre avec -> simplifie les choses
        Soit 2)
        mettre en place avec la mise en forme conditionnelle les cellules en Noires pour dire qu'elles sont inutiles.

        Désolé.

        Mais peut etre qu'une personne aura une meilleure idée que moi et réussira a cacher vos colonnes !
        0
      2. Bonjour,

        Je vois ce que vous voulez dire,
        J'avais également envisagé la 2ème option, je cherchais juste une meilleure solution !

        En tout cas, merci pour votre aide !
        0
    2. Contributeur
      Bonjour,

      Une proposition.
      L'affichage dépend de la ligne sélectionnée, ou bien seulement de la dernière sélection en B (activer l'un ou l'autre choix en mettant en commentaire la ligne de code avec une ')
      Private Sub Worksheet_Change(ByVal Target As Range)
          If Target.Count <> 1 Then Exit Sub
          If Target.Column = 2 And Target.Row > 1 Then masquer (Target)
      End Sub
      
      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
          If Target.Count <> 1 Then Exit Sub
          ' choix 1 : sélection d'une ligne change l'affichage
          If Target.Row > 1 Then masquer (Cells(Target.Row, "B"))
          ' choix 2 : sélection en colonne B change l'affichage
          'If Target.Column = 2 And Target.Row > 1 Then masquer (Target)
      End Sub
      
      Sub masquer(typeRDP As String)
      ' typeRDP="Blessure sans arrêt" : afficher L:M
      ' typeRDP="Blessure avec arrêt" : afficher L:O
      ' typeRDP= autres cas           : masquer L:O
          Range("L:O").EntireColumn.Hidden = True
          Select Case typeRDP
          Case "Blessure sans arrêt"
              Range("L:M").EntireColumn.Hidden = False
          Case "Blessure avec arrêt"
              Range("L:O").EntireColumn.Hidden = False
          Case Else
          End Select
      End Sub

      Clic-droit sur le nom de l'onglet et choisir 'visualiser le code...' pour modifier.
      https://www.cjoint.com/c/CGmpYpFoSul

      eric
      Jamais tu ne répondras à un mp non sollicité...
      Bon, ça c'est fait.
      0
      1. Bonjour Eric,

        Merci pour ton aide.

        Ta macro fonctionne parfaitement, à première vue je préfère l'option N°1.
        Il m'a fallu un peu de temps pour comprendre comment elle fonctionnait mais maintenant c'est bon !

        Encore merci, et bonne journée.
        0