XL 2016 accès feuilles masquées par bouton

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 !

crown54

XLDnaute Junior
Bonjour à tous,
je fais une nouvelle fois appel à vos connaissances. J'ai un fichier excel avec plusieurs onglets. Une feuille choix d'onglet est présente et je souhaite par le biais d'un bouton pour chaque onglet le faire apparaitre et uniquement celui-là. A l'inverse quand je suis sur l'onglet en question, j'ai un bouton retour qui me permet de revenir sur la feuille choix d'onglet.
J'ai réussi à le faire via la commande suivante :
Private Sub CommandButton2_Click()
Sheets("choix onglets").Visible = True
Sheets("choix onglets").Select
End Sub


Par contre sur ma feuille de choix d'onglet, j'ai plusieurs boutons mais ça ne fonctionne pas, j'ai une erreur d'execution 1004: la méthode 'visible' de l'objet '_Worksheet' a échoué.
Voici mon code:

Private Sub CommandButton1_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton2_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton3_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton4_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton5_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton6_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton7_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub

Private Sub CommandButton8_Click()
Dim sh As Worksheet

For Each sh In ThisWorkbook.Worksheets
With sh
If Not .Name = "
Nom onglet" Then .Visible = False
End With

Next
End Sub



Auriez-vous une idée de la provenance de l'erreur s'il vous plait?
Merci d'avance.
 

Pièces jointes

Dernière édition:
ton impression d'écran du sommaire, c'est ton fichier qui fait plus de 1 Mo??
réduit la taille de tes images avant de les importer dans excel..
oui. Je vais voir pour réduire effectivement.
J'ai corrigé le bug en ajoutant une macro qui affiche toutes les feuilles lorsque je revient au sommaire
VB:
Sub afficherFeuilles()
For Each Sheet In Sheets
    If Sheet.Visible = False Then
       Sheet.Visible = True
    End If
Next Sheet
End Sub
 
Regarde la PJ
1) j'ai supprimé tous tes commandbutton, et j'ai mis un bouton Par feuille sur la page de sommaire
==> Tous les boutons appellent la meme macro "basculer"

2) sur les différentes feuilles, j'ai supprimé les commandboutton pour afficher/masquer les lignes de rebut ainsi que celui pour revenir au menu
==> j'ai remplacé par 3 lignes de commandes dans le code du thisworkbook_sheetselectionchange

tout ca fait plus propre, et il y a moins de code redondant
 

Pièces jointes

Regarde la PJ
1) j'ai supprimé tous tes commandbutton, et j'ai mis un bouton Par feuille sur la page de sommaire
==> Tous les boutons appellent la meme macro "basculer"

2) sur les différentes feuilles, j'ai supprimé les commandboutton pour afficher/masquer les lignes de rebut ainsi que celui pour revenir au menu
==> j'ai remplacé par 3 lignes de commandes dans le code du thisworkbook_sheetselectionchange

tout ca fait plus propre, et il y a moins de code redondant
Merci pour ta proposition. Effectivement ça fait plus propre 😉
sujet clos du coup
 
un commentaire sur ta fonction pour masquer les lignes
tu aurais interêt à mettre tes données sous forme de table structurée (TS)
1) plus facile à gérer: les MFC se recopient automatiquement
2) suffirait de parcourir les lignes de la TS: for i=1 to TS.listrows.count ==> pas besoin de savoir ou la table se situe sur la feuille
3) et encore une fois.. ca fait plus propre
 
un commentaire sur ta fonction pour masquer les lignes
tu aurais interêt à mettre tes données sous forme de table structurée (TS)
1) plus facile à gérer: les MFC se recopient automatiquement
2) suffirait de parcourir les lignes de la TS: for i=1 to TS.listrows.count ==> pas besoin de savoir ou la table se situe sur la feuille
3) et encore une fois.. ca fait plus propre
Je ne connais pas les TS, il va falloir que je regarde de plus près
 
Regarde cette V2
1) quand on arrive sur la feuille, la cellule A1 est selectionnée
==> Comme ca tu peux cliquer directement sur le retour, ou ailleurs

2) j'ai transformé tes tableaux en TS
==> il te suffit de modifier les entetes de colonnes (à la place de colonne 1, colonne2...)
==> une entete doit etre unique: on ne peut pas avoir deux colonnes avec le meme nom

regarde la macro "MasquerLignes" qui est légèrement plus courte que celle que tu as déjà..
 

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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
234
Retour