VBA - Graphique avec des DataLabel ... ou pas !

madlolo

XLDnaute Junior
Bonjour à tous,

je manipule un graphique sous VBA afin de rajouter / modifier le texte (datalabel) :

Code:
For Counter = 1 To nb_max 
    myText = '... 
    ActiveChart.SeriesCollection(4).Points(Counter).DataLabel.Text = myTest 
Next

Le problème, c'est que pour le point no 1 et no 7 (sur 11) de ma série, je n'ai parfois pas de DataLabel !
Avec le débuggeur (fenêtre "Espions", j'obtiens pour l'objet "ActiveChart.SeriesCollection(4).Points(Counter)" :
"DataLabel : <Impossible de lire la propriété DataLabel de la classe Point>"

Comment se fait il que sur 80% des points de mon graphique, j'arrive à lire / modifier le DataLabel, et que sur quelques uns je n'ai pas de DataLabel associé au Point ?

Si vous aves des idées de correction, merci de m'en tenir informer (vite).

Merci d'avance,

Très cordialement,
 
Dernière édition:

madlolo

XLDnaute Junior
Re : VBA - Graphique avec des DataLabel ... ou pas !

Well, j'aurais du mal à rentrer dans les détails

Graphique utilisé : à bulles

Colonne 1 = le label
Colonne 2 = X
Colonne 3 = Y
Colonne 4 : taille de la bulle

Quand on clique sur le graphique "Données sources", on sélectionne la série (ici la série 4), on peut alors sélectionner :
"Valeurs X" : la colonne 2
"Valeurs Y" : la colonne 3
"Tailles" : la colonne 4

Reste le label (ainsi que la couleur de la bulle, mais ça c'est un détail) que je ne peux affecter directement quand on définit le graphique, je dois donc passer en programmation VBA (cf le bout de code dans mon 1er message) : je parcours la colonne 1, et j'affecte à chaque point de ma série 4 le lable correspondant.
Sauf que certains points de ma série n'ont pas d'objet DataLabel :
Code:
Point 
     - +Aplication
     ... 
     - +Border 
     - DataLabel        <Impossible de lire la propriété DataLabel de la classe Point>
     ...
J'aurais du mal a en dire plus sans copie d'écran ...
 

Pierrot93

XLDnaute Barbatruc
Re : VBA - Graphique avec des DataLabel ... ou pas !

Re,

essaye en mettant à "true" la propriété "HasDataLabel" des points ern question... sans fichier difficile d'en dire plus, et pas trop l'envie de reconstruire une base de donnée sachant qu'il y a une chance sur 2 pour que la tienne soit construite differement...
 

madlolo

XLDnaute Junior
Re : VBA - Graphique avec des DataLabel ... ou pas !

Déjà essayé !

Lorsqu'il existe un objet "DataLabel" associé au Point, on peut accéder à la propriété "HasDataLabel".

Par contre, lorsque l'objet "DataLabel" n'existe pas (ce qui est mon cas), c'est la même chose pour la propriété "HasDataLabel" de l'objet "Point" : c'est "<Impossible de lire la propriété HasDataLabel de la classe Point>". Donc impossible de tester cette propriété ?????
 

mromain

XLDnaute Barbatruc
Re : VBA - Graphique avec des DataLabel ... ou pas !

Bonjour madlolo, Pierrot ;)
Par contre, lorsque l'objet "DataLabel" n'existe pas (ce qui est mon cas), c'est la même chose pour la propriété "HasDataLabel" de l'objet "Point" : c'est "<Impossible de lire la propriété HasDataLabel de la classe Point>". Donc impossible de tester cette propriété ?????
Est-ce qu'une "gestion des erreurs" ne te permettrait pas de contourner le problème ?
VB:
Dim monHasDataLabel As Boolean
    
    'tester si le point possède un DataLabel
    On Error Resume Next
     flag = ActiveChart.SeriesCollection(4).Points(Counter).HasDataLabel
     If Err.Number <> 0 Then monHasDataLabel = False
    On Error GoTo 0
    
    'si le point possède un DataLabel, le modifier
    If monHasDataLabel Then  ActiveChart.SeriesCollection(4).Points(Counter).DataLabel.Text =  myTest
PS: Sans fichier exemple, je n'ai pas testé le code.

a+
 
Dernière édition:

madlolo

XLDnaute Junior
Re : VBA - Graphique avec des DataLabel ... ou pas !

Ah, je comprends ce que vous me proposez : en cas d'erreur, on passe au Point suivant !
C'est effectivement ce que je fais déjà !

Ce que je cherche à faire, c'est justement "d'initialiser" le DataLabel associé à mon "Point" !

Par contre, j'ai trouvé une solution de contournement, dont je vous en parlerai demain (j'espère).
 

madlolo

XLDnaute Junior
Re : VBA - Graphique avec des DataLabel ... ou pas !

"ApplyDataLabels" ? ah non je ne connais pas ...

En fait, mon problème était qu'après avoir affecté les labels aux points, sur le graphique, je devais les voir (logique, non ?)
Pour faire un graphique à bulles, j'ai besoin : de 2 coordonnées (X, Y), d'un label, et d'une taille de bulle
Sauf que j'ai le cas suivant :
Code:
Label              X              Y            Taille 
Texte 1          10             15 
Texte 2          -5             10            1000000
Texte 3           5              -2            5000
etc
Via Excel, je peux créer directement le graphique à bulles en précisant les abscisses (X), les ordonnées (Y) et la taille de la bulle (Taille).
Ma macro VBA a pour objectif de parcourir chaque point pour lui affecter son Label correspondant ("Texte 1" à la 1ère bulle, "Texte 2" à la 2ième bulle etc).
Graphiquement, ça marche ... à peu près !
Je regarde mon graphique et je constate que seul la bulle avec le texte "Texte 2" s'affiche. Le "Texte 1" n'ayant pas de "Taille", on ne le voit pas (je m'y attendais). Mais on ne voit pas le "Texte 3", qui a pourtant une "Taille", même faibe par rapport aux autres bulles.
Par contre, quand on passe en mode "Apreçu avant impression", on constate que la 3ième bulle existe, mais a pour texte celui de la 2ième bulle ("Texte 2" au lieu de "Texte 3") : à l'impression du graphique, on se retrouve avec 2 bulles avec "Texte 2" ! :mad:

L'explication du phénomène -mais que je n'ai pas encore corrigé, simplement contourné- est que, lorsque la "Taille" est faible (1000 par rapport à 1000 000) ou vide, le Point, dans Excel/VBA, n'a pas de Propriétés comme "HasDataLabel" ou "DataLabel", ce qui fait que je ne peux pas les lire ou les modifier. :(
Maintenant, comment j'ai contourner le problème ? En fait simplement annuler la taille pour la 3ième bulle, étant donné qu'elle est très faible comparée aux autres :
Code:
Label              X              Y            Taille 
Texte 1          10             15 
Texte 2          -5             10            1000000
Texte 3           5              -2            
etc
Ainsi, la 3ième bulle n'apparait plus dans mon graphique, idem quand on passe en mode "Aperçu avant impression". :p

C'est balot, c'est de la bidouille, mais ça marche !
 

Discussions similaires

Statistiques des forums

Discussions
312 078
Messages
2 085 117
Membres
102 783
dernier inscrit
Basoje