web-dev-qa-db-fra.com

Activation/désactivation de la visibilité des séries de graphiques avec Excel Macros/vba

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)

enter image description here

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?

5
unknownSPY

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).

Mettre à jour

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.

4
Soulfire

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.

13
Jon Peltier

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.

0