Masquer onglet selon une valeur en VBA

Bonjour,

J'ai 5 feuilles de calcul soit feuil1, feuil2, feuil3, feuil 4 et feuil5

Dans la feuille 5 dans la celulle "B2" j'ai une liste de choix avec comme valeur 1, 2, 3 et 4

Si je sélectionne 1 alors les feuilles 2 , 3 et 4 se masquent et la feuille 1 soit active
Si je sélectionne 2 alors les feuilles 1 , 3 et 4 se masquent et la feuille 2 soit active
Si je sélectionne 3 alors les feuilles 1 , 2 et 4 se masquent et la feuille 3 soit active
Si je sélectionne 4 alors les feuilles 1 , 2 et 3 se masquent et la feuille 4 soit active

Quelqu'un peut-il me venir en aide SVP

Cordialement

5 réponses

  1. Bonjour cocorine

    ALT+F11 pour ouvrir éditeur VBA
    Double clic sur Feuil5 dans l'arborescence à gauche
    copie et colle la macro suivante dans la page blanche et ferme éditeur vba
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B2")) Is Nothing Then
    For n = 1 To 4
    If n = Target.Value Then Sheets(n).Visible = True Else Sheets(n).Visible = False
    Next
    Sheets(Target.Value).Activate
    End If
    End Sub

    Cdlmnt
    Via
    1
    1. Bonsoir,

      J'ai probablement pasété claire et je pensais adapter mon exemple avec mon fichier mais cela ne fonctionne pas comme je veux, il me masque plein de feuilles.

      Donc j'ai bien 5 feuilles pour l'exemple en vrai + de 60, dans la feuille choix dans la celulle "B2" j'ai une liste de choix avec comme valeur CHANEL, GUERLAIN, DIOR, NINA.

      Les feuilles se nomment Guerlain_F1, Dior_B, Chanel_F6, Nina_ricci_9

      Si je sélectionne CHANEL alors les feuilles Guerlain_F1, Dior_B, Nina_ricci_9 sont masquées

      Si je sélectionne GUERLAIN alors les feuilles Chanel_F6, Dior_B, Nina_ricci_9 sont masquées

      Si je sélectionne DIOR alors les feuilles Chanel_F6, Guerlain_F1, Nina_ricci_9 sont masquées

      Si je sélectionne NINA alors les feuilles Chanel_F6, Guerlain_F1, Dior_B sont masquées

      Avec les noms des feuilles

      Est-ce que l'on peut mettre aussi sheetveryhidden pour être tranquille ??

      Merci d'avance

      Cordialement
      0
      1. Re

        Si les 4 feuilles commencent bien par des initiales différentes et se suivent tu peux essayer une macro du style de la suivante où les feuilles à traiter sont les 2°, 3°, 4° et 5° du classeur
        Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Range("B2")) Is Nothing And Target.Value <> "" Then
        For n = 2 To 5 'boucle  de la 2eme feuille à la 5eme ' A ADAPTER
        'compare 1ere lettre du nom de la feuille et 1ere lettre de la cible
        If Left(Sheets(n).Name, 1) = Left(Target.Value, 1) Then Sheets(n).Visible = True: Sheets(n).Activate Else Sheets(n).Visible = xlVeryHidden
        Next
        End If
        End Sub

        Cdlmnt

        0
        1. Bonjour et merci, c est fait.

          et pour terminer, dans la cellule E9, il y a une autre liste deroulante avec des valeurs 4, 6, 8 et 10

          si je sélectionne 4 masquées les feuilles B, C, D ;
          si je sélectionne 6 masquées les feuilles À C D

          8 masquées À B D
          10 masquées À B C

          Je ne peux pas être plus claire avec les noms de feuille, désolée.

          Juste pour moi, il n y a que la technique avec FOR pour masquer les feuilles, avec if, else et endwith y a t il un moyen ?

          Cela pourrai plus tard me servir.

          Avec les décalages horaires, je ne sais plus comment je vie.

          Merci
          0
          1. Re

            S'il y a plusieurs cas sans correspondance entre le choix dans la liste et le nom des feuilles et/ou des feuilles qui ne se suivent pas tu peux employer la méthode Select case , exemple à adapter :
            Private Sub Worksheet_Change(ByVal Target As Range)
            If Not Intersect(Target, Range("E9")) Is Nothing And Target.Value <> "" Then
            
            Select Case Target.Value
            Case 4
            Sheets("B").Visible = xlVeryHidden
            Sheets("C").Visible = xlVeryHidden
            Sheets("D").Visible = xlVeryHidden
            Sheets("A").Visible = True
            Sheets("A").Activate
            Case 6
            Sheets("A").Visible = xlVeryHidden
            Sheets("C").Visible = xlVeryHidden
            Sheets("D").Visible = xlVeryHidden
            Sheets("B").Visible = True
            Sheets("B").Activate
            ' continuer ici avec les autres Case
            
            End Select
            End If
            
            End Sub

            Cdlmnt
            0