Créer un tableau de bord interactif avec UserForms, Excel VBA
Voici un guide détaillé pour créer un tableau de bord interactif avec UserForms dans Excel à l’aide de VBA. Cela permet aux utilisateurs d’interagir avec les données et de visualiser des informations de manière dynamique.
Aperçu des étapes :
1. Préparer les données Excel : Assurez-vous que vos données sont bien organisées, sous forme de tableau ou de plage structurée, afin de faciliter l’accès et le traitement des données via le code VBA.
2. Créer le UserForm : Le UserForm est l’endroit où l’utilisateur interagira avec le tableau de bord. Vous pouvez y ajouter des boutons, des boîtes de liste, des étiquettes, etc., pour permettre aux utilisateurs de filtrer ou de manipuler les données.
3. Ajouter le code VBA : Le code qui se cache derrière le UserForm va gérer le filtrage des données, la création des graphiques, et les mises à jour en fonction des interactions de l’utilisateur.
4. Créer les graphiques dynamiques : En fonction des choix de l’utilisateur, le code VBA mettra à jour les graphiques, les tableaux croisés dynamiques et d’autres éléments du tableau de bord.
Exemple étape par étape
1. Préparer les données :
Imaginons que vous ayez des données de ventes dans une feuille Excel comme suit :
| Date | Région | Ventes |
| 01/01/2025 | Nord | 200 |
| 01/01/2025 | Sud | 150 |
| 01/02/2025 | Nord | 250 |
| 01/02/2025 | Sud | 180 |
2. Créer le UserForm :
- Allez dans l’éditeur VBA en appuyant sur
Alt + F11. - Insérez un nouveau UserForm :
- Dans le Project Explorer, faites un clic droit et sélectionnez Insert > UserForm.
- Ajoutez les contrôles suivants :
- ComboBox (cmbRegion) pour sélectionner la région.
- CommandButton (cmdShowData) pour afficher les données filtrées.
- ChartObject pour afficher le graphique dynamiquement.
- Label (lblTitle) pour afficher le titre du tableau de bord.
3. Code VBA :
' Code du module pour initialiser le UserForm et générer le graphique
Sub ShowDashboard()
' Créer et afficher le UserForm
UserForm1.Show
End Sub
' Code derrière le UserForm
Private Sub UserForm_Initialize()
' Remplir la ComboBox avec les régions uniques
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("SalesData") ' Modifiez le nom de la feuille si nécessaire
Dim regionRange As Range
Set regionRange = ws.Range("B2:B" & ws.Cells(ws.Rows.Count, 2).End(xlUp).Row) ' Plage des régions
Dim cell As Range
Dim regionList As Collection
Set regionList = New Collection
On Error Resume Next
For Each cell In regionRange
regionList.Add cell.Value, CStr(cell.Value)
Next cell
On Error GoTo 0
' Remplir la ComboBox avec les noms des régions uniques
For Each Item In regionList
cmbRegion.AddItem Item
Next Item
' Sélection par défaut
cmbRegion.ListIndex = 0
End Sub
Private Sub cmdShowData_Click()
' Filtrer les données en fonction de la sélection de la ComboBox
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("SalesData")
Dim selectedRegion As String
selectedRegion = cmbRegion.Value
Dim dataRange As Range
Set dataRange = ws.Range("A1:C" & ws.Cells(ws.Rows.Count, 1).End(xlUp).Row) ' Plage des données
' Supprimer le graphique existant
On Error Resume Next
Me.ChartObjects("SalesChart").Delete
On Error GoTo 0
' Filtrer les données et créer un graphique dynamiquement
Dim filteredData As Range
Set filteredData = ws.Range("A1:C1").Resize(1, 3) ' Ligne d'en-tête
Dim r As Range
For Each r In dataRange.Rows
If r.Cells(2).Value = selectedRegion Then
Set filteredData = Union(filteredData, r)
End If
Next r
' Créer un nouveau graphique basé sur les données filtrées
Dim chart As ChartObject
Set chart = Me.ChartObjects.Add(Left:=100, Width:=400, Top:=200, Height:=300)
chart.Name = "SalesChart"
chart.Chart.SetSourceData Source:=filteredData
chart.Chart.ChartType = xlColumnClustered
chart.Chart.HasTitle = True
chart.Chart.ChartTitle.Text = "Données de ventes pour " & selectedRegion
' Mettre à jour le titre
lblTitle.Caption = "Tableau de bord des ventes - " & selectedRegion
End Sub
4. Explication du Code :
1. Initialisation du UserForm :
- La subroutine
UserForm_Initializeremplit la ComboBox avec les noms uniques des régions issues des données. - Elle utilise une
Collectionpour stocker les valeurs uniques des régions afin d’éviter les doublons.
2. Interaction avec l’utilisateur :
- Lorsque l’utilisateur sélectionne une région et clique sur le bouton Afficher les données (
cmdShowData), la subroutinecmdShowData_Clickest exécutée. - Cette subroutine filtre les données en fonction de la région sélectionnée dans la ComboBox.
- Elle crée un graphique dynamique, en définissant sa source de données sur les données filtrées, et ajuste son type (par exemple, un graphique en colonnes groupées).
- Elle met également à jour le titre du graphique et du tableau de bord.
3. Création dynamique du graphique :
- Le graphique est créé à l’aide de
ChartObjects.Add, puis personnalisé (taille, titre, type). - La plage de données est ajustée dynamiquement en fonction de la sélection de l’utilisateur.
4. Mise en page du UserForm :
- La ComboBox permet à l’utilisateur de sélectionner une région.
- Le CommandButton déclenche l’affichage des données filtrées et du graphique.
- L’étiquette (
lblTitle) affiche le titre, qui est mis à jour en fonction de la région sélectionnée.
5. Notes supplémentaires :
- Personnalisation des données : Vous pouvez modifier la logique de filtrage dans
cmdShowData_Clickpour appliquer des filtres supplémentaires, comme des plages de dates ou d’autres critères. - Graphiques multiples : Vous pouvez ajouter plusieurs types de graphiques ou d’autres visualisations en créant de nouveaux
ChartObjectsou tableaux croisés dynamiques. - Amélioration de la mise en page : Vous pouvez enrichir le UserForm avec des contrôles supplémentaires comme des segments, d’autres ComboBoxes, ou des champs de saisie de données.
6. Exécution du tableau de bord :
- Une fois le code en place, vous pouvez simplement exécuter la macro
ShowDashboard(vous pouvez l’attribuer à un bouton ou l’exécuter manuellement) pour ouvrir le UserForm. Le tableau de bord se mettra à jour dynamiquement en fonction des choix de l’utilisateur.
Cette approche permet de créer un tableau de bord Excel interactif avec VBA, tout en étant flexible et extensible pour ajouter des fonctionnalités supplémentaires comme des filtres avancés, des graphiques multiples, ou l’intégration de sources de données externes.