Microsoft 365 case à cocher pour afficher ou masquer les courbes d'un graphique

supercopain

XLDnaute Nouveau
Bonjour à tous,

Je souhaite créer une feuille de mesure avec plusieurs données représentées sur des graphiques
pour une lecture plus facile je voudrais que l'utilisateur de cette feuille puisse masquer ou afficher les courbes (avec la légende)
Comment communiquer avec la boite de dialogue "Sélectionner la source de données" par le biais d'une case à cocher sans avoir besoin de faire un clic droit dans le graphique puis ->sélection des données...->et ensuite décocher la case de la courbe à masquer

ci-joint un exemple (pour le moment uniquement avec VPS et Hz1)
 

Pièces jointes

  • 2021-06-25_10h17_45.jpg
    2021-06-25_10h17_45.jpg
    74.3 KB · Affichages: 23
  • Exemple_Graphique.xlsm
    234 KB · Affichages: 3
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Il y a des évènements disponibles dans une feuille Chart, cherchez peut être de ce coté.
Mais je ne suis pas tout à fait sûr qu'on puisse détecter la sélection d'un élément de la légende, et je n'ai pas de classeur sous la main pour rechercher et tester.
Pour un Chart supporté pas un ChartObject implanté dans une feuille Worksheet, c'est possible aussi mais plus compliqué, il faut passer par un module de classe.
Mais à tout hasard enregistrez un nouvelle macro, elle pourra peut être être paufinée pour interagir avec des pièces que vous avez déjà, genre case à cocher de formulaire ou bien des ActiveX CheckBox, je ne sais pas ce que vous avez …
 
Dernière édition:

supercopain

XLDnaute Nouveau
Bonjour.
Il y a des évènements disponibles dans une feuille Chart, cherchez peut être de ce coté.
Mais je ne suis pas tout à fait sûr qu'on puisse détecter la sélection d'un élément de la légende, et je n'ai pas de classeur sous la main pour rechercher et tester.
Pour un Chart supporté pas un ChartObject implanté dans une feuille Worksheet, c'est possible aussi mais plus compliqué, il faut passer par un module de classe.
Mais à tout hasard enregistrez un nouvelle macro, elle pourra peut être être paufinée pour interagir avec des pièces que vous avez déjà, genre case à cocher de formulaire ou bien des ActiveX CheckBox, je ne sais pas ce que vous avez …
Bonjour,
je te remercie pour ta réponse, mais je ne suis pas encore assez calé pour les termes utilisés dans ta réponse, j'ai ajouté un exemple du classeur avec le graphique et les cases à cocher...

merci pour votre aide
 

Pièces jointes

  • Exemple_Graphique.xlsm
    234 KB · Affichages: 5

Dranreb

XLDnaute Barbatruc
Je ne trouve aucune série ayant pour nom le texte des cases à cocher de formulaire.
Si c'était le cas on devrait pouvoir à toutes leur affecter cette macro :
VB:
Sub SérieVisible()
   Dim CaseÀCocher As Shape, V As Boolean, NomSérie As String, Série As Series
   On Error Resume Next
   Set CaseÀCocher = ActiveSheet.Shapes(Application.Caller)
   NomSérie = CaseÀCocher.TextFrame.Characters.Text
   V = CaseÀCocher.ControlFormat.Value
   On Error Resume Next
   Set Série = ActiveChart.SeriesCollection(NomSérie)
   If Err Then MsgBox "Série """ & NomSérie & """ non trouvée.", vbCritical: Exit Sub
   Série.Visible = V
   End Sub
 

supercopain

XLDnaute Nouveau
Je ne trouve aucune série ayant pour nom le texte des cases à cocher de formulaire.
Si c'était le cas on devrait pouvoir à toutes leur affecter cette macro :
VB:
Sub SérieVisible()
   Dim CaseÀCocher As Shape, V As Boolean, NomSérie As String, Série As Series
   On Error Resume Next
   Set CaseÀCocher = ActiveSheet.Shapes(Application.Caller)
   NomSérie = CaseÀCocher.TextFrame.Characters.Text
   V = CaseÀCocher.ControlFormat.Value
   On Error Resume Next
   Set Série = ActiveChart.SeriesCollection(NomSérie)
   If Err Then MsgBox "Série """ & NomSérie & """ non trouvée.", vbCritical: Exit Sub
   Série.Visible = V
   End Sub
en fait les noms de série peuvent varier en fonction de l'intituler de la ligne 34 (une partie est fixe mais les cases en jaune sont modifiable)
dans mon exemple j'arrive à ne pas afficher le nom mais il reste la couleur de la courbe..

merci pour ton code mais il me faudrait plus d'explication pour que je puisse le mettre en place
 

Dranreb

XLDnaute Barbatruc
Pourquoi ne pourriez vous pas vous arranger pour que les séries portent le même nom que le texte des case à cocher ? Ce serait facile, il suffirait de mettre ce nom entre guillemets au lieu d'une expression en premier argument de la formule =SERIE(…
 

Dranreb

XLDnaute Barbatruc
Non parce que je ne perçois pas la logique de vos séries. Les valeurs Y ne sont pas du tout aux mêmes lignes que les X. Enfin du moins la 'Hz1'!$G$79, la VPS_1!$B$78 si. Vous ne pouvez vraiment pas remplacer ces expressions par des noms fixes, et mettre la même chose aux cases à cocher ?
Qu'est-ce qui vous arrête au juste ?
Si vous ne pouvez vraiment pas, cette version déduirait le numéro d'ordre de la série du dernier caractère du nom de la case à cocher, vu qu'ils commencent tous par "Case à cocher " et se terminent par un chiffre :
VB:
Sub SérieVisible()
   Dim CaseÀCocher As Shape, V As Boolean, NuméroSérie As Byte, Série As Series
   On Error Resume Next
   Set CaseÀCocher = ActiveSheet.Shapes(Application.Caller)
   NuméroSérie = Right$(CaseÀCocher.Name, 1)
   V = CaseÀCocher.ControlFormat.Value
   On Error Resume Next
   Set Série = ActiveChart.SeriesCollection(NuméroSérie)
   If Err Then MsgBox "Série N° " & NuméroSérie & " non trouvée.", vbCritical: Exit Sub
   Série.Visible = V
   End Sub
 
Dernière édition:

supercopain

XLDnaute Nouveau
Non parce que je ne perçois pas la logique de vos séries. Les valeurs Y ne sont pas du tout aux mêmes lignes que les X. Enfin du moins la 'Hz1'!$G$79, la VPS_1!$B$78 si. Vous ne pouvez vraiment pas remplacer ces expressions par des noms fixes, et mettre la même chose aux cases à cocher ?
Qu'est-ce qui vous arrête au juste ?
Si vous ne pouvez vraiment pas, cette version déduirait le numéro d'ordre de la série du dernier caractère du nom de la case à cocher, vu qu'ils commencent tous par "Case à cocher " et se terminent par un chiffre :
VB:
Sub SérieVisible()
   Dim CaseÀCocher As Shape, V As Boolean, NuméroSérie As Byte, Série As Series
   On Error Resume Next
   Set CaseÀCocher = ActiveSheet.Shapes(Application.Caller)
   NuméroSérie = Right$(CaseÀCocher.Name, 1)
   V = CaseÀCocher.ControlFormat.Value
   On Error Resume Next
   Set Série = ActiveChart.SeriesCollection(NuméroSérie)
   If Err Then MsgBox "Série N° " & NuméroSérie & " non trouvée.", vbCritical: Exit Sub
   Série.Visible = V
   End Sub

Bonjour,
Après un weekend de réflexion...
1-> Ne pas tenir compte des valeurs VPS (je vais les inclure dans un autre graphique)
2-> Valeurs utilisées pour l'axe des X se trouvent dans l'onglet: "Hz1", colonne: "E", ligne: "81"
3-> Valeurs utilisées pour l'axe des Y se trouvent dans l'onglet: "Hz1", colonne: "G", ligne: "81"
4-> Chaque graphique se composera de 8 courbes extraites des onglets: "Hz1,Hz2,Hz3,..... Hz8"
Après est-ce qu'il faut que le graphique se trouve sur une feuille Excel ou uniquement onglet graphique? (cela n'a pas d'importance pour moi)


d'avance je vous remercie pour votre aide.
 

supercopain

XLDnaute Nouveau
Dans un nouveau module standard.
Ne pas oublier ensuite de l'affecter aux dites cases à cocher (clic droit dessus, affecter une macro …).
J'ai collé le code dans un nouveau module, j'ai créé deux cases à cocher (2 pour tester) j'ai attribué la macro au case à cocher (nom des cases à cocher est récupéré dans la cellule W2 de chaque onglet: Hz1, Hz2, Hz3,....)
mais quand je coche ma case j'ai une boite de dialogue qui s'affiche et m'indique : "Série 0 non trouvé"
 

Dranreb

XLDnaute Barbatruc
Pourquoi avoir créé des cases à cocher ? il y en avait déjà sur votre graphique. Il ne restait qu'à leur affecter la macro. Mais si vous vous êtes arrangé pour que les textes portés dans ces cases à cocher correspondent aux noms des séries, vous pouvez utiliser la version du poste #4.
Là vous me citez le message de la version prévoyant un accès positionnel à la série d'après le chiffre qui termine le nom de la case à cocher.
 
Dernière édition:

supercopain

XLDnaute Nouveau
Pourquoi avoir créé des cases à cocher ? il y en avait déjà sur votre graphique. Il ne restait qu'à leur affecter la macro. Mais si vous vous êtes arrangé pour que les textes portés dans ces cases à cocher correspondent aux noms des séries, vous pouvez utiliser la version du poste #4.
Là vous me citez le message de la version prévoyant un accès positionnel à la série d'après le chiffre qui termine le nom de la case à cocher.
je dois m'y prendre mal, je n'arrive pas à la faire fonctionner ...
j'ai essayer sur l'exemple que j'avais envoyé, là aussi je n'y arrive pas
 

Discussions similaires

Haut Bas