Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2019 Afficher ou masquer une forme selon l'état visibilité d'une feuille.

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 !

Nenesse45

XLDnaute Nouveau
Bonjour à tous,

j'ai une demande particulière.

Dans mon fichier excel, j'ai une feuille FeuilleSommaire qui me sert de sommaire avec des formes rectangulaire qui me servent de "bouton" et qui pointent vers les autres feuilles du fichier.

Par exemple, j'ai un BoutonToto qui pointe vers FeuilleToto et un BoutonTiti qui pointe vers la FeuilleTiti.

J'ai commencé à regarder pour du code VBA pour afficher ou masquer les boutons selon que les feuilles soient masquées ou non. Par exemple, si la FeuilleTiti est masquée, alors sur la FeuilleSommaire, le BoutonTiti sera masqué également.

je sais que le code contiendra ça mais je trouve pas comment déclencher la vérification d'état des feuilles, qui feront que les boutons seront affichés ou non.


VB:
If Worksheets("FeuilleToto").Visible = True Then
        Shapes("BoutonToto").Visible = True
        Else:
            Shapes("BoutonToto").Visible = False
    End If
    If Worksheets("FeuilleTiti").Visible = True Then
        Shapes("BoutonTiti").Visible = True
        Else:
            Shapes("BoutonTiti").Visible = False
    End If

Le problème est que je ne me base pas sur la valeur d'une cellule, calculée ou non, donc je pense que je ne peux pas mettre du code comme
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
...
End Sub

ou sur
Code:
Private Sub Worksheet_Calculate()
...
End Sub

Auriez-vous une idée de comment déclencher la vérification de l'état d'un onglet pour que le code fonctionne s'il vous plaît?

Merci de votre aide
 
Bonsoir @Nenesse45 🙂,

Un essai dans le fichier joint.
  • Quatre formes sur la feuille "Sommaire"
  • Trois formes avec lien hypertexte vers Ti ti, Toto et Tutu.
  • Une forme sans lien hypertexte
Un code dans module1:
VB:
'------ dans VBE menu Outils / Options...
'------ sur l'onglet "Général"
'------ décocher l'option "Arrêt sur toutes les erreurs"

Sub AfficherMasquer()
Dim x As Shape, xrg As Range, f
   Application.ScreenUpdating = False
   With Sheets("Sommaire")
      On Error Resume Next
      For Each x In .Shapes
         f = "": f = Replace(Split(x.Hyperlink.SubAddress, "!")(0), "'", "")
         x.Visible = Sheets(f).Visible = True
      Next x
   End With
   On Error GoTo 0
End Sub

Code dans le module de ThisWorkbook:
VB:
Private Sub Workbook_Open()
   AfficherMasquer
End Sub

Code dans le module de la feuille "Sommaire":
VB:
Private Sub Worksheet_Activate()
   AfficherMasquer
End Sub
 

Pièces jointes

Dernière édition:
Bonsoir,

Merci, ça fait effectivement bien le travail.

Par contre, pourquoi le commentaire sur le module? il y a des erreurs qui peuvent apparaître? dans quel(s) cas?

Sinon, pour la gestion des erreurs, ce sont des boutons radio dans Excel 2019, on ne peut pas décocher.
Dans mon cas, j'avais Arrêt sur les erreurs non gérées.
 
Par contre, pourquoi le commentaire sur le module? il y a des erreurs qui peuvent apparaître? dans quel(s) cas?
La macro fait une boucle sur toutes les formes présentes sur la feuille "Sommaire".
Pour chaque forme, on prend l'adresse de destination du lien hypertexte et on en extrait le nom f de la feuille de destination. Puis on masque le bouton suivant que la feuille de destination est masquée ou non.

Mais si la forme n'a pas de lien hypertexte, alors le fait de lire le lien hypertexte renvoie une erreur. On error resume next permet que VBA ne s'arrête pas en mode débogage et de passer à l'instruction suivante (f vaut alors la chaine vide)
L'instruction suivante regarde si la feuille de destination est masquée ou non. Comme la feuille f (chaine vide) n'existe pas, l'instruction renvoie aussi une erreur. Mais comme on a indiqué On Error Resume Next, on passe encore une fois à l'instruction suivante (Next x).

Si on avait omis On Error Resume next (et/ou laisser l'option Arrêt sur toutes les erreurs non gérées), le premier traitement d'une forme sans lien vers une autre feuille aurait provoqué l'arrêt de la macro.
 
Dernière édition:
- 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

Réponses
3
Affichages
216
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…