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

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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Classeur1.xlsm
    15.2 KB · Affichages: 14

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Classeur2.xlsm
    23.7 KB · Affichages: 7
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Masquer feuilles(1).xlsm
    31.1 KB · Affichages: 5
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Classeur5.xlsm
    23.8 KB · Affichages: 12

job75

XLDnaute Barbatruc
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

  • Masquer feuilles(2).xlsm
    31.3 KB · Affichages: 12

Discussions similaires

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma