XL 2019 Afficher et Masquer un onglet en fonction de l'appui sur un bouton

  • Initiateur de la discussion Initiateur de la discussion Rod37
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Rod37

XLDnaute Nouveau
bonjour, j'ai lu les différents sujets concernant l'affichage des onglets en VBA, mais je n'arrive pas à trouver la bonne formule concernant mon problème.
  1. sur mon onglets "ACCEUIL" quand j'appui sur un bouton je souhaite aller sur un onglet masqué "PRESTATION"
  2. sur l'onglet "PRESTATION" j'ai un autre bouton pour retourner à l'accueil et quand j'appui dessus je retourne à l'accueil et je masque l'onglet "PRESTATION"
Là c'est un exemple simple, mais dans mon fichier j'aurai plusieurs onglets.

En vous remerciant par avance,

Rodolphe
 
Bonjour Rod,
Un ex en PJ avec :
VB:
Sub Prestations()
    Sheets("Prestations").Visible = xlSheetVisible
    Sheets("Accueil").Visible = xlSheetVeryHidden
End Sub
Sub Accueil()
    Sheets("Accueil").Visible = xlSheetVisible
    Sheets("Prestations").Visible = xlSheetVeryHidden
End Sub
L'avantage de la propriété xlSheetVeryHidden est que la feuille masquée n'apparait pas dans la liste des feuilles quand on fait Afficher.
Avec plus de feuilles il faut adapter.
 

Pièces jointes

Plus bluffant mais plus complexe à construire avec :
VB:
Sub SwapSheets()
Application.ScreenUpdating = False
NomFeuille = Application.Caller     ' Récupère le nom du bouton
Select Case NomFeuille              ' Récupère le nom de la feuille à afficher
    Case "Bouton1"
        NonMasquée = "Feuil1"
    Case "Bouton2"
        NonMasquée = "Feuil2"
    Case "Bouton3"
        NonMasquée = "Feuil3"
    Case "Bouton4"
        NonMasquée = "Feuil4"
    Case "Bouton5"
        NonMasquée = "Feuil5"
End Select
Sheets(NonMasquée).Visible = xlSheetVisible     ' Démasquer le feuille demandée
For Each F In ThisWorkbook.Worksheets           ' Masquer toute les autres
    If Sheets(F.Name).Visible = True And F.Name <> NonMasquée Then
        Sheets(F.Name).Visible = xlSheetVeryHidden
    End If
Next
End Sub

Il faut construire une feuille avec les X boutons. Leur coller la même macro.
Puis dupliquer cette feuille.
Sur chaque feuille mettre le bouton correspondant d'une autre couleur.
 

Pièces jointes

Dernière édition:
Bonsoir Rod37, bienvenue sur XLD, sylvanu,

Dans le code de la feuille "Accueil" (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As Object
With [C3] 'à adapter
    If .Value = "" Or Intersect(Target, .Cells) Is Nothing Then Exit Sub
    With Sheets(CStr(.Value))
        .Visible = xlSheetVisible
        For Each s In Sheets
            If s.Name <> .Name Then s.Visible = xlSheetVeryHidden 'xlSheetHidden
        Next
    End With
End With
End Sub
Dans Module1 la macro affectée aux boutons "Accueil" :
VB:
Sub Accueil()
Dim s As Object
With Sheets("Accueil")
    .Visible = xlSheetVisible
    For Each s In Sheets
        If s.Name <> .Name Then s.Visible = xlSheetVeryHidden 'xlSheetHidden
    Next
End With
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonjour Rod, Job,
Encore plus simple puisqu'aucune ligne de code n'est à toucher.

Il suffit de créer un bouton qui a comme texte le nom de la feuille à atteindre.
Le même code est utilisé par tous les boutons. On récupère le texte pour atteindre la feuille demandée.
Avec ce petit code :
VB:
Sub SwapSheets()
On Error GoTo Fin
Application.ScreenUpdating = False
' Récupère le nom de la feuille à afficher
NomFeuille = ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
Sheets(NomFeuille).Visible = xlSheetVisible     ' Démasquer le feuille demandée
For Each F In ThisWorkbook.Worksheets           ' Masquer toute les autres
    If Sheets(F.Name).Visible = True And F.Name <> NomFeuille Then
        Sheets(F.Name).Visible = xlSheetVeryHidden
    End If
Next
Fin:
End Sub
 

Pièces jointes

Bonjour Rod37, sylvanu, le forum,

Fichier (2) un peu plus simple avec une variable Public :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim s As Object
With [C3] 'à adapter
    If .Value = "" Or Intersect(Target, .Cells) Is Nothing Then Exit Sub
   Set F = Sheets(CStr(.Value))
End With
Activer 'lance la macro
End Sub
VB:
Public F As Object 'mémorise la variable

Sub Activer()
Dim s As Object
If F Is Nothing Then Set F = Sheets("Accueil")
F.Visible = xlSheetVisible
For Each s In Sheets
    If s.Name <> F.Name Then s.Visible = xlSheetVeryHidden 'xlSheetHidden
Next
Set F = Nothing
End Sub
A+
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour