Bonjour à tous,
je cherche actuellement à automatiser la mise en forme d'étiquettes de donées sur un graphique via du VBA. J'ajoute les étiquettes via le code suivant :
VB:
With graphique.Chart.FullSeriesCollection(serie)
If .HasDataLabels Then .DataLabels.Delete 'suppression des étiquettes seulement si elles existent
.ApplyDataLabels 'ajout des étiquettes
With .DataLabels
.ShowValue = False
.Format.TextFrame2.TextRange.InsertChartField msoChartFieldRange, source.Address(external:=True), 0 'liaison entre le contenu des étiquettes et ma plage
.ShowRange = True
.ShowLegendKey = -1
.Position = xlLabelPositionAbove
.Format.AutoShapeType = MsoAutoShapeType.msoShapeOvalCallout ''ne fait rien
End With
End With
c'est globalement assez simple, et ça fonctionne bien. A une exception près : la dernière ligne ne produit aucun effet. Pourtant, lorsqu'on change la mise en forme des étiquettes à la main en enregistrant une macro, c'est bien cette fonction qui est utilisée ; mais ici, elle ne produit aucun résultat (c'est à dire que les étiquettes gardent leur forme de base, sans arrière plan ni forme quelconque).
J'ai eu beau chercher sur internet, je ne parviens pas à trouver un début d'explication. C'est pourquoi si vous aviez ne serait-ce qu'une piste de recherche, je vous en serais reconaissant.
Cordialement,
Ianpiotr
Bon, je viens de trouver l'explication. En fait, la ligne en question fonctionnait bien, mais pour une raison obscure, lorsque les étiquettes sont créées, leur arrière plan et leur couleur de bordure sont tous deux définis sur "aucun" (et donc la mise en forme de l'étiquette est là, mais invisible). il suffit donc de rajouter le code suivant juste avant la définition de l'autoshapetype :
VB:
With .Format.Fill
.Visible = msoTrue
.ForeColor.rgb = rgb(255, 255, 255)
.Solid
End With
With .Format.Line
.Visible = msoTrue
.ForeColor.rgb = rgb(89, 89, 89)
End With
Finalement c'était simple, j'espère que cela pourra en aider d'autres qui auront le même problème.
Cordialement