NomDuGraphique

Retour vers Excel

Commandes VBA pour nommer les graphiques

Pour Excel, il y a deux types de graphiques

  1. Un graphique dans une feuille graphique où le graphique se retrouve seul. Excel désigne un objet de ce type par le vocable
    CHART
  2. 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

FIN