Position étiquettes de données dans un graphique

Hello Cher Forum,

j'ai besoin d'un peu d'aide,

J'ai réussi a monter un graphique en bulle et ce grace à l'aide precieuse de ce forum pour certaines formule,

Pour résumer en selectionnant en A1 et B1 de l'onglet Graphique, un pays et un genre, le graphique se met automatiquement à jour,

L'objectif a terme serait de passer sur tout les couples possible de Genre/Pays et de copier coller a chaque fois le Graph obtenu dans un PPT

Cependant j'ai un probleme avec les etiquettes de donnée de ce graphique (composé de plusieurs series)

Elles se superposent enormement et le graphique perd en lisibilité.

J'ai reussi a glanner un petit bout de code pour internet que j'essaie d'adapter, mais mes competences en la matiere me limite un peu. Le code permet en effet de localiser les objets graphique et etiquettes de donnée mais cependant j'ai l'impression qu'il ne le fait que pour 2 series ?

De plus il utilise en variable des elements de texte de l'etiquette de donnée pour essayer de proposer une nouvelle position ce qui forcement ne marche pas (essayez de diviser "dior j'adore" par 4 et on s'appelle )

Sub AdjustReportChart()
    'main report chart
    Dim mrc As Chart
    Dim sercol As SeriesCollection
    Dim axe As Axis, ser As Series
    Dim poi1 As Point, poi2 As Point
    Dim i As Integer, j As Integer
    'select the chart

    Set mrc = ActiveSheet.ChartObjects("Chart 1").Chart
    'delave all the needed vars
    Dim poi1pos As Double, poi1val As Double
    Dim min1 As Integer, max1 As Integer
    Dim poi2pos As Double, poi2val As Double
    Dim min2 As Integer, max2 As Integer
    'get the chart width params
    Dim width As Integer
    width = Int(mrc.PlotArea.InsideWidth)
    Set sercol = mrc.SeriesCollection
    Set axe = mrc.Axes(2, sercol(1).AxisGroup)
    min1 = axe.MinimumScale
    max1 = axe.MaximumScale
    Set axe = mrc.Axes(2, sercol(2).AxisGroup)
    min2 = axe.MinimumScale
    max2 = axe.MaximumScale
    'start adjusting.
    For j = 1 To sercol(1).Points.Count
        Set poi1 = sercol(1).Points(j)
        Set poi2 = sercol(2).Points(j)
        poi1pos = poi1.DataLabel.Left
        poi2pos = poi2.DataLabel.Left
        poi1val = poi1.DataLabel.Text
        poi2val = poi2.DataLabel.Text
        poi1pos = (poi1val / (max1 - min1) * width - 6) + 142
        poi2pos = (poi2val / (max2 - min2) * width - 6) + 142
        If poi2pos < poi1pos + (Len(Str(poi1val)) * 6) And _
            poi1pos < poi2pos + (Len(Str(poi2val)) * 6) Then
            poi2pos = poi1pos + (Len(Str(poi1val)) * 6)
        End If
        poi1.DataLabel.Left = poi1pos
        poi2.DataLabel.Left = poi2pos
    Next j
End Sub

Donc j'ai beau chercher je ne trouve pas de solution,

Je souhaiterai simplement que toutes les etiquettes de donnée de ce graph puissant ne plus se superposer, je ferais en suite en sorte de faire que la macro soit evenementielle pour qu'a chaque changement de couple Genre/Pays les etiquettes se réalignent.

Je tiens a preciser que je ne souhaite pas modifier la taille du graphique car cela correspond a la taille d'une slide PPT.

Merci beaucoup pour votre aide !

Je up le sujet en esperant qu'une bonne ame puisse m'aider !

Bonjour,

Je me suis essayé et pour l'instant, je m'y casse les dents.

Il y a les FullSeriesCollection, les Points, les Datalabel avec interaction entre les FullSeriesCollection ... en plus, il faut que ce soit dynamique pour les changements de données.

C'est une job de pro ... Il faut réussir à les intéresser ...

Je continue à tenter de maîtriser ...

ric

Hello Ric,

Haha merci beaucoup pour ton retour et tes éssais, j"avais effectivement cette crainte que le probleme soit trop complexe…

saurais tu m'expliquer ce que désigne les FullSeriesCollection ? c'est lié au ty pe de graphique en bulle ?

Milles Merci en tout cas !

Bien à toi,

Antoine

Bonjour,

C'est un terme qui est apparu quand j'ai fait un enregistrement automatique ... sélectionnant les bulles et les étiquettes pour connaître la nomenclature.

Ce que j'en comprends (en exemple de ton graphique), c'est une série ...

disons orange = Hermes.

ou vert = Bvlgari

Dans la fenêtre "Sélectionner la source des données" > chacun des items "Entrées de légende (séries)"

Cette macro m'a aidé à comprendre les objets (il faut faire un pas-à-pas (F8)) tout en regardant le graphique.

Sub Macro4()
    ActiveChart.FullSeriesCollection(1).DataLabels.Select
    ActiveChart.FullSeriesCollection(1).Points(6).DataLabel.Select

    ActiveChart.FullSeriesCollection(2).DataLabels.Select
    ActiveChart.FullSeriesCollection(2).Points(1).DataLabel.Select

    ActiveChart.FullSeriesCollection(3).DataLabels.Select
    ActiveChart.FullSeriesCollection(3).Points(1).DataLabel.Select

    ActiveChart.FullSeriesCollection(4).DataLabels.Select
    ActiveChart.FullSeriesCollection(4).Points(3).DataLabel.Select

    ActiveChart.FullSeriesCollection(5).DataLabels.Select
    ActiveChart.FullSeriesCollection(5).Points(1).DataLabel.Select

    ActiveChart.FullSeriesCollection(6).DataLabels.Select
    ActiveChart.FullSeriesCollection(6).Points(7).DataLabel.Select
End Sub

ric

Je up le sujet en esperant qu'une bonne ame puisse m'aider !

Rechercher des sujets similaires à "position etiquettes donnees graphique"