Excel VBA – Savoir si un filtre automatique est en place

Les filtres automatiques sont une fonctionnalité puissante que propose Microsoft Excel pour restreindre l’affichage des données afin d’isoler pour les faire ressortir celles qui répondent à certains critères ou encore pour effectuer des tris.

Cette fonction permet comme son nom l’indique de filtrer automatiquement et très facilement des données sur une feuille de calcul.

Cela s’avère utile quand un tableau est constitué de milliers de lignes de données qui sont agencées comme une base de données ou chaque ligne correspond à un enregistrement.

Quand ils sont judicieusement utilisés, avec les filtres automatiques on arrive à faire ressortir les informations dont on a besoin, tout en masquant les autres sans pour autant les effacer.

Comme s’il s’agissait d’une base de données, on extrait d’une feuille Excel des informations selon les critères de son choix qu’ils soient numériques ou alphabétiques quand on manipule des données textuelles.

En quelques clics de souris, on arrive à afficher à l’écran seulement les lignes qui sont pertinentes dans un vaste ensemble de données. On peut ensuite les reprendre dans une autre feuille sans altérer les données de base.

Les filtres sont hautement paramétrables et ont été conçus pour faire ressortir des informations : tri des valeurs de la plus petite à la plus grande et inversement, tri alphabétique, tri par couleur de cellule, sélection de certaines valeurs, filtres textuels, filtres numériques, filtres personnalisés…

Pour ceux qui programment des macros avec le langage VBA, voici une petite astuce que j’ai eu du mal à trouver.

L’objectif est de déterminer si sur une feuille donnée, un filtre automatique a ou non été mis en place.

Sur une feuille Excel appelée Feuille1, je veux tout simplement savoir si un filtre automatique est en place.

Pour l’exemple, le filtre automatique est en place sur la ligne 1 de la feuille ou va être mis en place à ce niveau. Ce n’est bien entendu pas une obligation.

S’il y a déjà des filtres automatiques en place sur la feuille, je passe mon chemin en ne faisant rien du tout (la macro va alors continuer), dans le cas contraire, je les mets en place sur la ligne 1 de la feuille Feuille1.

 

' sélection de la feuille Feuille1
Sheets("Feuille1").Select

'si pas de filtres auto alors j’active les filtres auto sur la feuille Feuille1
If Not Worksheets("Feuille1").AutoFilterMode Then

'S'il n'y a pas déjà de filtres auto, je les mets en place sur la ligne 1 de la feuille
Rows("1:1").Select
Selection.AutoFilter

End If

 

Cet exemple VBA tout simple est à considérer comme une trame.

Il peut bien sûr être adapté pour répondre à d’autres situations ou encore pour gérer des classeurs qui comprennent plusieurs feuilles.