Créer un graphique avec des étiquettes d’axe dynamiques, Excel VBA
Voici une explication détaillée en français du code VBA permettant de créer un graphique avec des étiquettes d’axe dynamiques.
Objectif
Nous voulons que les étiquettes de l’axe des X d’un graphique se mettent à jour automatiquement en fonction d’une plage de valeurs qui peut évoluer avec le temps. Ceci est particulièrement utile pour analyser des tendances, comme les ventes, les prix boursiers ou toute autre série temporelle.
Code VBA pour des Étiquettes d’Axe Dynamiques
Ce macro VBA va :
- Créer une plage nommée dynamique pour les étiquettes de l’axe des X.
- Associer cette plage au graphique.
- Mettre à jour le graphique automatiquement en fonction des modifications des données.
Sub CreateDynamicChartAxisLabels() Dim ws As Worksheet Dim cht As ChartObject Dim rngLabels As Range Dim rngValues As Range Dim lastRow As Long Dim chartName As String Dim namedRangeX As String Dim namedRangeY As String ' Définir la feuille de calcul Set ws = ThisWorkbook.Sheets("Feuil1") ' Modifier selon le nom de votre feuille ' Trouver la dernière ligne contenant des données dans la colonne A (étiquettes) et B (valeurs) lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' Définir les plages dynamiques Set rngLabels = ws.Range("A2:A" & lastRow) ' Plage des étiquettes X Set rngValues = ws.Range("B2:B" & lastRow) ' Plage des valeurs Y ' Définir les noms de plage dynamiques namedRangeX = "DynamicLabels" namedRangeY = "DynamicValues" ' Supprimer les plages nommées si elles existent déjà On Error Resume Next ThisWorkbook.Names(namedRangeX).Delete ThisWorkbook.Names(namedRangeY).Delete On Error GoTo 0 ' Créer de nouvelles plages nommées dynamiques ThisWorkbook.Names.Add Name:=namedRangeX, RefersTo:=rngLabels ThisWorkbook.Names.Add Name:=namedRangeY, RefersTo:=rngValues ' Vérifier si le graphique existe, sinon le créer chartName = "DynamicChart" On Error Resume Next Set cht = ws.ChartObjects(chartName) On Error GoTo 0 If cht Is Nothing Then ' Créer le graphique s'il n'existe pas Set cht = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=300) cht.Name = chartName cht.Chart.ChartType = xlLine ' Modifier selon le type de graphique souhaité End If ' Associer les plages dynamiques au graphique With cht.Chart .SetSourceData Source:=rngValues .SeriesCollection(1).XValues = "=" & ws.Name & "!" & namedRangeX .SeriesCollection(1).Values = "=" & ws.Name & "!" & namedRangeY .HasTitle = True .ChartTitle.Text = "Graphique Dynamique avec VBA" .Axes(xlCategory).HasTitle = True .Axes(xlCategory).AxisTitle.Text = "Étiquettes de l'Axe X" .Axes(xlValue).HasTitle = True .Axes(xlValue).AxisTitle.Text = "Valeurs de l'Axe Y" End With ' Rafraîchir le graphique cht.Chart.Refresh ' Message de confirmation MsgBox "Le graphique dynamique a été mis à jour avec succès !", vbInformation, "Mise à jour VBA" End Sub
Explication Détaillée du Code
- Définition de la Feuille de Calcul et des Plages de Données
Set ws = ThisWorkbook.Sheets("Feuil1")
- Définit la feuille sur laquelle sont les données et le graphique (remplacez « Feuil1 » par le nom correct).
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
- Trouve la dernière ligne non vide dans la colonne A (Étiquettes) pour adapter la plage dynamique.
Set rngLabels = ws.Range("A2:A" & lastRow) Set rngValues = ws.Range("B2:B" & lastRow)
- Définit les plages de l’axe X (étiquettes) et des valeurs Y.
- Création des Plages Nommées Dynamiques
namedRangeX = "DynamicLabels" namedRangeY = "DynamicValues"
- Définit des noms pour les plages dynamiques.
ThisWorkbook.Names(namedRangeX).Delete ThisWorkbook.Names(namedRangeY).Delete
- Supprime les plages nommées existantes pour éviter des conflits.
ThisWorkbook.Names.Add Name:=namedRangeX, RefersTo:=rngLabels ThisWorkbook.Names.Add Name:=namedRangeY, RefersTo:=rngValues
- Crée de nouvelles plages nommées, qui s’ajustent automatiquement aux données.
- Création ou Mise à Jour du Graphique
chartName = "DynamicChart" Set cht = ws.ChartObjects(chartName)
- Vérifie si un graphique portant ce nom existe déjà.
Set cht = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=300)
- Si le graphique n’existe pas, il est créé.
cht.Name = chartName cht.Chart.ChartType = xlLine
- Définit son nom et son type (xlLine pour un graphique en courbes, modifiable selon les besoins).
- Association des Données au Graphique
.SetSourceData Source:=rngValues .SeriesCollection(1).XValues = "=" & ws.Name & "!" & namedRangeX .SeriesCollection(1).Values = "=" & ws.Name & "!" & namedRangeY
- Associe les plages dynamiques à l’axe des X et aux valeurs Y.
- Personnalisation du Graphique
.HasTitle = True .ChartTitle.Text = "Graphique Dynamique avec VBA"
- Ajoute un titre au graphique.
.Axes(xlCategory).HasTitle = True .Axes(xlCategory).AxisTitle.Text = "Étiquettes de l'Axe X"
- Ajoute un titre à l’axe X.
.Axes(xlValue).HasTitle = True .Axes(xlValue).AxisTitle.Text = "Valeurs de l'Axe Y"
- Ajoute un titre à l’axe Y.
- Rafraîchissement et Message à l’Utilisateur
cht.Chart.Refresh
- Met à jour le graphique pour refléter les nouvelles données.
MsgBox "Le graphique dynamique a été mis à jour avec succès !", vbInformation, "Mise à jour VBA"
- Affiche une confirmation de mise à jour.
Comment Utiliser Cette Macro
1. Préparer les Données
- Colonne A : Étiquettes de l’axe X (dates, catégories, etc.).
- Colonne B : Valeurs de l’axe Y (ventes, volumes, etc.).
2. Exécuter le Code
- Ouvrir Visual Basic for Applications (VBA) (ALT + F11).
- Insérer un Nouveau Module.
- Copier-coller le code dans le module.
- Lancer la macro CreateDynamicChartAxisLabels.
3. Le Graphique S’Actualise Automatiquement
- En modifiant les données et en relançant la macro, le graphique s’adapte.
Conclusion
Ce script VBA permet d’assurer que votre graphique s’adapte dynamiquement aux nouvelles données. C’est idéal pour les tableaux de bord, les rapports automatisés et les applications interactives sous Excel.