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_Initialize
remplit la ComboBox avec les noms uniques des régions issues des données. - Elle utilise une
Collection
pour 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_Click
est 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_Click
pour 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
ChartObjects
ou 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.