Créer des critères de filtrage dynamiques, Excel VBA

Créer des critères de filtrage dynamiques, Excel VBA

Voici une explication détaillée et un exemple de code VBA pour créer des critères de filtrage dynamiques dans Excel à l’aide de VBA. 

Objectif : 

Nous voulons créer une macro VBA qui applique des critères de filtrage dynamiques à un tableau Excel, en fonction des entrées de l’utilisateur ou de règles pré-définies. Les critères de filtrage peuvent varier en fonction des valeurs de certaines cellules ou de critères prédéfinis (comme des plages de dates, des plages numériques ou des critères textuels). 

Approche : 

  1. Identifier la plage de données : Nous devons d’abord identifier la plage de données sur laquelle nous voulons appliquer le filtre. 
  2. Entrée de l’utilisateur ou critères pré-définis : Les critères de filtrage seront obtenus à partir des entrées de l’utilisateur ou de conditions prédéfinies stockées dans des cellules spécifiques. 
  3. Appliquer le filtre : À l’aide de la méthode AutoFilter, nous pouvons appliquer le filtre dynamiquement en fonction des critères spécifiés. 

Scénario Exemple : 

  • Nous avons un tableau de données dans la feuille Feuille1, et nous voulons appliquer un filtre dynamique basé sur :  
  • Une plage de dates (date de début et date de fin) provenant des cellules A1 (date de début) et A2 (date de fin). 
  • Un filtre texte pour la colonne « Catégorie » provenant de la cellule B1. 

Code VBA : 

Sub AppliquerFiltreDynamique() 
    ' Définir les variables 
    Dim ws As Worksheet 
    Dim tbl As ListObject 
    Dim dateDebut As Date 
    Dim dateFin As Date 
    Dim categorie As String 
    ' Définir la feuille de travail et la plage du tableau 
    Set ws = ThisWorkbook.Sheets("Feuille1") 
    Set tbl = ws.ListObjects("Tableau1") ' Supposons que le tableau s'appelle Tableau1 
    ' Obtenir les critères de filtrage de l'utilisateur 
    dateDebut = ws.Range("A1").Value ' Date de début dans la cellule A1 
    dateFin = ws.Range("A2").Value ' Date de fin dans la cellule A2 
    categorie = ws.Range("B1").Value ' Catégorie dans la cellule B1 
    ' Supprimer les filtres existants 
    tbl.AutoFilter.ShowAllData 
    ' Appliquer le filtre selon les critères dynamiques 
    ' Filtrer par Date (supposons que la colonne de date est la 1ère colonne) 
    tbl.Range.AutoFilter Field:=1, Criteria1:=">=" & dateDebut, Operator:=xlAnd, Criteria2:="<=" & dateFin 
    ' Filtrer par Catégorie (supposons que la colonne de Catégorie est la 2ème colonne) 
    tbl.Range.AutoFilter Field:=2, Criteria1:=categorie 
End Sub

Explication du Code : 

1. Définir les Variables

  • Les variables ws et tbl font référence à la feuille de travail et au tableau (objet ListObject), respectivement. 
  • Les critères de filtrage (comme dateDebut, dateFin et categorie) sont récupérés à partir des cellules A1, A2 et B1. 

2. Définir la Feuille et le Tableau

  • ws fait référence à la feuille de travail Feuille1 où se trouve le tableau de données. 
  • tbl représente le tableau (objet ListObject), et nous supposons qu’il est nommé Tableau1. Vous pouvez remplacer cela par le nom de votre tableau ou la référence correcte. 

3. Supprimer les Filtres Existants

  • La ligne tbl.AutoFilter.ShowAllData supprime les filtres existants pour appliquer de nouveaux critères. 

4. Appliquer le Filtre de Plage de Dates

  • Nous appliquons un filtre sur la plage de dates en utilisant la méthode AutoFilter. 
  • Field:=1 indique que nous appliquons le filtre à la première colonne (supposée contenir des dates). 
  • Criteria1:= »>= » & dateDebut filtre les dates supérieures ou égales à la date de début (de la cellule A1), et Criteria2:= »<= » & dateFin applique la fin de la plage de dates (de la cellule A2). 
  • L’opérateur xlAnd garantit que les deux critères (date de début et date de fin) sont appliqués simultanément. 

5. Appliquer le Filtre de Catégorie

  • De la même manière, un filtre est appliqué à la colonne « Catégorie » (supposée être la deuxième colonne). 
  • Criteria1:=categorie filtre les lignes où la catégorie correspond à la valeur dans la cellule B1. 

Remarques : 

  • Index des Colonnes : Le paramètre Field dans la méthode AutoFilter fait référence à l’index de la colonne (index de colonne basé sur 1). Dans l’exemple ci-dessus, la première colonne contient les dates et la deuxième contient les catégories. Ajustez ces valeurs en fonction de la disposition réelle de votre tableau. 
  • Types de Données : Assurez-vous que les types de données dans les critères de filtrage correspondent aux types des colonnes (par exemple, les dates doivent correspondre au format de date, et les textes doivent correspondre aux critères textuels). 
  • Gestion des Erreurs : Il est recommandé d’ajouter une gestion des erreurs pour vérifier que les données saisies dans les cellules de critères sont valides, afin que la macro ne plante pas. 

Cas d’Utilisation Avancé : 

Si vous souhaitez créer un filtre dynamique plus complexe (par exemple, basé sur plusieurs critères dans plusieurs colonnes ou en utilisant des plages dynamiques), vous pouvez modifier le code en ajoutant plus de conditions ou en utilisant des boîtes de dialogue pour une saisie en temps réel de l’utilisateur. 

Cette approche vous permet d’appliquer des filtres dynamiques sans avoir à ajuster manuellement les critères à chaque fois, ce qui est idéal pour l’automatisation des tâches répétitives ou l’analyse de données. 

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x