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)
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.
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...
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
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
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(…
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(…
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
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)
Bonjour.
Et pour ce qui est de cette Sub SérieVisible, à mettre dans un module standard et à affecter aux cases à cocher de formulaire de votre feuille graphique, ça va ?
Bonjour.
Et pour ce qui est de cette Sub SérieVisible, à mettre dans un module standard et à affecter aux cases à cocher de formulaire de votre feuille graphique, ça va ?
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é"
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.
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.