Créer un filtrage dynamique, Excel VBA

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 : 

  1. 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. 
  2. 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). 
  3. É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 : 

  1. Entrez le nom du département (ou tout autre critère de filtrage) dans la cellule G1 de votre feuille de calcul. 
  2. 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. 

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