IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Séries, Graphiques et légendes [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut Séries, Graphiques et légendes
    Bonjour,
    j'ai un souci d'affichage et de suppression de légendes sous Excel:

    Je génère un graphique par macro à partir de plusieurs séries de données.

    Pour chaque série, j'utilise le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            With Sheets("Feuil1").ChartObjects("Graphique 1").Chart
     
            .SeriesCollection.NewSeries
            .SeriesCollection(ind).XValues = X
     
            .SeriesCollection(ind).Values = Y
            .SeriesCollection(ind).AxisGroup = 1 'Ou 2 pour les graphs d'axe secondaire
            .SeriesCollection(ind).Name = Titre       
     
            End With
    J'aimerai ensuite pouvoir supprimer certaines légendes (mais pas toutes), toujours par VBA.

    Pourtant, les indices de légende (Sheets("Feuil1").ChartObjects("Graphique 1").Chart.Legend.LegendEntries) ne correspondent pas toujours aux indices de seriescollection. C'est le cas si on alterne des paramètres d'axe primaire puis secondaire.

    j'aimerai donc connaître la façon de pouvoir relier une série à sa légende pour pouvoir supprimer celle-ci.

    Merci de vos réponses

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,
    L'aide pour LegendEntry, objet est assez explicite sur le sujet.
    Il n'existe aucun moyen direct de renvoyer la série ou la courbe de tendance correspondant à l'entrée de légende.
    Cordialement.
    ctac

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut
    Bonjour, Merci de ta réponse.

    Je ne cherche pas a renvoyer directement à ma série de données depuis mon objet légende, mais bien à retrouver (indirectement s'il le faut), à quelle légende correspond quelle série (via l'index, le nom, la couleur du trait ou n'importe quoi).
    Je suppose quand même qu'il existe un moment où les deux objets sont liés puisque la légende est bien associée à la série.(Si l'on supprime la série, la légende disparaît également).

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut Ré-associer une série à sa légende
    Bonjour,

    pour reposer le problème plus clairement:

    Lorsque plusieurs séries de données sont ajoutées à un graphique via la commande ChartObjects("Chart 1").Chart.SeriesCollection.Newseries, la collection de légende (LegendEntries) associée au chart et la collection de séries sont toutes deux mises à jour mais de manière différente:
    La collection de série ajoute la courbe associée au dernier indice +1. La collection de Légendes est elle remise à jour et re-triée automatiquement pour que les séries d'axe primaires soient considérées comme antérieures à celles d'axe secondaire.

    Par exemple plus concret: si on ajoute 2 séries primaires (P1/P2) puis 2 séries Secondaires (S1/S2) puis 1 série primaire (P3), l'ordre des séries sera P1/P2/S1/S2/P3 mais l'ordre des légendes sera P1/P2/P3/S1/S2, Pourtant les deux séries d'objets restent liées puisque la suppression des séries entraîne celle des légendes.

    J'aimerai trouver un moyen soit d’empêcher ce tri-automatique, soit de pouvoir ré-associer la série à sa légende.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Regarde la remarque de ce lien http://msdn.microsoft.com/en-us/libr...ice.11%29.aspx

    Edit
    Néanmoins, si les séries ont des couleurs et marqueurs différents, on pourra faire des boucles et récupérer la correspondance entre nom de la série et son index (position) dans la légende

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub Test()
    Dim i As Byte, N As Byte
    Dim Lg As LegendEntry
    Dim Sr As Series
    Dim S As Integer
    Dim Ch As Chart
    Dim M As Long
    Dim Tb()
     
    Set Ch = Feuil1.ChartObjects(1).Chart
    With Ch
        N = .SeriesCollection.Count
        ReDim Tb(1 To 4, 1 To N)
        For Each Sr In .SeriesCollection
            i = i + 1
            With Sr
                Tb(1, i) = .Name
                Tb(2, i) = .Border.Color
                Tb(3, i) = .MarkerStyle
            End With
        Next Sr
     
        .HasLegend = False
        .HasLegend = True
     
        For Each Lg In .Legend.LegendEntries
            With Lg
                With .LegendKey
                    M = .Border.Color
                    S = .MarkerStyle
                End With
                For i = 1 To N
                    If Tb(2, i) = M And Tb(3, i) = S Then
                        Tb(4, i) = .Index
                        Exit For
                    End If
                Next i
            End With
        Next Lg
    End With
    Set Ch = Nothing
     
    'Exemple on récupère la correspondance entre série et index des légendes
    Feuil1.Range("M1").Resize(N, 4) = Application.Transpose(Tb)
    End Sub

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2013
    Messages : 46
    Par défaut
    Merci,
    C'est bien ce que je cherchais (Moyennant tout de même quelques adaptations).
    En connaissant les propriétés d'affichage des séries (Marker+Color), je peut remonter à la légende..
    Nickel

    EB

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Docking graphique et légende
    Par Vincent32 dans le forum VB.NET
    Réponses: 1
    Dernier message: 11/04/2012, 09h56
  2. Réponses: 5
    Dernier message: 17/02/2011, 14h10
  3. graphique et légende
    Par Sarkal115 dans le forum Conception
    Réponses: 0
    Dernier message: 11/05/2010, 20h39
  4. Graphique : Affichage légende sur Axe
    Par npirard dans le forum Flex
    Réponses: 4
    Dernier message: 27/01/2010, 16h02
  5. [VBA-E] Graphique et Légende
    Par Currahee dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/09/2007, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo