Ceci est une contribution de débutant, soyez indulgent SVP.
Le but ici est de pouvoir générer un graphique un grand nombre de fois sans avoir à redéfinir manuellement les couleurs. Il peut en effet être utile d'attribuer des couleurs fixes en fonctions d'un champ.
Avant toute choses nous avons besoin de faire appel à une bibliothèque Microsoft pour pouvoir piloter notre graphique.
•Microsoft Graph 12.0 Object Library
Il faut la référencer dans la fenêtre Visual Basic/outils/référence.
Le script présenté ici permet de fixer les couleurs d'un graphique de type camembert en fonction d'un des champs qui l'alimente: le script ci-dessous s'applique à des exploitations agricoles pour lesquels nous avons un champs "type de culture" (maïs, Blé, orge, etc.); chaque portion du camembert est composé d'un type de culture auquel on attribue une couleur. Bien évidemment chaque exploitation agricole est unique donc chacune ne comporte pas les mêmes cultures (d'où la boucle "for next"). Autre précision sur le script; l'incrémentation de la boucle "for-next" se fait sur les lignes du tableau (DataShet) qui alimente le graphique, mais en restant sur la première colonne index "0" dans le "range": cela permet de balayer les éléments que l'on retrouve dans la légende.
remarque: ma boucle "for-next" se fait sur le compte des éléments de ma légende ("LegendEntries.count") alors que l'incrémentation est dirigée sur le tableau (DataSheet) qui alimente le graphique; ça c'est pas très académique mais ça marche et de toute façon je ne sais pas comment faire autrement.
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 Dim wChart As Graph.Chart 'déclaration variable objet contenant le dessin du graphique Set wChart = Me.MonGraphique.Object.Application.Chart Dim wLegend As Legend 'declaration variable objet contenant la legende du dessin du graphique Set wLegend = wChart.Legend wChart.HasLegend = True Dim wPoints As Graph.Points 'declaration variable objet contenant la position (sous-ensemble) d'une serie du graphique Set wPoints = wChart.SeriesCollection(1).Points 'pour un graphique de type camembert, il n'y a qu'une seule série, donc l'index est 1 pour "seriescollection" Dim wDataSheet As Graph.DataSheet 'declaration du tableau de donnée du graphique Set wDataSheet = Me.MonGraphique.Object.Application.DataSheet Dim i As Byte Dim Culture As String i = 1 Culture = "" For i = 1 To wLegend.LegendEntries.Count 'boucle sur le nombre d'élément composant le graphique, équivalent à la légende ici Culture = wDataSheet.Range("0" & i).Value 'récupération de l'intitulé de chaque ligne Select Case Culture 'attribution des couleurs à chaque position (sous-ensemble) en fonction de l'intitulé récupérer précedemment Case "Avoine printemps" wPoints.Item(i).Fill.ForeColor.SchemeColor = 9 Case "Betterave" wPoints.Item(i).Fill.ForeColor.SchemeColor = 13 Case "Blé tendre hiver" wPoints.Item(i).Fill.ForeColor.SchemeColor = 45 Case "Céréales" wPoints.Item(i).Fill.ForeColor.SchemeColor = 44 Case "Colza" wPoints.Item(i).Fill.ForeColor.SchemeColor = 32 Case "Féverole" wPoints.Item(i).Fill.ForeColor.SchemeColor = 34 Case "Haricot" wPoints.Item(i).Fill.ForeColor.SchemeColor = 31 Case "Jachère" wPoints.Item(i).Fill.ForeColor.SchemeColor = 1 Case "Orge hiver" wPoints.Item(i).Fill.ForeColor.SchemeColor = 21 Case "Orge printemps" wPoints.Item(i).Fill.ForeColor.SchemeColor = 22 Case "Seigle" wPoints.Item(i).Fill.ForeColor.SchemeColor = 29 Case "Soja" wPoints.Item(i).Fill.ForeColor.SchemeColor = 19 Case "Tournesol" wPoints.Item(i).Fill.ForeColor.SchemeColor = 56 Case "Vigne" wPoints.Item(i).Fill.ForeColor.SchemeColor = 30 End Select Next i
D'autre part j'aurais aimer fixer des couleurs en RGB car il est possible d'accéder à beaucoup plus de Nuances mais je n'y suis pas parvenu; voici la syntaxe que j'ai utlisé mais sans succès:
Code : Sélectionner tout - Visualiser dans une fenêtre à part .....Fill.ForeColor.RGB = RGB(255,192,26)
Partager