XL 2016 Afficher masquer

richardlion

XLDnaute Occasionnel
Bonjour à tous
J’ai un fichier Excel avec des graphiques
J’ai créer un lien hypertexte pour chaque graph qui amène à plusieurs feuilles qui donne le détail des chiffres
Sûr chaque feuille il y a un lien qui me ramène au graph
Je souhaiterais que ces feuilles n’appairaissenr qu’en cliquant sur le lien et quelle disparaisse en cliquant sur l’autre lien
Merci à vous pour vos bonnes idee
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Richardlion,
Un essai en PJ avec une même macro attachée à tous les graphiques :
VB:
Sub SheetsManagement()
    Nom = Application.Caller
    Select Case Nom
        Case "Graphique 1"
            Sheets("Feuil2").Visible = True: Sheets("Feuil2").Activate
        Case "Graphique 2"
            Sheets("Feuil3").Visible = True: Sheets("Feuil3").Activate
    End Select
End Sub
Une macro événementielle à mettre dans la feuille principale :
Code:
Sub Worksheet_Activate()
    For Each F In Worksheets
        If F.Name <> "Feuil1" Then F.Visible = xlSheetHidden
    Next F
End Sub
L'avantage est que c'est simple. C'est application.caller qui permet de définir la feuille considérée.
Les liens hypertexte ramenant sur la feuille principale déclenche la macro Worksheet_Activate.
 

Pièces jointes

  • Richarddlion.xlsm
    20.9 KB · Affichages: 18

sylvanu

XLDnaute Barbatruc
Supporter XLD
Et si vous êtes fainéant donc très intelligent, regardez cette PJ.
En appelant la feuille du nom du graphique vous n'avez plus à toucher au vba quelle que soit le nombre de feuilles, tout devient automatique. Avec :
VB:
Sub SheetsManagement()
    Nom = "F" & Application.Caller
    With Sheets(Nom)
        .Visible = True:
        .Activate
    End With
End Sub
Si on a un graphique appelé "Graphique 32" la feuille doit s'appeler "FGraphique 32" ( à adapter bien sur )
 

Pièces jointes

  • Richarddlion V2.xlsm
    24.4 KB · Affichages: 9

richardlion

XLDnaute Occasionnel
Bonjour,
merci pour votre aide mais ca ne fonctionne pas.
Jai copier le dernier code VBA dans ma feuille principale j'ai renommer ma feuille principale Fgraphique 32mais je ne comprends pas le principe , dois je masquer les autres feuilles mais après un test rien ne fonctionne
ou dois je mettre les feuilles de détails?
merci a vous pour votre aide
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir,
mais ca ne fonctionne pas.
Est ce que ma PJ fonctionne sur votre PC ? Si oui, dans votre fichier il vous faut :
1- Dans la feuille où il y a les graphiques :
VB:
Sub Worksheet_Activate()
    For Each F In Worksheets
        If F.Name <> "Feuil1" Then F.Visible = xlSheetHidden
    Next F
End Sub
( en modifiant Feuil1 par le nom de la feuille qui a les graphiques )
2- Dans un module :
Code:
Sub SheetsManagement()
    Nom = "F" & Application.Caller
    With Sheets(Nom)
        .Visible = True:
        .Activate
    End With
End Sub
3- Sur chaque graphique Affecter la macro SheetsManagement.
4- Sur chaque feuille mettre un lien hypertexte qui renvoie sur la feuille qui a les graphiques.
( dans mon fichier j'ai appelé A1 Header et je fais le lien sur cette valeur )

Le principe :
Quand on clique sur un graphique on va dans la macro SheetsManagement
Application.caller donne par ex "Graphique 32" ( attention à l'espace )
Auquel on ajoute F, donc Nom="FGraphique 32"
Et on va sur cette feuille.
Quand on revient par le lien hypertexte on masque toutes les feuilles exceptée la feuille qui a les graphiques.
 

richardlion

XLDnaute Occasionnel
Et si vous êtes fainéant donc très intelligent, regardez cette PJ.
En appelant la feuille du nom du graphique vous n'avez plus à toucher au vba quelle que soit le nombre de feuilles, tout devient automatique. Avec :
VB:
Sub SheetsManagement()
    Nom = "F" & Application.Caller
    With Sheets(Nom)
        .Visible = True:
        .Activate
    End With
End Sub
Si on a un graphique appelé "Graphique 32" la feuille doit s'appeler "FGraphique 32" ( à adapter bien sur )
 

Pièces jointes

  • test pour site excel.xlsx
    28.6 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je ne sais pas où vous avez "coincé" mais en PJ c'est la stricte application du post #5. :)
Par contre si vous tenez aux noms de feuilles il vous faut revenir au code du post #2 mais il oblige à reprendre le VBA à chaque nouvelle feuille ajoutée.
 

Pièces jointes

  • test pour site excel.xlsm
    35 KB · Affichages: 7

richardlion

XLDnaute Occasionnel
je ne trouve pas le problème par manque de connaissance
dans le fichier ci joint j'ai bien les bonnes données VBA mais je n'arrive pas a afficher les feuilles de données
si vous pouviez m'expliquer ca m'aiderais beaucoup
merci a vous sylvanu
 

Pièces jointes

  • TABLEAU DYNAMIQUE2BIS.xlsm
    224.7 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
J'avais pourtant l'impression d'avoir été clair. :rolleyes:
Je ne peut pas utiliser votre fichier car il comporte des segments qui sont pris en charge à partir d'XL2010 et je ne suis qu'en XL2007.
J'ai déjà vu une erreur.
C'est chaque feuille de tables de données qui doit s'appeler FGrahique xx. Pas la feuille qui a les graphiques.
Donc pour Graphique 1 par ex, c'est la feuille FRUPTURES VISUELLES qui doit s'appeler FGraphique 1.
Désolé je ne peux en faire plus.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Vous avez bien rectifier If F.Name <> "Feuil1" Then F.Visible = xlSheetHidden
Si c'est le cas, je ne comprends pas.

J'ai l'impression que vos graphiques qui sont du type Graphique structurés et n'acceptent pas les macros accrochées. Mais là je suis un peu sec.

En PJ j'ai changé mon fusil d'épaule. Au lieu de cliquer sur le graphique, on clique sur le bouton "données".
Peut être que cela améliorera les choses.
La macro Worksheet_Activate ne change pas.
L'autre macro est modifiée :
VB:
Sub SheetsManagement()
'------------------------------------------------------
' Remplir Liste avec Nom du rectangle puis nom de la feuille concernée
    Liste = Array("Rectangle 11", "FRUPTURES", _
                "Rectangle 13", "FRUPTURES VISUELLES", _
                "Rectangle 14", "FSANS EMPLACEMENT", _
                "Rectangle 15", "FDECONSIGNES", _
                "Rectangle 16", "FINVENTAIRE", _
                "Rectangle 17", "FSTOCKS", _
                "Rectangle 18", "FPORTEFEUILLE", _
                "Rectangle 19", "FDEMARQUE")
'-------------------------------------------------------
    Nom = Application.Caller
    For i = 0 To UBound(Liste) Step 2
        If Liste(i) = Nom Then
            Sheets(Liste(i + 1)).Visible = True
            Sheets(Liste(i + 1)).Activate
        End If
    Next i
End Sub
si vous rajoutez des feuilles il faut les ajouter dans l' Array avec Nom du bouton et nom de la feuille associée.

Testez et dites moi si c'est mieux.
 

Pièces jointes

  • TABLEAU DYNAMIQUE2BIS (9).xlsm
    233.8 KB · Affichages: 8

Discussions similaires