Comment filtrer des données en VBA sur Excel

Dans ce tutoriel, nous allons voir comment filtrer des données contenues dans une feuille de calcul, en utilisant une macro commande en VBA. Pour cela, nous allons utiliser l’instruction Autofilter.

 

Pour suivre cet article dans les meilleures conditions, je vous invite à télécharger le fichier en suivant le lien disponible ci-dessous :

 

Téléchargement

 

Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :

 

 

1. Présentation du cas

 

Nous allons partir d’un cas que vous devriez bien connaître si vous suivez les tutoriels de la chaîne, il s’agit en effet de la base des données des pays des quatre continents, qui nous a déjà servi de support à de nombreuses reprises.

 

Dans ce fichier, nous retrouvons ainsi la liste de tous les pays, classés par continent, et pour chacun d’entre nous y associons le nom de la capitale.

Vous pouvez télécharger le fichier de travail dans le lien disponible ci-dessus, pour réaliser les manipulations en même temps que moi.

Excel formation - Filtrer données en VBA - 01

 

2. Création du bouton et de la macro commande VBA

 

 

L’objectif de ce tutoriel va être de d’effectuer un filtre sur ces données en utilisant un bouton qui fera appel à une macro en VBA.

 

Nous allons donc commencer par créer ce bouton, et la macro correspondante. Il existe plusieurs méthodes pour créer un tel bouton, ici nous allons choisir d’insérer une simple zone de texte (Insertion > Zone de texte) :

Excel formation - Filtrer données en VBA - 02 

Puis, nous personnalisons l’apparence de ce bouton (dans le menu Format du ruban, qui n’apparaît que lorsque le bouton est sélectionné) :

Excel formation - Filtrer données en VBA - 03                                                                                                                                       

Cela étant fait, nous allons spécifier à Excel que ce bouton doit permettre de lancer une macro commande, en effectuant un clic-droit sur ce dernier, puis Affecter une macro… :

Excel formation - Filtrer données en VBA - 04

Dans la fenêtre qui apparaît à l’écran, nous donnons un nom à la macro (par exemple « filtrerLesDonnees ») :

Excel formation - Filtrer données en VBA - 05

Puis nous confirmons, non pas en appuyant sur le bouton [OK], mais sur le bouton [Nouvelle], ce qui va avoir pour effet de créer une nouvelle macro, directement insérer dans un nouveau module, avec le nom que nous lui avons donné :

Excel formation - Filtrer données en VBA - 06

 

3. La macro commande VBA

 

 

Pour pouvoir filtrer les données contenues dans notre feuille de calcul, nous allons utiliser l’instruction VBA Autofilter, qui permet de réaliser une opération équivalente à ce que permet le bouton de Filtre d’Excel (présent dans le menu Données).

 

Ici, nous allons utiliser cette instruction Autofilter de la manière suivante :

 

Expression.AutoFilter( _Field_ , _Criteria1_ )

 

Ainsi, nous allons avoir besoin de connaître trois éléments :

  • Expression : il s’agit d’un objet de type range (donc une ou plusieurs cellules), qui représente ici la première cellule du tableau. Nous verrons juste après comment instancier et définir cet objet,
  • _Field_ : il s’agit du numéro de la colonne sur laquelle nous souhaitons appliquer le filtre au sein du tableau contenant les données,
  • _Criteria1_ : il s’agit simplement du critère que nous allons appliquer pour mettre en place le filtre

 

   3.1. Le paramètre « Expression » 

 

 

Nous l’avons vu à l’instant, ce paramètre représente la première cellule de la table.

 

Nous commençons donc par créer une nouvelle variable, de type Range, à laquelle nous allons donner le nom de « premiereCellule »

Sub filtrerLesDonnees()
    ' Détermination de la première cellule du tableau
    Dim premiereCellule As Range
End Sub

Ensuite, nous allons définir quelle cellule de la feuille de calcul doit être insérer dans cette variable.

Pour cela, nous allons partir de la cellule sélectionnée par l’utilisateur juste avant de lancer la macro commande (qui est renvoyée par Excel dans la variable ActiveCell) :

Sub filtrerLesDonnees()
    ' Détermination de la première cellule du tableau
    Dim premiereCellule As Range
    Set premiereCellule = ActiveCell
    …
 

 

Sauf que nous souhaitons récupérer la première cellule du tableau, et non la cellule active.

Nous allons donc récupérer toute la plage de cellule de la zone active, en utilisant l’instruction CurrentRegion, ensuite, il va nous suffire de n’en extraire que la première cellule :

Sub filtrerLesDonnees()
    ' Détermination de la première cellule du tableau
    Dim premiereCellule As Range
    Set premiereCellule = ActiveCell.CurrentRegion.Cells(1)
    …
 

 

Attention toutefois à l’utilisation de CurrentRegion, car la région active retournée est déterminée en fonction des données contenues autour de la cellule active. Il est donc important que le tableau des données ne soit entouré d’aucune cellule (en d’autres termes, il faut laisser une ligne vide au-dessus du tableau !)

Excel formation - Filtrer données en VBA - 07

 

   3.2. Le paramètre « _Field_ »

 

 

Le second paramètre qui va nous permettre de filtrer les données est le paramètre « _Field_ ». Celui-ci correspondant au numéro de la colonne sur laquelle nous souhaitons appliquer le filtre.

 

Nous supposons ici que l’utilisateur a préalablement cliqué sur l’une des cellules de la colonne sur laquelle le filtre doit être appliqué.

Le numéro de la colonne s’obtient alors par différence entre la colonne sélectionnée, et la première colonne du tableau :

Sub filtrerLesDonnees()
    …
    ' Dénombrement de la colonne à filtrer
    Dim colonne As Integer
    colonne = ActiveCell.Column - premiereCellule.Column + 1
    …
 

 

Nous ajoutons une colonne, car la première colonne correspond à la colonne « 1 », et non « 0 ».

Excel formation - Filtrer données en VBA - 08

 

   3.3. Le paramètre « _Criteria1_ »

 

 

Enfin, le dernière paramètre permet de spécifier sur quel critère Excel doit appliquer le filtre. Il s’agit d’une simple chaîne de caractères, que nous allons demander à l’utilisateur de spécifier dans une boîte de dialogue :

 

Sub filtrerLesDonnees()
    …
    ' Récupération du filtre à effectuer
    Dim filtre As String
    filtre = InputBox("Texte à filtrer :", "Filtre", ActiveCell)
    …
 

 

Le troisième paramètre de l’instruction InputBox permet de définir un texte par défaut, nous affichons simplement la valeur de la cellule sélectionnée.

Excel formation - Filtrer données en VBA - 09

 

   3.4. Et enfin le filtre !

 

 

Nous l’avons vu à plusieurs reprises depuis le début de ce tutoriel, nous allons maintenant utiliser l’instruction Autofilter :

 

Sub filtrerLesDonnees()
    …
    ' Application du filtre
    premiereCellule.AutoFilter field:=colonne, Criteria1:=filtre
    …
 

 

L’utilisation que nous voyons ici permet de filtrer exactement sur le critère défini par l’utilisateur !

Nous pouvons modifier cette ligne pour définir si la cellule doit contenir le texte, commencer par le texte, finir par le texte, …

Sub filtrerLesDonnees()
    …
    ' Filtre exacte :
    premiereCellule.AutoFilter field:=colonne, Criteria1:=filtre
    …
    ' Filtre terminant par  :
    premiereCellule.AutoFilter field:=colonne, Criteria1:="*" & filtre
    …
    ' Filtre commençant par  :
    premiereCellule.AutoFilter field:=colonne, Criteria1:=filtre & "*"
    …
    ' Filtre contenant  :
    premiereCellule.AutoFilter field:=colonne, Criteria1:="*" & filtre & "*"
    …

Quelques exemples :

  •        Le pays fini par « sud » :

       Excel formation - Filtrer données en VBA - 10

  •        Le pays commence par « ma » :

       Excel formation - Filtrer données en VBA - 11

  •        Le pays contient « fr », à n’importe quel endroit :

       Excel formation - Filtrer données en VBA - 12

De plus, lorsque nous effectuons un second filtre sur une deuxième colonne, nous allons pouvoir constater que ceux-ci se cumulent :

Excel formation - Filtrer données en VBA - 13

Dans cet exemple, nous avions tout d’abord demandé de filtrer les lignes concernant les pays qui contiennent les deux lettres « fr », puis nous avons effectué un second filtre sur les pays du continent Europe.

Pour modifier ce comportement, il suffit d’ajouter un Autofiltre vide de tout paramètre pour désactiver tous les filtres en cours d’utilisation :

Sub filtrerLesDonnees()
    …
    ' Application du filtre
    premiereCellule.AutoFilter
    premiereCellule.AutoFilter field:=colonne, Criteria1:="*" & filtre & "*"
    …

Et voici le résultat :

Excel formation - Filtrer données en VBA - 14

 

 

 



Articles qui pourraient vous intéresser

Comment contrôler les données saisies dans un tableau sans macro VBA sur Excel

Comment transformer un tableau en 2 dimensions (double entrée) et un tableau en 1 dimension (liste) sur Excel

Comment récupérer des informations depuis internet sur Excel et sans macro VBA (et créer un comparateur de prix)

Comment créer un sommaire automatique et généré en 1 clic sur Excel

Commentaires

Il n'y a aucun commentaire...

Poster un commentaire

Pseudo
Commentaire

Contact - Plan du site - À propos - Contact

© Excel-Formation 2018 - Excel, simplement

Haut de la page

Excelformation.fr propose de nombreuses formations pratiques et gratuites sur Microsoft Excel : des cours pour apprendre à structurer et analyser les données, des tutos sur les fonctions avancées, les formules et les formules avancées d'Excel, les formules matricielles, les mise-en-formes conditionnelles, les graphiques Excel (xls, xlsx, xlsm,…). Des tutoriels pour apprendre à automatiser les tâches répétitives (via des macro-commandes en VBA) de vos classeurs Excel.