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 !