Bonjour à tous,

Etant novice en VBA je bloque complètement sur la création d'un graphique. A vrai dire je ne comprends pas pourquoi mon code ne fonctionne pas.

Mon objectif est simple. Je souhaite illustrer le tableau ci-dessous à travers un diagramme / camembert.

Contrats en validation 4
Contrats en attente entreprise 35
Contrats en attente signature 0

Ces données sont récoltées à travers deux feuilles, mais la n'est pas le problème. De fait, on admettra que les données sont justes pour se concentrer sur la création du graphique qui me pose problème. Voici mon code :

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
Dim Tableau(3)
 
Tableau (1)= 4 ' Nombre de Contrats en validation
Tableau (2) = 35  ' Nombre de Contrats en attente entreprise
Tableau (3) = 0 ' Nombre de Contrats en attente signature
 
Dim Grf As ChartObject
Dim Sh As Worksheet
 
Set Sh = Feuil2
 
'On crée notre graphique
 
Set Grf = Sh.ChartObjects.Add(10, 20, 200, 200)
 
Grf.Name = "Graphique"
 
With Grf.Chart
 
    .ChartType = xlPie
    .ClearToMatchStyle
    .ChartStyle = 251 
 
    .HasTitle = True
    .ChartTitle.Characters.Text = "Nombre de contrats..."
    .PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 211, 72)
    .HasLegend = True
 
If Tableau(1) > 0 Then
    .SeriesCollection.NewSeries
    .SeriesCollection(1).Values = Tableau(1)
    .SeriesCollection(1).ApplyDataLabels
    .SeriesCollection(1).Border.Color = 192
    .SeriesCollection(1).Interior.Color = 192
    .SeriesCollection(1).Name = "en cours de validation avant envoi"
End If
 
If Tableau(2) > 0 Then
    .SeriesCollection.NewSeries
    .SeriesCollection(2).Values = Tableau(2)
    .SeriesCollection(2).Name = " contratsen attente entreprise"
    .SeriesCollection(2).ApplyDataLabels
    .SeriesCollection(2).Border.Color = RGB(120, 110, 101)
    .SeriesCollection(2).Interior.Color = RGB(120, 110, 101)
End If
 
If Tableau(3) > 0 Then
    .SeriesCollection.NewSeries
    .SeriesCollection(3).Values = Tableau(3)
    .SeriesCollection(3).Name = "contrats en attente de signature"
    .SeriesCollection(3).ApplyDataLabels
    .SeriesCollection(3).Border.Color = RGB(255, 255, 255)
    .SeriesCollection(3).Interior.Color = RGB(255, 255, 255)
End If
 
End With
 
Dim Emplacement As Range
Set Emplacement = Feuil2.Range("E4:R30")
 
With Grf
    .Left = Emplacement.Left
    .Top = Emplacement.Top
    .Height = Emplacement.Height
    .Width = Emplacement.Width
End With
 
With Feuil2.Shapes("Graphique").Fill
    .Visible = msoFalse
    .ForeColor.RGB = RGB(255, 211, 72)
    .Transparency = 0
End With
Feuil2.Shapes("Graphique").Line.Visible = msoFalse
 
Set Grf = Nothing
Set Sh = Nothing
Si l'on exécute ce code on obtient donc cela :

Nom : Capture_pie_chart.JPG
Affichages : 194
Taille : 22,6 Ko

On ne le voit pas très bien, mais en bas du graphique on a la valeur de la série 1 soit 4. C'est flouté .

Deux problèmes :
  1. Le premier est que la deuxième série ne s'affiche pas sur ce graphique. Si la troisième série avait été supérieur à 0, elle aussi n'aurait pas été affichée. Mais poukwa ?
  2. le second, pourquoi j'ai une légende nommée "1" alors que j'ai nommé la série "en cours de validation avant envoi". Cela fonctionne très bien pour les autres type de graphique, sauf pour le diagramme.


Qu'en pensez-vous ?

Je vous remercie par avance de l'attention portée à ma demande !

Peace.