Excel · VBA · A3iformations

Les graphiques en VBA : ChartObject, Chart, ChartType et SetSourceData

Créer le même graphique chaque mois, l’actualiser quand le tableau grandit, changer son type ou ses couleurs : VBA pilote les graphiques d’Excel. Un graphique incorporé dans une feuille est un objet ChartObject, le cadre posé sur la grille, qui contient un objet Chart, le graphique lui-même, avec sa zone de traçage, son titre et sa légende. Les simulateurs reproduisent une feuille Ventes : les graphiques s’y dessinent, se déplacent à la souris et affichent leurs propriétés. Voir aussi les formules et les cellules.

ChartObjects(1).ChartDésigner
Set cht = …Mémoriser
cht.ChartTypeChoisir le type
cht.SetSourceDataRelier aux données
1

ChartObject, PlotArea, ChartTitle et Legend

Un graphique se compose d’objets emboîtés. La feuille possède une collection ChartObjects ; chaque ChartObject est un cadre avec un nom, une position et une taille. Sa propriété Chart donne le graphique, qui contient la zone de graphique (ChartArea), la zone de traçage (PlotArea, entre les axes), le titre (ChartTitle), la légende (Legend) et les séries (SeriesCollection). Cochez « Afficher les zones » pour les repérer.

ObjetRôleAccès
ChartObjectLe cadre sur la feuille : Name, Left, Top, Width, Height, DeleteActiveSheet.ChartObjects(1)
ChartLe graphique : type, données, titre, légendeActiveSheet.ChartObjects(1).Chart
ChartAreaTout le fond du graphique.Chart.ChartArea.Interior.Color
PlotAreaLa zone de traçage, entre les axes.Chart.PlotArea.Interior.Color
ChartTitleLe titre, si HasTitle = True.Chart.ChartTitle.Text
LegendLa légende, si HasLegend = True.Chart.Legend.Position
SeriesUne série de données.Chart.SeriesCollection(1)
Simulateur : les objets d’un graphique (faites glisser le graphique)
HasTitle d’abordChartTitle et Legend n’existent que si HasTitle et HasLegend valent True ; sinon, erreur 1004.
Placer sur une celluleco.Left = Range("F2").Left et co.Top = Range("F2").Top alignent le graphique sur une cellule.
Feuille graphiqueUn graphique peut aussi occuper sa propre feuille : Charts.Add. Il n’a alors pas de ChartObject.
2

La variable Chart

Écrire ActiveSheet.ChartObjects(1).Chart à chaque ligne est long et fragile. On déclare une variable objet Dim cht As Chart et on l’affecte avec Set, dès la création du graphique : Set cht = ActiveSheet.ChartObjects.Add(Left, Top, Width, Height).Chart. Le code agit ensuite sur cht, sans activer ni sélectionner le graphique, et cht.Parent remonte au ChartObject pour le déplacer ou le renommer.

CréationRésultat
ActiveSheet.ChartObjects.Add(250, 10, 220, 160)Un ChartObject vide à la position indiquée ; on ajoute les données avec SetSourceData.
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered, 250, 10, 220, 160)Un graphique au style moderne (Excel 2013 et plus), construit sur la zone de la cellule active, avec un titre.
ActiveChartLe graphique activé : c’est ce qu’écrit l’enregistreur de macros.
Simulateur : créer et piloter un graphique avec une variable
Chart ou ChartObject ?ChartObjects.Add renvoie un ChartObject. Pour une variable As Chart, ajoutez .Chart à la fin.
Exporter en imagecht.Export ThisWorkbook.Path & "\ventes.png" enregistre le graphique en PNG, par exemple pour un courriel.
3

Le type du graphique : cht.ChartType

ChartType lit ou modifie le type du graphique à l’aide d’une constante xl…. Le changement est immédiat et conserve les données, le titre et la légende. Chaque constante correspond à un nombre, que renvoie Debug.Print cht.ChartType.

ConstanteValeurType
xlColumnClustered51Histogramme groupé
xlColumnStacked / xlColumnStacked10052 / 53Histogramme empilé / empilé 100 %
xlBarClustered / xlBarStacked57 / 58Barres groupées / empilées
xlLine / xlLineMarkers4 / 65Courbes / courbes avec marqueurs
xlPie / xlDoughnut5 / -4120Secteurs / anneau
xlArea1Aires
Simulateur : changer le type
Secteurs et anneauxUn graphique en secteurs ne représente qu’une série : choisissez une source d’une seule colonne de valeurs.
Graphique combinéLe type peut aussi se régler série par série : cht.SeriesCollection(3).ChartType = xlLine trace la troisième série en courbe.
4

La source de données : cht.SetSourceData

SetSourceData relie le graphique à une plage : cht.SetSourceData Source:=Range("A1:D5"). La première ligne fournit les noms des séries, la première colonne les catégories. L’argument facultatif PlotBy choisit l’orientation : xlColumns, une série par colonne, ou xlRows, une série par ligne. Sans PlotBy, Excel trace les séries dans le sens où le tableau a le moins d’éléments. Pour un tableau qui grandit, Range("A1").CurrentRegion évite de réécrire l’adresse.

Simulateur : SetSourceData, PlotBy et SeriesCollection
Un tableau structuréAvec un tableau Excel (Ctrl + L), ListObjects(1).Range comme source suit automatiquement les lignes ajoutées.
Plages non contiguësRange("A1:A5,C1:C5") trace seulement les formations et le 2e trimestre.
Exercice : le graphique des sessions

Classeur d’exercice (Énoncé et Corrigé)

  1. Enregistrez le classeur en .xlsm et collez le code de la feuille « Code VBA » dans un module standard.
  2. Exécutez CreerGraphique (ChartObjects.Add, variable Chart, SetSourceData, ChartType, titre, légende).
  3. Exécutez ChangerType plusieurs fois : le graphique alterne entre histogramme, courbes et barres.
  4. Exécutez SecteursT1 et ParFormation (PlotBy:=xlRows), puis ListerGraphiques.
  5. Répondez aux questions de la feuille Contrôle, puis nettoyez avec SupprimerGraphiques.
A3iformations · Organisme certifié Qualiopi · Centre de passage TOSA Interface Excel Microsoft 365 en français