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 :

Recupérer le libellé des "Points" sur un graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 45
    Points
    45
    Par défaut Recupérer le libellé des "Points" sur un graphique
    Bonjour,
    Ce sujet correspond exactement à mon cas, je cherche à récupérer les noms de mes points de donnée pour leur affecter automatiquement les bonnes couleurs par macro. J'ai également testé la solution ".DataLabel.TEXT" sans succès, ainsi que ".XValues" non plus, et je suis également preneuse de solution si quelqu'un a une piste.
    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 45
    Points
    45
    Par défaut
    Bonjour,
    J'ai finalement trouvé ce qui n'allait pas pour mon cas.

    La solution ".DataLabel.Text" marche mais deux chose peuvent ne pas la faire marcher:

    1) j'ai l'impression qu'il faut obligatoirement préciser "ActiveChart.SeriesCollection(1)." devant "datalabel.text" (soit ActiveChart.SeriesCollection(1).datalabel.text) car sinon il semble que ça ne marche pas même si c'est à l'intérieur d'un "with ActiveChart.SeriesCollection(1)."

    2) si on cherche à faire des tests en fonction du nom de la catégorie (ex: si c'est telle catégorie on affecte tele couleur) il faut que les étiquettes de données ne contiennent que les noms des catégories (donc ni valeurs ni pourcentages)

    Pour information voici mon code personnel pour affecter des couleurs (d'après leurs codes RGB) en fonction du nom de la catégorie (que j'ai renommé ici Categorie1, categorie2 et Categorie3):

    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
     
    ActiveChart.SeriesCollection(1).Select
            With ActiveChart.SeriesCollection(1)
                ActiveChart.SeriesCollection(1).DataLabels.Select
     
    'Memorisation du contenu des etiquettes
                Dim EtiCAT As Boolean, EtiVAL As Boolean, EtiPRC As Boolean 'Respectivement: Catégorie (point), Valeur, Pourcentage
                EtiCAT = Selection.ShowCategoryName
                EtiVAL = Selection.ShowValue
                EtiPRC = Selection.ShowPercentage
    'Ne laisser que les noms de catégories dans les étiquettes
                Selection.ShowCategoryName = True
                Selection.ShowValue = False
                Selection.ShowPercentage = False
                ActiveChart.SeriesCollection(1).HasLeaderLines = False
                ActiveChart.SeriesCollection(1).DataLabels.AutoText = True
     
                Dim MesPoints As Series
                Dim MaVal As String
                For Each P In .Points
                    P.Select
                    MaVal = P.DataLabel.TEXT
                    Select Case MaVal
                        Case "CATEGORIE1"
                            P.Select
                            Selection.Format.Fill.ForeColor.RGB = RGB(31, 73, 125)
                            Selection.Format.Line.ForeColor.RGB = RGB(31, 73, 125)
                        Case "CATEGORIE2"
                            P.Select
                            Selection.Format.Fill.ForeColor.RGB = RGB(128, 100, 162)
                            Selection.Format.Line.ForeColor.RGB = RGB(128, 100, 162)
                        Case "CATEGORIE3"
                            P.Select
                            Selection.Format.Fill.ForeColor.RGB = RGB(0, 112, 192)
                            Selection.Format.Line.ForeColor.RGB = RGB(0, 112, 192)
                    End Select
                Next
            ActiveChart.SeriesCollection(1).DataLabels.ShowCategoryName = EtiCAT
            ActiveChart.SeriesCollection(1).DataLabels.ShowValue = EtiVAL
            ActiveChart.SeriesCollection(1).DataLabels.ShowPercentage = EtiPRC
            ActiveChart.SeriesCollection(1).DataLabels.AutoText = True
            End With
    Voilà, en espérant que ça puisse aider l'auteur s'il revient.

  3. #3
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Une alternative pour récupérer le nom et la valeur de chaque point
    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
    Private Sub Test()
    Dim A As String, B As Double
    Dim i As Integer
    Dim Ch As Chart
     
    Application.ScreenUpdating = False
    Set Ch = Worksheets("Feuil1").ChartObjects("Graphique 1").Chart         'Adapter nom de la feuille et nom du graphique
    With Ch.SeriesCollection(1)
        For i = 1 To .Points.Count
            'A le libélé du point
            A = Application.Index(.XValues, i)
            'B la valeur du point
            B = Application.Index(.Values, i)
            MsgBox "Point " & i & " (" & A & " , " & B & ")"
        Next i
    End With
    Set Ch = Nothing
    End Sub

    [Edit]@ statista
    C'est plus facile et structuré comme ci-après:
    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
    Private Sub Test()
    Dim Ch As Chart
    Dim Klr As Long
    Dim i As Integer
    Dim Categ As String
     
    Application.ScreenUpdating = False
    Set Ch = Worksheets("Feuil1").ChartObjects("Graphique 1").Chart             'Adapter nom de la feuille et nom du graphique
    With Ch.SeriesCollection(1)
        For i = 1 To .Points.Count
            Categ = Application.Index(.XValues, i)                              'Categ le libélé du point
            Select Case Categ
                Case "CATEGORIE1": Klr = RGB(31, 73, 125)
                Case "CATEGORIE2": Klr = RGB(128, 100, 162)
                Case "CATEGORIE3": Klr = RGB(0, 112, 192)
            End Select
            With .Points(i)
                .Format.Fill.ForeColor.RGB = Klr
                .Format.Line.ForeColor.RGB = Klr
            End With
        Next i
    End With
    Set Ch = Nothing
    End Sub

  4. #4
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 57
    Points : 45
    Points
    45
    Par défaut
    En effet c'est plus simple comme ça, merci

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

Discussions similaires

  1. [XL-2000] Recupérer le libellé des "Points" sur un graphique
    Par LouiMz dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/07/2011, 16h57

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