Bonjour tout le monde,

J'ai du récemment mettre au point un "Graphique à bulle avec étiquettes depuis un TCD".
Pour ce qui est de créer le graphique à Bulle, pas de soucis. Sélection et copie des données du TCD dans un tableau statique adjacent, création du graphique à bulles à partir de cette source de données... Bref jusque là tout va bien.

Puis attribution des valeurs d'étiquettes aux Datalabels des bulles... Premier essai avec 3 lignes de données, tout va bien. 2ème essai avec 19 lignes de données, ça pète à la première....

L'erreur rencontrée est donc : "Impossible de lire la propriété Datalabel de la classe Point".

Bon, sur ce un peu de code pour que vous puissiez vous faire votre avis (dans une première version je recréais le chart à chaque exécution) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Sub Bubble_charter()
'Activation de la worksheet "Chartdata"
 Worksheets("chartdata").Activate
 On Error GoTo 0
 
    'Mise à jour du TCD n°1 de la feuille chartdata
 'Worksheets("chartdata").PivotTables(1).RefreshTable
 
 'Copie des données de A5 en I4
    'Sélection de A5
 Range("A5").Select
    'Extension de la sélection sur toutes les cellules utilisées  vers le bas et la droite, et copie des données en I4
 Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Copy Destination:=Range("I4")
 
 'Sélection de la source des données du chart
    'Sélection des données en J4 (les données copiées précédemment)
 Range("J4").Select
    'Extension de la sélection à toutes les cellules utilisées vers le bas et la droite
 Range(ActiveCell, ActiveCell.End(xlDown).End(xlToRight)).Select
    'Enregistrement dans une variable la plage séléectionnée
 Set maplage = Selection   ' Plage du graphique
 
''Création du chart
'    'Ajout du chart
' Charts.Add
'    'Détermination du type du chart
' ActiveChart.ChartType = xlBubble
    'Détermination de la source (maplage), et du sens : xlColumns = en ligne, xlrows = en colonne
Charts("Bubble_chart").Activate
 ActiveChart.SetSourceData Source:=maplage, PlotBy:=xlColumns
    'Détermination de l'emplacement du nouveau chart : xlLocationasNewSheet = Nouvelle feuille
' ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Bubble_Chart"
 
    'Détermination de l'affichage (ou non) des étiquettes de données (entêtes)
 ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowBubbleSizes, HasLeaderLines:=True
 
'Formatage graphique
 ActiveChart.PlotArea.Select
 With Selection.Interior
   .ColorIndex = 2
   .Pattern = xlSolid
 End With
 
'Désactivation de la mise à jour de l'affichage, le temps d'effectuer les changements
 Application.ScreenUpdating = False
 Charts("bubble_chart").Activate
'Mise en forme du texte (taille de police)
 ActiveChart.Axes(xlCategory).Select
 'ActiveChart.Axes(xlCategory).MinimumScale = 0
 ActiveChart.Axes(xlValue).TickLabels.Font.Size = 7
 ActiveChart.Axes(xlCategory).TickLabels.Font.Size = 7
 '--titres
 
 'Détermination du titre du chart
 With ActiveChart
        'détermination de la présence du titre
        .HasTitle = True
        'détermination du titre
        .ChartTitle.Characters.Text = "CB1 / Avg Runsize"
        'détermination des titres d'axes
            'Absisces
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = Sheets("chartdata").Cells(4, 10)
            'Ordonnées
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = Sheets("chartdata").Cells(4, 11)
 End With
 '
 'Mise en forme du chart
    'Grid (grillage)
 ActiveChart.Axes(xlValue).HasMajorGridlines = True
 ActiveChart.Axes(xlCategory).HasMajorGridlines = True
 'Mise en forme de la série de données
 ActiveChart.SeriesCollection(1).Select
    'Effet 3D
 Selection.Has3DEffect = True
 'Mise en forme des étiquettes de données de la série 1 (la seule)
    'Sélection de la série
 ActiveChart.SeriesCollection(1).DataLabels.Select
    'détermination de la taille de polie des étiquettes de données
 Selection.Font.Size = 7
    'Compte des éléments de la série pour boucle
 Nb_points = ActiveChart.SeriesCollection(1).Points.Count
 For i = 1 To Nb_points
        'Détermination du texte à appliquer (Ici, le nom du client + ": " + CB1 en valeur)
   Charts("Bubble_chart").SeriesCollection(1).Points(i).DataLabel.Select
   Selection.Text = Worksheets("chartdata").Cells(i + 4, 9) & " : " & CLng(Worksheets("chartdata").Cells(i + 4, 12)) & " €"
 Next i
 On Error Resume Next
 'Suppression des légendes
 ActiveChart.Legend.Delete
End Sub
Donc, avec 3 lignes, ça passe, avec 4 lignes, ça bloque à la première...
De plus, après essai, ce n'est pas que la classe "Datalabel" qui ne veut plus de moi, la classe "point" est inaccessible aussi, mais par contre je peux voir les éléments de la classe "series", y compris "Points" et "DataLabels", les collections qui devraient me permettre d'atteindre par un moyen ou un autre mes chers "Datalabel". Mais bien entendu, les éléments de ces collections sont inaccessibles...

Si Quelqu'un voit, dans cet imbruglio, un mauvais paramétrage, une fausse manip', une methode obsolète ou je ne sais quoi, je vous serai gré de me le signaler.

D'avance Merci ^^