Afficher Masquer Onglets - Changement de Texte Bouton

Bonjour à tous,

Je suis un petit nouveau sur le forum et pourtant habitué à éplucher et tester ce que vous pouvez écrire.

Je ne suis pas vraiment un grand spécialiste du VBA mais je trouve cela très puissant. Bref. Mon objectif est quand même de comprendre, m'améliorer et d'être autonome.

Ma demande concerne une chose qui devrait être très simple pour les habitués :

Je voudrais en VBA, masquer les onglets définis dans le code (Ex : F1 et F3) si ils sont visibles et changer le texte du bouton "Afficher Feuille".

Et inversement si les onglets sont masqués afficher les onglets définis dans le code et changer le texte du bouton "Masquer Feuille".

Ci-dessous le bout de code que j'essaie de faire fonctionner :

Sub Masquer_Onglet()

'=== Sélection des onglets et les masquer ===
    For i = 1 To ActiveWorkbook.Sheets.Count
        If i <> C And Sheets(i).Visible = True And Sheets(i).Feuil2.Select Then
            Sheets(i).Visible = xlSheetHidden
        End If
    Next i
'=== Gestion du bouton avec changement de libellé et de macro ===
Sheets("Base").Select
ActiveSheet.Shapes.Range(Array("Rounded Rectangle 7")).Select
Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille X" 'Changement du texte
Selection.OnAction = "Afficher_Feuille" 'Changement de la macro
Range("A1").Select
End Sub

J'essaie déjà avec une feuille mais le Feuil2.select ne fonctionne pas. Et j'avoue ne pas être très à l'aise avec les For i = 1. C'est simple pour vous mais je ne pige pas encore la subtilité.

Bonjour, j'ai un peu de mal à comprendre le but de vos 2 boutons

Masquer 1 et 3 et Masquer 1 et 2 ??? si on clic sur Afficher 1 et 2 puis sur Masquer 1 et 3 il va rester le 2 visible çà sert à quoi ? ou

alors chaque bouton annule aussi l'action de l'autre bouton ?

Bonjour à tous,

De ce que j'ai compris, pour le premier bouton :

Sub Masquer_Onglet()
With Worksheets("Base")
    FEUILLES = Split(.[D4], " + ") 'Split D4 via " + " pour isoler les noms de feuilles dans un array
    For L = LBound(FEUILLES) To UBound(FEUILLES) 'Boucle sur les feuilles de l'array
        If Worksheets(FEUILLES(L)).Visible = True Then Worksheets(FEUILLES(L)).Visible = xlHidden 'Les masques si sont dans l'array
    Next L
    With .Shapes.Range(Array("Rounded Rectangle 3")).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille " & [D4] 'Modifie texte
        Selection.OnAction = "Afficher_Feuille" 'Modifie la macro
    End With
End With
End Sub

Sub Afficher_Feuille()
With Worksheets("Base")
    FEUILLES = Split(.[D4], " + ")
    For L = LBound(FEUILLES) To UBound(FEUILLES)
        If Worksheets(FEUILLES(L)).Visible = False Then Worksheets(FEUILLES(L)).Visible = True
    Next L
    .Activate
    With .Shapes.Range(Array("Rounded Rectangle 3")).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Masquer Feuille " & [D4]
        Selection.OnAction = "Masquer_Onglet"
    End With
End With
End Sub

Si ça ne correspond pas merci de préciser le besoin.

Cdlt,

Bonjour,

JBoisgontier l'ayant fait, de manière différente, avec une ListBox...

Regarde son travail

Bonjour à tous,
Merci pour vos retour ultra rapide.
Merci Cousinhb29 : Oui j'avais effectivement cette possibilitée mais l'objectif est de masquer / afficher plusieurs onglets en 1 fois.

XmenPl : Oui effectivement j'aurai du mettre pour l'exemple afficher / masquer : (Bouton 1 = Feuil1 + Feuill2) et (Bouton 2 = Feuil3 + Feuil4) .

Ergotamine : Je ne sais si il fallait changer le code comme suivant : Exemple pour Masquer :

J'ai remplacer le :

FEUILLES = Split(.[D4], " + ")

par

FEUILLES = Split(.[D4], "Feuil2","Feuil4")

Mais cela m'indique "Référence Non Valide"

Sub Masquer_Onglet()
With Worksheets("Base")
    FEUILLES = Split(.[D4], "Feuil2", "Feuil4") 'Split D4 via " + " pour isoler les noms de feuilles dans un array
    For L = LBound(FEUILLES) To UBound(FEUILLES) 'Boucle sur les feuilles de l'array
        If Worksheets(FEUILLES(L)).Visible = True Then Worksheets(FEUILLES(L)).Visible = xlHidden 'Les masques si sont dans l'array
    Next L
    With .Shapes.Range(Array("Rounded Rectangle 3")).Select
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille " & [D4] 'Modifie texte
        Selection.OnAction = "Afficher_Feuille" 'Modifie la macro
    End With
End With
End Sub

Le même bouton doit me servir :

- A masquer un ensemble d'onglets depuis son (Name) quelque soit le nom à donner à la feuille soit "Feuil2" et suivant

- Et lorsque les feuilles sont masquer afficher les onglets nommer.

- Le texte du bouton évoluant entre "Masquer Onglet 1et 2" si affiché et "Afficher Onglet 1et 2" si masqué.

Je fais l'exemple pour 2 feuilles mais cela servira pour un plus grand nombre de feuille lié entres elles.

Merci pour vos premiers retours. J'espère que c'est plus claire.

Bonjour,

Le split se fait en fonction du contenu de la cellule D4 comme vous l'avez indiqué et non le texte du bouton.

Si vous souhaitez inscrire directement vos feuilles dans le code et ne pas tenir compte du tout de D4 alors :

Sub Masquer_Onglet()
FEUILLES = Array("F1", "F3")
For L = LBound(FEUILLES) To UBound(FEUILLES)
    If Worksheets(FEUILLES(L)).Visible = True Then Worksheets(FEUILLES(L)).Visible = xlHidden
    FEUILLE_TXT = FEUILLE_TXT & " + " & FEUILLES(L)
Next L
With Sheets("Base").Shapes.Range(Array("Rounded Rectangle 3")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille " & Right(FEUILLE_TXT, Len(FEUILLE_TXT) - 3)
    Selection.OnAction = "Afficher_Feuille"
End With
End Sub

Cdlt,

Bonjour,

Ah mince alors ... Cela ne fonctionne pas

Ergotamine : J'ai essayé avec le dernier Code Array("F1","F2") : Réponse "Commande Non Valide"

J'ai essayé ensuite avec le Split en D4 ou dans l'onglet base j'ai indiqué F1 + F3 : Réponse "Commande Non Valide"

PS : J'ajout les code les uns à la suite des autres.

Bonjour,

Le référence non valide provient d'un lien hypertexte sur vos formes qui font planter votre fichier. Il faut les supprimer avant.

Cf fichier joint.

Cdlt,

Ergotamine,

Super merci de ton retour :
J'ai mis les 4 propositions de Code :

1) Macro Bouton1 : Masquer_OngletErgo1 ==> Pour Feuille 1 et 2 : Super cela fonctionne en affichage et masquage.

- J'ai juste supprimé "& [D4]" pour ne garder que "Afficher Feuille"

- en revanche je ne trouve pas le même texte pour n'avoir que "Masquer Feuille". Je veux bien un petit complément d'information.

2) Macro Bouton2 : Masquer_OngletErgo2 ==> Feuille 3 et 4 : Les feuilles se masquent mais une fois masqué elles ne s'affichent plus.

C'est pourtant le même code. J'ai remplacé le D4 par D7. Un petit complément d'informations pour comprendre. SVP

3) Macro Bouton3 : Masquer_OngletFeuilNomPerso ==> Feuille 5 et 6 : Idem 2) Les feuilles se masquent mais ne s'affichent plus.

4) Macro Bouton 4 : Masquer_OngletFeuilNomsXL ==> Feuille 7 et 8 : Comment faudrait-il faire pour utiliser le Code "(Name)" (Non Excel) et pas le "Name" (Nom personnalisé)

Encore Merci

Bonjour,

Ci-contre les 4 versions :

Sub Afficher_V1() 'Ergotamine1
With Worksheets("Base")
    FEUILLES = Split(.[D4], " + ")
    For L = LBound(FEUILLES) To UBound(FEUILLES)
        Worksheets(FEUILLES(L)).Visible = True
    Next L
    .Activate
    With .Shapes.Range(Array("Rounded Rectangle 3")).Select 'A adapter
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Masquer Feuille"
        Selection.OnAction = "Masquer_V1"
    End With
End With
End Sub
Sub Masquer_V1() 'Ergotamine1 Ok SuperBien Bouton 1
With Worksheets("Base")
    FEUILLES = Split(.[D4], " + ") 'Split D4 via " + " pour isoler les noms de feuilles dans un array
    For L = LBound(FEUILLES) To UBound(FEUILLES) 'Boucle sur les feuilles de l'array
        Worksheets(FEUILLES(L)).Visible = xlHidden 'Les masques si sont dans l'array
    Next L
    With .Shapes.Range(Array("Rounded Rectangle 3")).Select 'A adapter
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille" 'Modifie texte
        Selection.OnAction = "Afficher_V1" 'Modifie la macro
    End With
End With
End Sub
Sub Afficher_V2() 'Ergotamine1 Ok SuperBien Bouton 2
With Worksheets("Base")
    FEUILLES = Split(.[D7], " + ") 'Split D7 via " + " pour isoler les noms de feuilles dans un array
    For L = LBound(FEUILLES) To UBound(FEUILLES) 'Boucle sur les feuilles de l'array
        Worksheets(FEUILLES(L)).Visible = True 'Les affiche si sont dans l'array
    Next L
    .Activate
    With .Shapes.Range(Array("Rounded Rectangle 4")).Select 'A adapter
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Masquer Feuille" 'Modifie texte
        Selection.OnAction = "Masquer_V2" 'Modifie la macro
    End With
End With
End Sub
Sub Masquer_V2() 'Ergotamine1 Ok SuperBien Bouton 2
With Worksheets("Base")
    FEUILLES = Split(.[D7], " + ") 'Split D7 via " + " pour isoler les noms de feuilles dans un array
    For L = LBound(FEUILLES) To UBound(FEUILLES) 'Boucle sur les feuilles de l'array
        Worksheets(FEUILLES(L)).Visible = xlHidden 'Les masques si sont dans l'array
    Next L
    With .Shapes.Range(Array("Rounded Rectangle 4")).Select 'A adapter
        Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille" 'Modifie texte
        Selection.OnAction = "Afficher_V2" 'Modifie la macro
    End With
End With
End Sub

Sub Masquer_V3()
FEUILLES = Array("F5", "F6")
For L = LBound(FEUILLES) To UBound(FEUILLES)
    Worksheets(FEUILLES(L)).Visible = xlHidden
    FEUILLE_TXT = FEUILLE_TXT & " + " & FEUILLES(L)
Next L
With Sheets("Base").Shapes.Range(Array("Rounded Rectangle 5")).Select 'A adapter
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher Feuille " & Right(FEUILLE_TXT, Len(FEUILLE_TXT) - 3)
    Selection.OnAction = "Afficher_V3"
End With
End Sub
Sub Afficher_V3()
FEUILLES = Array("F5", "F6")
For L = LBound(FEUILLES) To UBound(FEUILLES)
    Worksheets(FEUILLES(L)).Visible = True
    FEUILLE_TXT = FEUILLE_TXT & " + " & FEUILLES(L)
Next L
Worksheets("Base").Activate
With Sheets("Base").Shapes.Range(Array("Rounded Rectangle 5")).Select 'A adapter
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Masquer Feuille " & Right(FEUILLE_TXT, Len(FEUILLE_TXT) - 3)
    Selection.OnAction = "Masquer_V3"
End With
End Sub

Sub Masquer_V4()
FEUILLES = Array("Feuil7", "Feuil8")
For L = LBound(FEUILLES) To UBound(FEUILLES)
    For F = 1 To Worksheets.Count
        If Worksheets(F).CodeName = FEUILLES(L) And Worksheets(F).Visible = True Then Worksheets(F).Visible = xlHidden
    Next F
    FEUILLE_TXT = FEUILLE_TXT & " + " & FEUILLES(L)
Next L
With Sheets("Base").Shapes.Range(Array("Rounded Rectangle 7")).Select 'A adapter 
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Afficher " & Right(FEUILLE_TXT, Len(FEUILLE_TXT) - 3)
    Selection.OnAction = "Afficher_V4"
End With
End Sub
Sub Afficher_V4()
FEUILLES = Array("Feuil7", "Feuil8")
For L = LBound(FEUILLES) To UBound(FEUILLES)
    For F = 1 To Worksheets.Count
        If Worksheets(F).CodeName = FEUILLES(L) And Worksheets(F).Visible = xlHidden Then Worksheets(F).Visible = True
    Next F
    FEUILLE_TXT = FEUILLE_TXT & " + " & FEUILLES(L)
Next L
Worksheets("Base").Activate
With Worksheets("Base").Shapes.Range(Array("Rounded Rectangle 7")).Select 'A adapter
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "Masquer Feuille " & Right(FEUILLE_TXT, Len(FEUILLE_TXT) - 3)
    Selection.OnAction = "Masquer_V4"
End With
End Sub

A noter que pour la V4, vous ne pourrez pas masquer la Feuil8 car son code name est Feuil9 sous l'onglet développeur. C'est pourquoi c'est F6 et F7 qui sont masqués ou affichés mais Feuil7 et Feuil8.

A vous de choisir la version vous convenant. Attention à adapter les noms de vos formes dans le code que vous choisirez.

C'est pourquoi vous aviez autant d'erreur, il faut adapter le code en fonction des variables que vous avez à votre disposition (par exemple le renvoi à Afficher Feuille ne peux pas fonctionner car les feuilles à afficher ne sont pas les mêmes en fonctions des feuilles masquées par la macro).

Cdlt,

Bonjour à tous,

Désoler de répondre si tard.

Merci à toi Ergotamine ton code m'a été fort utile. Je ne pige pas encore tout mais cela viendra.

n tout cas super. ;-)

Excellente journée à tous.

Rechercher des sujets similaires à "afficher masquer onglets changement texte bouton"