Créer des outils de filtrage de données personnalisés, Excel VBA
Créer des outils de filtrage de données personnalisés en VBA (Visual Basic for Applications) dans Excel permet d’offrir des solutions plus dynamiques et adaptées aux besoins spécifiques de l’utilisateur, en utilisant des critères variés pour filtrer des données dans une feuille de calcul.
Voici un exemple détaillé sur la façon de créer un code VBA qui permet de filtrer les données en fonction de certains critères personnalisés.
Objectif :
Créer un filtre dynamique qui permet à l’utilisateur de sélectionner des critères de filtrage (par exemple : dates, valeurs numériques, ou catégories) à partir de menus déroulants ou de champs personnalisés, puis appliquer ce filtre sur une plage de données.
Étapes :
1. Créer une interface utilisateur avec des menus déroulants
Dans Excel, nous allons créer une interface où l’utilisateur peut choisir les critères de filtrage.
- Plage de données : Nous avons une table de données avec des colonnes comme Nom, Âge, Date, et Ville.
- Critères : L’utilisateur peut choisir des filtres basés sur ces colonnes via des menus déroulants (Validation des données).
2. Le code VBA pour appliquer le filtrage
Voici le code VBA détaillé pour appliquer un filtrage dynamique sur une plage de données, en fonction des choix de l’utilisateur.
Sub AppliquerFiltrage()
' Déclarer les variables
Dim ws As Worksheet
Dim plageDonnees As Range
Dim critereNom As String, critereAge As String, critereDate As String, critereVille As String
Dim plageCritereNom As Range, plageCritereAge As Range, plageCritereDate As Range, plageCritereVille As Range
' Assigner la feuille de travail active
Set ws = ThisWorkbook.Sheets("Feuil1") ' Remplacer par le nom de votre feuille
' Définir la plage de données à filtrer
Set plageDonnees = ws.Range("A1:D100") ' Plage à filtrer, à adapter à votre propre plage
' Définir les critères de filtrage à partir des menus déroulants (validation des données)
critereNom = ws.Range("F2").Value ' Cellule F2 contient le critère de Nom
critereAge = ws.Range("G2").Value ' Cellule G2 contient le critère d'Âge
critereDate = ws.Range("H2").Value ' Cellule H2 contient le critère de Date
critereVille = ws.Range("I2").Value ' Cellule I2 contient le critère de Ville
' Désactiver les filtres automatiques existants
ws.AutoFilterMode = False
' Appliquer les filtres en fonction des critères sélectionnés
If critereNom <> "" Then
plageDonnees.AutoFilter Field:=1, Criteria1:=critereNom ' Filtre sur la colonne "Nom" (colonne A)
End If
If critereAge <> "" Then
plageDonnees.AutoFilter Field:=2, Criteria1:=critereAge ' Filtre sur la colonne "Âge" (colonne B)
End If
If critereDate <> "" Then
plageDonnees.AutoFilter Field:=3, Criteria1:=critereDate ' Filtre sur la colonne "Date" (colonne C)
End If
If critereVille <> "" Then
plageDonnees.AutoFilter Field:=4, Criteria1:=critereVille ' Filtre sur la colonne "Ville" (colonne D)
End If
MsgBox "Filtrage appliqué avec succès!", vbInformation
End Sub
Explication du code :
- Déclaration des variables :
- ws : La feuille de calcul où se trouvent les données.
- plageDonnees : La plage de données à filtrer (ici, A1:D100).
- critereNom, critereAge, critereDate, critereVille : Les critères de filtrage saisis par l’utilisateur dans des cellules spécifiques (ici, F2, G2, H2 et I2).
- Assigner la feuille de travail active :
- Set ws = ThisWorkbook.Sheets(« Feuil1 ») : Cette ligne assigne la feuille de calcul « Feuil1 » à la variable ws. Remplacez par le nom de la feuille de votre projet.
- Définir la plage de données à filtrer :
- Set plageDonnees = ws.Range(« A1:D100 ») : Nous définissons la plage de données à filtrer. Vous pouvez adapter cette plage à votre jeu de données.
- Lire les critères de filtrage :
- Les valeurs des critères sont lues à partir des cellules F2, G2, H2 et I2 de la feuille. Ces cellules contiennent les choix de l’utilisateur, qui peuvent être issus de menus déroulants.
- Désactivation des filtres précédents :
- ws.AutoFilterMode = False : Cette ligne permet de désactiver tout filtrage existant avant d’appliquer les nouveaux critères.
- Application des filtres :
- Pour chaque critère (nom, âge, date, ville), si l’utilisateur a défini un critère (c’est-à-dire que la cellule n’est pas vide), le filtre est appliqué sur la colonne correspondante avec la méthode AutoFilter.
- Par exemple, plageDonnees.AutoFilter Field:=1, Criteria1:=critereNom applique un filtre sur la colonne A (Field:=1), avec le critère de nom saisi.
- Message de confirmation :
- MsgBox « Filtrage appliqué avec succès! » : Une boîte de dialogue apparaît pour informer l’utilisateur que le filtrage a été effectué.
3. Ajouter des menus déroulants pour les critères :
Dans Excel, vous pouvez ajouter des menus déroulants dans les cellules F2, G2, H2 et I2 en utilisant la fonctionnalité Validation des données. Voici les étapes :
- Sélectionnez la cellule F2 (pour le critère « Nom »).
- Allez dans Données > Validation des données.
- Dans l’onglet Paramètres, sélectionnez Liste dans le menu déroulant.
- Dans la zone Source, entrez les valeurs que vous souhaitez voir dans le menu déroulant (par exemple, une liste de noms ou de catégories).
- Répétez ces étapes pour les autres cellules (G2, H2, I2) pour ajouter des menus déroulants pour « Âge », « Date » et « Ville ».
Conclusion :
Ce code VBA permet de créer un outil de filtrage personnalisé et dynamique dans Excel, où l’utilisateur peut choisir des critères spécifiques pour affiner les données visibles. Il est possible d’étendre cette logique pour inclure d’autres critères, appliquer des filtres plus complexes (par exemple, des plages de dates ou des critères multiples) ou même gérer des filtres sur plusieurs colonnes simultanément.