[Résolu] Mise en forme d'étiquettes de données avec MsoAutoShapeType

InaPiotr

XLDnaute Nouveau
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
 

InaPiotr

XLDnaute Nouveau
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
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 947
Membres
101 849
dernier inscrit
florentMIG