Problème d'affichage de feuille masquée avec un bouton VBA dans Excel

Bonjour à tous,

J'ai besoin de créer un script VBA dans Excel pour accomplir l'action suivante : Lorsque l'utilisateur clique sur un bouton situé dans la cellule R3, la feuille "Entretien et réparation" doit être affichée, même si elle est masquée initialement.

j'ai écrit le code suivant dans le module VBA mais ca ne marche pas :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Me.Range("R35")) Is Nothing Then
Sheets("Marché Entretien").Visible = True
Sheets("Marché Entretien").Activate
ElseIf Not Intersect(Target, Me.Range("R42")) Is Nothing Then
Sheets("Achat Fourniture").Visible = True
Sheets("Achat Fourniture").Activate
ElseIf Not Intersect(Target, Me.Range("R66")) Is Nothing Then
Sheets("Frais Sécurité").Visible = True
Sheets("Frais Sécurité").Activate
End If
End Sub

Merci de bien vouloir me guider sur la manière de faire fonctionner cela correctement. THKS A LOT

10test.xlsx (16.04 Ko)

Bonjour,

Sauf erreur de ma part, tes explications sont nébuleuses du fait qu'aucun code ni aucune macro ne sont associés à tes boutons situés sur les cellules R3 et R4 de la feuille DB
De plus dans le code que tu écris ci-dessous tu parles des cellules "R35", "R42" et "R66" ???? et ce code n'apparait nul part dans ton fichier !!!
Et en plus tu appelles des feuilles qui n'existent pas : "Marché Entretien", "Achat Fourniture" et "Frais Sécurité"

Bonjour Jacky,

Il y a plusieurs choses à corriger :

1° Ton fichier est un fichier xlsx qui ne gère pas les macros, il faut l'enregistré en xlsm (pour la gestion des macros) ou xlsb.

2° Pourquoi mettre des boutons si tu veux gérer la sélection sur le changement de la cellule active (qui peut se produire sans l'aide de la souris).

3° Ton code ne fonctionne pas car tu essaies d'activer des feuilles absentes de fichier (cela explique les messages d'erreur), si tu indiques les bons noms d'onglets cela fonctionne parfaitement

Code corrigée (suivant ma compréhension et des données en présence):

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Me.Range("R35")) Is Nothing Then
        Sheets("Entretien et réparation").Visible = True
        Sheets("Entretien et réparation").Activate
    ElseIf Not Intersect(Target, Me.Range("R42")) Is Nothing Then
        Sheets("Achat Fourniture").Visible = True
        Sheets("Achat Fourniture").Activate
    ElseIf Not Intersect(Target, Me.Range("R66")) Is Nothing Then
        Sheets("Frais Sécurité").Visible = True
        Sheets("Frais Sécurité").Activate
    End If

End Sub

Bonjour Wonder Aleph,

J'ai l'impression que tu t'adresses directement à moi, Jacky, mais je ne suis qu'un intervenant répondant au demandeur Imanehef et faisant les mêmes remarques que toi si ce n'est que je n'avais pas remarqué que son fichier était sauvegardé en xlsx
Je suppose que ce fut involontaire

Merci pour vos retours. En effet, il y a eu une erreur dans le fichier

8test.xlsm (21.93 Ko)

Sub DETAILMARCHE()
Sheets("Entretien et réparation").Activate

Sheets("Entretien et réparation").Visible = xlSheetVisible

' Masquer la feuille après consultation
Sheets("Entretien et réparation").Visible = xlSheetHidden

Exit Sub ' Sortir pour éviter que l'erreur ne soit exécutée

End Sub

et voici le code pour le fichier de test.

Je souhaite qu'une feuille, initialement masquée dans mon fichier Excel, soit rendue visible lorsqu'on clique sur un bouton. Après la consultation, dès que l'utilisateur quitte cette feuille, elle doit être automatiquement masquée de nouveau.

MERCI MERCI

euh lapsus, je voulais parler à l'OP bien sûr, désolé

@imanehef,

il y a encore une erreur tu actives une feuille avant la rendre visible, ce qui provoque une erreur

il faut que tu inverses ces deux lignes

Ensuite tu masques la feuille que tu viens d'afficher, cela affichera la feuille et la masquera aussitot, ça ne fera pas grand chose

Pour gérer efficacement le masquage de la feuille il faut placer ton code dans l'événement SheetDeactivate de ton classeur.

A toi de gérer une variable globale par exemple pour mémoriser le nom de l'onglet à masquer

Cela devrait ressembler à cela :

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
   if Sh.Name = NomDeLaFeuilleActiveParLeVBA then
      Sh.Visible = False
   End If
End Sub
Rechercher des sujets similaires à "probleme affichage feuille masquee bouton vba"