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 SubJ'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
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 SubSi ç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 SubLe 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 SubCdlt,
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 SubA 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.