Bonjour,
Je suis en train de développer une macro qui génère des tableau de bord automatiquement à partir d'une masque.
La macro permet de calculer, à partir de plusieurs base de données, des moyennes, Effectifs, Pourcentage Rang etc...
Pour cela j'ai créé un masque avec 4 onglets.
- Premier onglet : La maquette du TDB. Avec les cellules, Formes (Ellipse, rectangle etc), Zone de texte, graphique qui doivent récupérer les valeurs.
- Deuxième onglet : Le paramétrage des Cellules, Formes et Zone de texte (Dans quelle base, quelle variable, quelle sorte de calcul).
- Troisième onglet : Les graphiques à modalité fixe (Expl : Pourcentage Homme/Femme). Les graphiques fixe créé dans le premier onglet doivent être alimenté par cet onglet.
- Quatrième onglet : Les graphiques à modalité variable (Expl : Les agences d'une région). Ce sont des graphique dont le nombre de modalité varie selon une variable filtre (Expl : Région).
J'arrive parfaitement à alimenter mes Cellules, Formes, Zone de texte, Graphique.
Pour cela pas de problème.
Pour les graphique à modalité fixe j'arrive à modifier la couleur des points des série ainsi que leurs étiquettes (Datalabel).
Pour les graphique à modalité variable j'arrive, dans certain cas, à modifier les couleurs des points des séries mais pas les étiquettes.
Voici les graphique que j'obtiens :
Comme vous le voyez les graphiques à 2 modalités fonctionnent bien (Couleur barre et étiquette).
Pour les 3 graphiques à modalité variable (les 3 du bas), j'arrive à modifier les couleurs des barres de 2 des 3 graphiques (Ne fonctionne pas avec celui en gris), mais pas les étiquettes.
Voici mon code pour les graphiques à modalité fixe :
Voici mon code pour les graphiques à modalité variable :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 'Mets les couleurs aux barres et aux étiquettes If Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 22) <> "" Then 'Si ETIQUETTE ou BARRE a2 = Split(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 3), "_") 'Coupe le nom du graph pour récupérer le num de la série Workbooks(NWb).Sheets(P1).ChartObjects(a2(0)).Activate ActiveChart.SeriesCollection(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)) - a2(1), 2).Value).Select 'Sélectionne la série ActiveChart.SeriesCollection(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)) - a2(1), 2).Value).Points(a2(1)).Select 'Sélectionne le point If Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 22) = "BARRE" Then selection.Interior.Color = FONCTION.RVB(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 23)) 'Couleur Barre If Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 22) = "ETIQUETTE" Then selection.DataLabel.Interior.Color = FONCTION.RVB(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 23)) 'Couleur Etiquette selection.DataLabel.Font.Color = FONCTION.RVBTEXT(Workbooks(NWb).Sheets(P3).Cells(Val(a(1)), 23)) 'Couleur text End If End If
Pour les graphiques à modalité variable je dois d'abord actualiser la source avant de changer la couleur de chaque point.
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 Workbooks(NWb).Sheets(P1).ChartObjects(Workbooks(NWb).Sheets(P4).Cells(i, 3).Value).Activate ActiveChart.PlotArea.Select ActiveChart.ChartArea.Select ActiveChart.SetSourceData Source:=Workbooks(NWb).Sheets(P4).Range("A" & i & ":B" & Workbooks(NWb).Sheets(P4).Cells(i, 3).End(xlDown).Row - 2), PlotBy:=xlColumns 'Mets les couleurs aux barres et aux étiquettes For i_COUL = i + 1 To Workbooks(NWb).Sheets(P4).Cells(i, 3).End(xlDown).Row - 2 'Parcours les modalités du graphique If Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24) = "OK" Then ActiveChart.SeriesCollection(Workbooks(NWb).Sheets(P4).Cells(i, 2).Value).Select 'Sélectionne la série ActiveChart.SeriesCollection(Workbooks(NWb).Sheets(P4).Cells(i, 2).Value).Points(i_COUL - i).Select 'Sélectionne le point If Workbooks(NWb).Sheets(P4).Cells(i, 23) = "BARRE" Then selection.Interior.Color = FONCTION.RVB(Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24)) 'Couleur Barre If Workbooks(NWb).Sheets(P4).Cells(i_COUL, 23) = "ETIQUETTE" Then 'selection.DataLabels.Select 'selection.Format.Fill.ForeColor.RGB = FONCTION.RVB(Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24)) 'Couleur ETIQUETTE 'selection.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = FONCTION.RVBTEXT(Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24)) 'Couleur TEXT selection.DataLabel.Interior.Color = FONCTION.RVB(Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24)) 'Couleur ETIQUETTE selection.DataLabel.Font.Color = FONCTION.RVBTEXT(Workbooks(NWb).Sheets(P4).Cells(i_COUL, 24)) 'Couleur TEXT End If End If Next i_COUL
Je ne suis pas à l'aise avec les graphiques, du coup je bloque.
Merci de votre aide.
Partager