Filtre avancé VBA

Ce tutoriel vous expliquera comment utiliser la méthode Advanced Filter dans VBA

Le filtrage avancé dans Excel est très utile lorsque vous traitez de grandes quantités de données pour lesquelles vous souhaitez appliquer une variété de filtres en même temps. Il peut également être utilisé pour supprimer les doublons de vos données. Vous devez être familiarisé avec la création d'un filtre avancé dans Excel avant d'essayer de créer un filtre avancé à partir de VBA.

Considérez la feuille de travail suivante.

Vous pouvez voir en un coup d'œil qu'il existe des doublons que vous pourriez souhaiter supprimer. Le type de compte est un mélange d'épargne, de prêt à terme et de chèque.

Vous devez d'abord configurer une section de critères pour le filtre avancé. Vous pouvez le faire dans une feuille séparée.

Pour plus de commodité, j'ai nommé ma fiche technique « Base de données » et ma feuille de critères « Critères ».

Syntaxe de filtre avancée

Action Expression.AdvancedFilter, CriteriaRange, CopyToRange, Unique

  • Les Expression représente l'objet plage - et peut être défini comme une plage (par exemple, plage ("A1:A50") - ou la plage peut être affectée à une variable et cette variable peut être utilisée.
  • Les action l'argument est obligatoire et sera soit xlFilterInPlace soit xlFilterCopy
  • Les Plage de critères L'argument est l'endroit où vous obtenez les critères à partir desquels filtrer (notre feuille de critères ci-dessus). Ceci est facultatif car vous n'auriez pas besoin d'un critère si vous filtrez des valeurs uniques par exemple.
  • Les CopierDansPlage L'argument est l'endroit où vous allez placer vos résultats de filtre - vous pouvez filtrer en place ou vous pouvez faire copier votre résultat de filtre dans un autre emplacement. C'est aussi un argument optionnel.
  • Les Unique l'argument est également facultatif - Vrai consiste à filtrer uniquement sur des enregistrements uniques, Faux est de filtrer sur tous les enregistrements qui répondent aux critères - si vous omettez cela, la valeur par défaut sera Faux.

Filtrage des données en place

En utilisant les critères indiqués ci-dessus dans la feuille de critères, nous voulons trouver tous les comptes avec un type « Épargne » et « Courant ». Nous filtrons en place.

123456789 Sub CreateAdvancedFilter()Dim rngDatabase As RangeDim rngCriteria As Range'définir la base de données et les plages de critèresDéfinir rngDatabase = Sheets("Database").Range("A1:H50")Définir rngCriteria = Sheets("Criteria").Range("A1:H3")'filtre la base de données en utilisant les critèresrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteriaFin du sous-marin

Le code masquera les lignes qui ne répondent pas aux critères.

Dans la procédure VBA ci-dessus, nous n'avons pas inclus les arguments CopyToRange ou Unique.

Réinitialisation des données

Avant d'exécuter un autre filtre, nous devons effacer le filtre actuel. Cela ne fonctionnera que si vous avez filtré vos données en place.

12345 Sous ClearFilter()En cas d'erreur Reprendre ensuite'réinitialiser le filtre pour afficher toutes les donnéesActiveSheet.ShowAllDataFin du sous-marin

Filtrage des valeurs uniques

Dans la procédure ci-dessous, j'ai inclus l'argument Unique mais omis l'argument CopyToRange. Si vous laissez cet argument de côté, vous SOIT doit mettre une virgule comme espace réservé pour l'argument

123456789 Sous UniqueValuesFilter1()Dim rngDatabase As RangeDim rngCriteria As Range'définir la base de données et les plages de critèresDéfinir rngDatabase = Sheets("Database").Range("A1:H50")Définir rngCriteria = Sheets("Criteria").Range("A1:H3")'filtre la base de données en utilisant les critèresrngDatabase.AdvancedFilter xlFilterInPlace, rngCriteria,,TrueFin du sous-marin

OU vous devez utiliser des arguments nommés comme indiqué ci-dessous.

123456789 Sous UniqueValuesFilter2()Dim rngDatabase As RangeDim rngCriteria As Range'définir la base de données et les plages de critèresDéfinir rngDatabase = Sheets("Database").Range("A1:H50")Définir rngCriteria = Sheets("Criteria").Range("A1:H3")'filtre la base de données en utilisant les critèresrngDatabase.AdvancedFilter Action :=xlFilterInPlace, CriteriaRange :=rngCriteria, Unique :=TrueFin du sous-marin

Les deux exemples de code ci-dessus exécuteront le même filtre, comme indiqué ci-dessous - les données avec uniquement des valeurs uniques.

Utilisation de l'argument CopierVers

123456789 Sous-CopierVersFiltre()Dim rngDatabase As RangeDim rngCriteria As Range'définir la base de données et les plages de critèresDéfinir rngDatabase = Sheets("Database").Range("A1:H50")Définir rngCriteria = Sheets("Criteria").Range("A1:H3")'copier les données filtrées vers un autre emplacementrngDatabase.AdvancedFilter Action :=xlFilterCopy, CriteriaRange :=rngCriteria, CopyToRange :=Range("N1:U1"), Unique :=TrueFin du sous-marin

Notez que nous aurions pu omettre les noms des arguments dans la ligne de code Advanced Filter, mais l'utilisation d'arguments nommés rend le code plus facile à lire et à comprendre.

Cette ligne ci-dessous est identique à la ligne de la procédure ci-dessus.

1 rngDatabase.AdvancedFilter xlFilterCopy, rngCriteria, Range ("N1:U1"), True

Une fois le code exécuté, les données d'origine sont toujours affichées avec les données filtrées affichées dans l'emplacement de destination spécifié dans la procédure.

Supprimer les doublons des données

Nous pouvons supprimer les doublons des données en omettant l'argument Critères et en copiant les données vers un nouvel emplacement.

1234567 Sous-supprimer les doublons ()Dim rngDatabase As Range'définir la base de donnéesDéfinir rngDatabase = Sheets("Database").Range("A1:H50")'filtre la base de données dans une nouvelle plage avec unique défini sur truerngDatabase.AdvancedFilter Action :=xlFilterCopy, CopyToRange :=Range("N1:U1"), Unique :=TrueFin du sous-marin

wave wave wave wave wave