XL 2019 VBA - Simplifier un code fait par enregistrement

ruliann

XLDnaute Occasionnel
bonjour,

Je suis en train de réaliser un graph en anneau sur le fichier ci-joint. J'ai réalisé ce graph en suivant ce tuto et j'aimerais simplifier l'étape fastidieuse du coloriage de chacun des segments...



2022-10-09_11h02_01.png





Chacun des 8 anneaux est divisé en 96 segments, et chacun de ces segments sera colorié selon une suite de 8 couleurs : rouge / orange/orange clair / jaune..../ blanc.

2022-10-09_10h52_12.png



Alors j'ai testé la fonction enregistrement de macro pour le coloriage "en rouge" du 1er anneau, ce qui me donne le code ci-dessous. Le code fonctionne mais est fastidieux à modifier.

Je n'y connais rien en VBA mais j'ai envie d'apprendre. Je pense que la logique VBA voudrait que je fasse une boucle sur les 96 segments du 1er anneau ActiveChart.FullSeriesCollection(1), que le point 1 soit colorié en rouge, puis le point1+8 (soit le point 9) soit colorié en rouge lui aussi, puis le point9+8 (soit le point 17) soit colorié en rouge, etc....jusqu'au point 12.

Je ne sais pas comment initié la boucle et intégrer la ou les variables. Sauriez-vous me guider?


VB:
Sub Anneau1_color1()
'
' Anneau1_color1 Macro
'

'
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(1).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(2).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(3).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(4).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(5).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(6).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(7).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(8).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(9).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(10).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(11).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(12).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(13).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(14).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(15).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(16).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(17).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(18).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(19).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(20).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(21).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(22).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(23).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(24).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(25).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(26).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(27).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(28).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(29).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(30).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(31).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(32).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(33).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(34).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(35).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(36).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(37).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(38).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(39).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(40).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(41).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(42).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(43).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(44).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(45).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(46).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(47).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(48).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(49).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(50).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(51).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(52).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(53).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(54).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(55).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(56).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(57).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(58).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(59).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(60).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(61).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(62).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(63).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(64).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(65).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(66).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(67).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(68).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(69).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(70).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(71).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(72).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(73).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(74).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(75).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(76).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(77).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(78).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(79).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(80).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(81).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(82).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(81).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(82).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(83).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(84).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(85).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(86).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(87).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(88).Select
    ActiveSheet.ChartObjects("Graphique 2").Activate
    ActiveChart.FullSeriesCollection(1).Points(89).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
End Sub
 

Pièces jointes

  • notation2.xlsm
    79.8 KB · Affichages: 5
Dernière édition:
Solution
Bonjour @ruliann , le fil

Pour ce qui est du graphique
VB:
Sub Colorer_Graphique_C()
Dim i&, j&
Application.ScreenUpdating = False
With ActiveSheet.ChartObjects("Graphique 1").Chart
    For j = 1 To 8
            For i = 1 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = Cells(23, "B").Interior.Color
            Next i
            For i = 2 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = Cells(24, "B").Interior.Color
            Next i
            For i = 3 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = Cells(25, "B").Interior.Color
            Next i
            For i = 4 To 96 Step 8...

Staple1600

XLDnaute Barbatruc
Re

Alors premiere piste
(Ce n'est qu'un test illustratif)
A tester sur une copie (pour test) de ton fichier)

Enrichi (BBcode):
Sub test_A()
Randomize 1600
Dim i
For i = 1 To 8
ActiveChart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = RGB(i Mod 8, Rnd * 255, Rnd * 126)
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@ruliann
(Toujours en guise de test )
VB:
Sub test_B()
Dim i, gfx As ChartObject
Set gfx = ActiveSheet.ChartObjects("Graphique 2")
For i = 1 To 8
Select Case i
Case 1
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbGreen
Case 2
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbYellow
Case 3
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbRed
Case 4
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbCyan
Case 5
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbMagenta
Case 6
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbWhite
Case 7
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbBlue
Case 8
gfx.Chart.FullSeriesCollection(i).Format.Fill.ForeColor.RGB = vbBlack
End Select
Next
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

@ruliann
En pour finir les exemples de test
Code:
Sub test_C()
Dim vColors, i&, gfx As ChartObject
Set gfx = ActiveSheet.ChartObjects("Graphique 2")
vColors = Array(vbGreen, vbYellow, vbRed, vbCyan, vbMagenta, vbWhite, vbBlue, vbBlack)
For i = 0 To 7
gfx.Chart.FullSeriesCollection(i + 1).Format.Fill.ForeColor.RGB = vColors(i)
Next
End Sub
Sub test_D()
Dim i&, gfx As ChartObject
Set gfx = ActiveSheet.ChartObjects("Graphique 2")
For i = 0 To 7
gfx.Chart.FullSeriesCollection(i + 1).Format.Fill.ForeColor.RGB = Array(vbGreen, vbYellow, vbRed, vbCyan, vbMagenta, vbWhite, vbBlue, vbBlack)(i)
Next
End Sub
Donc la piste à suivre serait de faire une boucle sur les 8 FullSeriesCollection

Je te laisse un peu cogiter sur ces exemples
(le temps pour moi de passer à table pour le déjeuner dominical)
Bon appétit
 

Staple1600

XLDnaute Barbatruc
Re

@ruliann
Est-ce qu'on se rapproche ?
(je me suis basé sur ton code VBA pour le pas Step 8)
Enrichi (BBcode):
Sub Colorer_Graphique() 'c'est toujours du code pour test
'pas une solution finalisée ;)
Dim i&, j&
With ActiveSheet.ChartObjects("Graphique 2").Chart
    For j = 1 To 8
            For i = 1 To 89 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = vbRed
            Next i
            For i = 2 To 89 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = vbYellow 'RGB(237, 125, 49)
            Next i
            For i = 3 To 89 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = vbMagenta 'RGB(255, 204, 0)
            Next i
    Next j
End With
End Sub
 

ruliann

XLDnaute Occasionnel
@Staple1600
C'est tout à fait le résultat escompté, un grand merci !

Seul j'étais encore loin du compte, je n'arrivais pas à imbriquer les 2 variables dans une boucle...En plus j'ai fait une erreur : chaque anneau contient 96 segments, pas 92.

Je vais me lancer un défi : celui de récupérer le "code VBA" des 8 couleurs qui sont dans la colonne AZ, de manière à ce que si je change la couleur de ces 8 cellules, les mêmes couleurs soient reprises dans le code ci-dessous.


VB:
Sub Colorer_Graphique() 'c'est toujours du code pour test
'pas une solution finalisée ;)
Dim i&, j&
With ActiveSheet.ChartObjects("Graphique 2").Chart
    For j = 1 To 8
            For i = 1 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
            Next i
            For i = 2 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 153, 0)
            Next i
            For i = 3 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 204, 0)
            Next i
            For i = 4 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 255, 0)
            Next i
            For i = 5 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(204, 255, 153)
            Next i
            For i = 6 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(155, 204, 0)
            Next i
            For i = 7 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(0, 153, 0)
            Next i
            For i = 8 To 96 Step 8
                .FullSeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 255, 255)
            Next i
    Next j
End With
End Sub
 

Pièces jointes

  • notation4.xlsm
    98.5 KB · Affichages: 2

ruliann

XLDnaute Occasionnel
Re

@ruliann
Quelle est la différence entre les fichiers ?
J'ai testé ma solution sur notation3.xlsm

Au niveau de la macro il n'y a pas de différence, c'est juste que j'ai mis en forme le graph tel que je le souhaitais au départ (+ il y avait une petite erreur dans les séries de données du graph), c'est mieux si jamais qq'un voulait s'en servir

Je donne des news dans la semaine :)
 

Statistiques des forums

Discussions
312 202
Messages
2 086 180
Membres
103 152
dernier inscrit
Karibu