XL 2016 accès feuilles masquées par bouton

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

  • fichier.xlsm
    258.6 KB · Affichages: 3
Dernière édition:

crown54

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

vgendron

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

  • fichier.xlsm
    41.8 KB · Affichages: 1

crown54

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

vgendron

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

crown54

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

vgendron

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

  • fichier 2.xlsm
    41.9 KB · Affichages: 0

Discussions similaires

Réponses
14
Affichages
609
Compte Supprimé 979
C

Statistiques des forums

Discussions
315 059
Messages
2 115 820
Membres
112 554
dernier inscrit
JULIEN.DECHIPRE