Créer un filtrage dynamique, Excel VBA
Voici l’explication détaillée pour créer un filtrage dynamique dans Excel avec VBA.
Objectif :
Nous allons créer un script VBA qui applique automatiquement un filtre à une plage de données en fonction d’un critère spécifique, comme filtrer les données en fonction des valeurs dans la colonne « Département ». Ce type de filtrage dynamique peut être utile lorsque vos données changent fréquemment ou lorsque vous souhaitez analyser rapidement différents sous-ensembles de données sans avoir à appliquer les filtres manuellement à chaque fois.
Étapes pour créer un filtrage dynamique avec VBA :
- Comprendre la disposition des données : Avant de commencer, assurez-vous que vos données sont organisées sous forme de tableau, avec chaque colonne ayant un en-tête et sans lignes ni colonnes vides au sein de la plage de données. Supposons que vos données commencent à la cellule A1 et que les en-têtes se trouvent en ligne 1.
- Créer une interface utilisateur pour le filtrage : Vous pouvez créer une zone de saisie sur la feuille de calcul où l’utilisateur peut entrer un critère de filtrage. Par exemple, supposons que l’utilisateur entre le nom du département qu’il souhaite filtrer dans la cellule G1 (vous pouvez bien sûr personnaliser cela selon vos besoins).
- Écrire le code VBA : Voici le code VBA qui appliquera automatiquement un filtre en fonction de l’entrée de l’utilisateur.
Exemple de code VBA :
Sub AppliquerFiltreDynamique() Dim ws As Worksheet Dim critereFiltrage As String Dim derniereLigne As Long Dim plageDonnees As Range Dim ligneEntetes As Range ' Définir la feuille de calcul où se trouvent les données Set ws = ThisWorkbook.Sheets("Feuille1") ' Récupérer le critère de filtrage depuis la cellule G1 critereFiltrage = ws.Range("G1").Value ' Vérifier si le critère de filtrage est vide If critereFiltrage = "" Then MsgBox "Veuillez entrer un critère de filtrage dans la cellule G1.", vbExclamation Exit Sub End If ' Trouver la dernière ligne de données dans la colonne A (supposant qu'il n'y a pas de lacunes dans les données) derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' Définir la plage de données à filtrer (en supposant que les données commencent à A1 et vont jusqu'à la dernière ligne de données dans la colonne D) Set plageDonnees = ws.Range("A1:D" & derniereLigne) ' Supprimer les filtres existants If ws.AutoFilterMode Then ws.AutoFilterMode = False ' Appliquer le filtre en fonction du critère saisi en G1 plageDonnees.AutoFilter Field:=3, Criteria1:=critereFiltrage ' Le champ 3 correspond à la colonne "Département" MsgBox "Filtre appliqué pour le Département : " & critereFiltrage, vbInformation End Sub
Explication du code :
1. Définir la feuille de calcul (ws) : La feuille de calcul où se trouvent les données est définie avec la ligne :
Set ws = ThisWorkbook.Sheets("Feuille1")
Vous devez remplacer « Feuille1 » par le nom réel de votre feuille de calcul.
2. Récupérer le critère de filtrage : Le critère de filtrage (par exemple, le nom du département) est récupéré depuis la cellule G1 de la feuille de calcul avec la ligne :
critereFiltrage = ws.Range("G1").Value
Si la cellule est vide, le code affiche un message invitant l’utilisateur à entrer un critère de filtrage.
3. Identifier la dernière ligne : La dernière ligne des données est déterminée dans la colonne A (supposant qu’il n’y a pas de lacunes dans les données) avec la ligne :
derniereLigne = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Cela garantit que le filtrage dynamique fonctionnera même si le nombre d’enregistrements change.
4. Définir la plage de données : La plage de données à filtrer est définie comme A1:D (en supposant que vos données s’étendent des colonnes A à D). La ligne suivante :
Set plageDonnees = ws.Range("A1:D" & derniereLigne)
définit la plage de données qui sera filtrée.
5. Supprimer les filtres existants : Si des filtres sont déjà appliqués, ils sont supprimés avec :
If ws.AutoFilterMode Then ws.AutoFilterMode = False
6. Appliquer le filtre : Le filtre est appliqué à la plage de données, spécifiquement sur la colonne « Département » (qui est la colonne C dans cet exemple). Le critère de filtrage est passé comme suit :
plageDonnees.AutoFilter Field:=3, Criteria1:=critereFiltrage
Field:=3 fait référence à la colonne « Département » (colonne C) car elle est la troisième colonne dans la plage. Criteria1:=critereFiltrage applique le critère spécifié dans la cellule G1.
7. Afficher un message : Après l’application du filtre, un message affiche à l’utilisateur quel département a été filtré :
MsgBox "Filtre appliqué pour le Département : " & critereFiltrage, vbInformation
Comment utiliser ce code :
- Entrez le nom du département (ou tout autre critère de filtrage) dans la cellule G1 de votre feuille de calcul.
- Exécutez la macro AppliquerFiltreDynamique en appuyant sur Alt + F8, en sélectionnant la macro, puis en cliquant sur Exécuter, ou en l’assignant à un bouton pour un accès plus facile.
Personnaliser le code :
- Filtrage sur plusieurs critères : Vous pouvez modifier le code pour appliquer des filtres sur plusieurs colonnes. Par exemple, vous pouvez ajouter une autre condition de filtrage pour filtrer par « Lieu » dans une autre colonne.
- Plage dynamique : Si le nombre de colonnes de vos données change, vous pouvez ajuster la plage de données dynamiquement en utilisant la méthode .CurrentRegion pour capturer toutes les données.
Conclusion :
Ce script VBA permet de créer un filtrage dynamique basé sur l’entrée de l’utilisateur. Il évite d’avoir à appliquer manuellement les filtres à chaque fois et vous aide à automatiser ce processus, surtout pour les grandes quantités de données.