Mise en forme de plusieurs graphiques (boucle For Each ?)
Résolu
Blurrry
-
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
ccm81 Messages postés 10909 Date d'inscription Statut Membre Dernière intervention -
Bonjour le forum,
Sous VBA (Excel 2007), j'ai une macro de mise en forme de graphique (couleur de trait, type de marqueur, etc.) que je souhaite appliquer à tous les graphiques d'une même feuille (et dans plusieurs documents, mais ça ce ne sera normalement pas un problème).
Le corps de la macro (la mise en forme) fonctionne correctement, mais je n'arrive pas à générer la boucle de sorte à prendre en compte « tous les graphiques » de ma feuille. Je suis parti sur une structure en FOR EACH...NEXT pouvoir traiter tous les graphiques, peu importe leur nombre, mais cela ne fonctionne pas. Je suppose que le problème vient de « ActiveChart.SeriesCollection(...).Select », mais je ne sais comment sélectionner les courbes d'un graphique sans passer par la sélection du graphique via un ACTIVECHART.
Quelqu'un aurait-il une solution ? Ci-dessous mon code actuel :
Merci d'avance pour votre aide :)
Sous VBA (Excel 2007), j'ai une macro de mise en forme de graphique (couleur de trait, type de marqueur, etc.) que je souhaite appliquer à tous les graphiques d'une même feuille (et dans plusieurs documents, mais ça ce ne sera normalement pas un problème).
Le corps de la macro (la mise en forme) fonctionne correctement, mais je n'arrive pas à générer la boucle de sorte à prendre en compte « tous les graphiques » de ma feuille. Je suis parti sur une structure en FOR EACH...NEXT pouvoir traiter tous les graphiques, peu importe leur nombre, mais cela ne fonctionne pas. Je suppose que le problème vient de « ActiveChart.SeriesCollection(...).Select », mais je ne sais comment sélectionner les courbes d'un graphique sans passer par la sélection du graphique via un ACTIVECHART.
Quelqu'un aurait-il une solution ? Ci-dessous mon code actuel :
Sub updategraph() Dim graph As ChartObject For Each graph In Sheets("Feuille1").ChartObjects '***contenu de la boucle : 'Courbe 1 (ex : 2013) ActiveChart.SeriesCollection(1).Select Selection.MarkerStyle = 3 Selection.MarkerSize = 5 With Selection.Format.Fill .Visible = msoTrue .ForeColor.[/contents/1214-le-codage-rgb-rvb RGB] = RGB(0, 112, 192) '.Transparency = 0 '.Solid End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 112, 192) '.Transparency = 0 .Weight = 1.5 End With 'Courbe 2 (ex : 2014) ActiveChart.SeriesCollection(2).Select Selection.MarkerStyle = 2 Selection.MarkerSize = 5 With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(146, 208, 80) '.Transparency = 0 '.Solid End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(146, 208, 80) '.Transparency = 0 .Weight = 1.5 End With 'Courbe 3 (ex : 2015) ActiveChart.SeriesCollection(3).Select Selection.MarkerStyle = 1 Selection.MarkerSize = 6 With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(0, 0, 0) '.Transparency = 0 '.Solid End With With Selection.Format.Line .Visible = msoTrue .ForeColor.RGB = RGB(0, 0, 0) '.ForeColor.ObjectThemeColor = msoThemeColorText1 '.ForeColor.TintAndShade = 0 '.ForeColor.Brightness = 0 '.Transparency = 0 .Weight = 2.5 End With Next graph End Sub
Merci d'avance pour votre aide :)
A voir également:
- Mise en forme de plusieurs graphiques (boucle For Each ?)
- Mise en forme conditionnelle excel - Guide
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise en forme tableau croisé dynamique - Guide
- Mise a jour windows 10 - Accueil - Mise à jour
4 réponses
Bonjour
un petit exemple de manipulation des graphiques d'une feuille
https://www.cjoint.com/?3AgtcJfwT47
Cdlmnt
un petit exemple de manipulation des graphiques d'une feuille
https://www.cjoint.com/?3AgtcJfwT47
Cdlmnt
OU avec For each graph
Cdlmnt
Sub ManipGraphique()
Dim gr As Object, nbgr As Long, nugr As Long, nbser As Long, nuser As Long
nbgr = ActiveSheet.ChartObjects.Count
For Each gr In ActiveSheet.ChartObjects
gr.Activate
nugr = gr.Index
MsgBox "graphique " & nugr & " activé"
nbser = gr.Chart.SeriesCollection.Count
For nuser = 1 To nbser
gr.Chart.SeriesCollection(nuser).Select
MsgBox "graphique " & nugr & " serie " & nuser & " selectionnée"
Next nuser
Next gr
End Sub
Cdlmnt
Je ne pense pas qu'il y ait une grande différenceau niveau temps d'exécution, si ce n'est qu'avec for ... each, tu n'as pas besoin de définir la borne sup de la boucle (nbgr = ActiveSheet.ChartObjects.Count), mais bon, vba doit peut être se rattraper ailleurs !
Bonne journée à toi
Bonne journée à toi
Re-bonjour,
Tout d'abord merci pour la rapidité de vos réponses !
Et ensuite un encore plus grand merci car les deux méthodes fonctionnent parfaitement, c'est exactement ce que je cherchais :)
Du coup, petite question par curiosité : y a-t-il une différence entre une structure en FOR EACH et une en FOR + COUNT ?
En tout cas cela me permet de gagner un temps précieux, je vous en suis très reconnaissant.
Bonne journée !
Tout d'abord merci pour la rapidité de vos réponses !
Et ensuite un encore plus grand merci car les deux méthodes fonctionnent parfaitement, c'est exactement ce que je cherchais :)
Du coup, petite question par curiosité : y a-t-il une différence entre une structure en FOR EACH et une en FOR + COUNT ?
En tout cas cela me permet de gagner un temps précieux, je vous en suis très reconnaissant.
Bonne journée !