Commandes VBA pour nommer les graphiques
Pour Excel, il y a deux types de graphiques
- Un graphique dans une feuille graphique où le graphique se retrouve seul. Excel désigne un objet de ce type par le vocable
CHART - Un graphique dans une feuille ordinaire au milieu ou à côté des données. Excel désigne un objet de ce type par le vocable
CHARTOBJECT
Toutes nos erreurs viendraient de la confusion de ces 2 types, car ils partagent des syntaxes communes, mais ont bien sûr des différences pour certaines commandes...ce qui nous procure quelques crêpages de chignon.
En voici un exemple : Comment nommer un graphique pour le désigner avec certitude ? Comme pour les feuilles de données lorsque vous créez des graphiques, Excel leur attribue des noms par défaut ("Graphique1", "Graphique2", "Graphique3"...etc...) le problème vient du fait qu'Excel ne reprend pas sa numérotation si par exemple vous effacez votre graphique, il continue à les numéroter, cela peut être embêtant si vous voulez simplement retracer votre graphique, on changer une couleur, etc...etc... Donc il faut trouver le moyen de modifier ce nom par défaut pour que vous puissiez manipuler cet objet ou une de ses propriétés quand c'est nécessaire.
Voici les codes pour créer des graphiques en VBA
Sub CreerUnGrapheSurFeuilleIndependante()
Charts.Add ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C8:F14"), PlotBy _ :=xlColumns
ActiveChart.Location Where:=xlLocationAsNewSheet
With ActiveChart
.HasTitle = True .ChartTitle.Characters.Text = "Bonjour"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
ActiveChart.Name = "Hello"
End Sub
Sub CreerUnGrapheSurFeuilleExistante()
Charts.Add ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("C8:F14"), PlotBy _ :=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "Au revoir"
.Axes(xlCategory, xlPrimary).HasTitle = False
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Feuil1.ChartObjects(1).Name = "Hello2"
End Sub
J'ai placé les lignes de codes qui présentent une différence en couleur. Premières constations, si le titre sur la feuille d'un graphique est modifié par une simple chaîne de caractère...il en va tout autrement pour le nom du graphique. C'est ici que les types CHART et CHARTOBJECT prennent leur importance
Ah! j'allais oublier, les chartobjects peuvent être désignés par un index (cet index lui ne tient compte que des objets encore existants sur la feuille , OUF!!) et ceci dans l'ordre de leur création...ce qui permet de les renommer sans peine et contourner les fameux noms de graphe générés par défaut ("Graphique2", "Graphique3"..). Donc si j'ai plusieurs graphiques sur une même feuille, je peux les renommer comme suit :
Sub NommerGraphe()
Feuil1.ChartObjects(1).Name = "Hello2"
Feuil1.ChartObjects(2).Name = "Hello3"
End Sub
Maintenant que je peux désigner mon graphique avec précision, je peux alors en colorer le fond
Sub ColorerFondGraphe()
Feuil1.ChartObjects("Hello2").Interior.ColorIndex = 45
End Sub
Sub ColorerFondGraphe2()
Application.Charts("Hello").ChartArea.Interior.ColorIndex = 33
End Sub
Ici aussi, on remarque une différence notable pour accomplir, somme toute, une même action.... mais n'oublions pas ce NE sont PAS des objets identiques
Cliquez ici pour télécharger le fichier Fichiers