Je crée un graphique linéaire (graphique) dans Excel avec plusieurs séries de données tracées sur le même graphique.
J'ai besoin de créer une solution macro/VBA qui puisse activer/désactiver la visibilité de ces séries en appuyant sur un bouton (ou une case à cocher, etc.).
Semblable à cette image (réalisée manuellement via le système de menus Excel)
J'ai essayé de regarder à travers tous les vars/méthodes des membres sur
https://msdn.Microsoft.com/EN-US/library/office/ff837379.aspx
mais n'ont pas eu beaucoup de chance.
J'ai essayé de jouer avec des morceaux comme
Charts("Chart1").SeriesCollection(1)
et
Worksheets("Graphical Data").ChartObjects(1)
mais je ne peux ni obtenir l'objet graphique (j'obtiens un indice en erreur hors de portée) ni en mesure de trouver une méthode qui me permettrait d'activer ou de désactiver la visibilité de séries individuelles.
Des idées?
Je crois que la propriété que vous recherchez est la propriété SeriesCollection.Format.Line.Visible
. J'ai rapidement créé un classeur Excel, ajouté un jeu de données simple (de 1 à 10 seulement) et ajouté un graphique linéaire "Graphique 2" à la feuille Feuille1.
Ce code a désactivé la visibilité de la ligne:
Option Explicit
Private Sub Test()
Dim cht As Chart
Dim ser As Series
'Retrieve our chart and seriescollection objects'
Set cht = Worksheets("Sheet1").ChartObjects("Chart 2").Chart
Set ser = cht.SeriesCollection(1)
'Set the first series line to be hidden'
With ser.Format.Line
.Visible = msoFalse
End With
End Sub
De même, définir la propriété ser.Format.Line.Visible
sur msoTrue
a rendu la ligne visible à nouveau.
Pour récupérer le graphique lui-même, je devais d'abord l'activer, puis définir ma variable cht
sur ActiveChart. Pour afficher le nom de votre graphique, sélectionnez-le et regardez dans la zone de nom (près de l'endroit où vous voudriez entrer la valeur de la cellule/formule).
Lorsque vous utilisez la méthode ci-dessus, le nom de la série reste dans la zone de légende. Je ne pouvais pas trouver une propriété de visibilité pour la variable SeriesCollection
dans la légende. Toutefois, une solution consiste à renommer simplement la série en tant que chaîne vide (la série disparaîtra de la légende), puis à renommer la série lorsque vous le souhaitez. montre le.
Ce code ci-dessous basculera la visibilité du nom de la ligne et de la série dans la légende.
Option Explicit
Private Sub Test()
Dim cht As Chart
Dim ser As Series
'Retrieve our chart and seriescollection objects'
Set cht = Worksheets("Sheet1").ChartObjects("Chart 1").Chart
Set ser = cht.SeriesCollection(1)
'Set the first series line to be hidden'
With ser.Format.Line
If .Visible = msoTrue Then
.Visible = msoFalse
ser.Name = vbNullString
Else
.Visible = msoTrue
ser.Name = "Series 1"
End If
End With
End Sub
Et, chaque fois que vous utilisez .Format.Line.Visible = msoTrue
, n'oubliez pas de redéfinir ser.Name
sur le nom de votre série.
Chaque fois que je ne sais pas comment faire quelque chose comme ça, j'allume l'enregistreur de macros.
J'avais un graphique avec quatre séries et j'ai utilisé la fonction de filtrage dans Excel 2013 pour masquer et afficher la deuxième série, alors que l'enregistreur de macros était en cours d'exécution.
Voici le code pertinent:
ActiveChart.FullSeriesCollection(2).IsFiltered = True
' series 2 is now hidden
ActiveChart.FullSeriesCollection(2).IsFiltered = False
' series 2 is now visible
Le type de série (ligne ou colonne) n'a pas d'importance, cela fonctionne pour aucun d'entre eux.
Il existe un moyen simple d’activer et de désactiver la visibilité de la série: utiliser un filtre sur vos données source. Cela vous aidera facilement comme suit. Vous pouvez insérer une nouvelle fenêtre. Définissez l'une d'entre elles sur la feuille de données source et l'autre fenêtre sur la feuille de graphique. Ensuite, arrangez les deux fenêtres pour voir les deux en même temps. Maintenant, si vous filtrez simultanément les séries que vous aimez sur la feuille de données source, vous verrez les séries souhaitées sur l’autre feuille.