FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Comment utiliser les filtres automatiques par macro ?
- Comment appliquer une couleur sur les colonnes contenant un filtre actif ?
- Comment nommer des cellules non adjacentes issues d'un filtre automatique ?
- Comment dissocier la hiérarchie de dates dans les Filtres Excel 2007 ?
- Comment récupérer par formule le contenu de la première cellule résultant d'un filtre automatique ?
- Comment additionner les cellules d'une plage filtrée ?
- Comment compter le nombre de lignes visibles après l'application d'un filtre ?
- Comment trouver les enregistrements vides ou non vides à l'aide de filtres élaborés ?
- Comment identifier l'utilisation d'un filtre dans la feuille de calcul ?
- Comment désactiver la case "Sélectionner tout" du mode Filtrer ?
Un filtre automatique permet de masquer les lignes d'une plage de cellules ne répondant pas aux critères spécifiés. Les critères sont définis pour chaque colonne. Il ne peut y avoir qu'un seul filtre automatique dans une feuille (Dans Excel 2007, vous pouvez transformer les plages d'une même feuille en tableau afin d'utiliser plusieurs filtres sur la page). Le filtre automatique s'applique à une plage de cellules dont la première ligne contient les entêtes (champs).
Pour créer un filtre automatique, utilisez la méthode AutoFilter :
Range
(
"A1"
).AutoFilter
Toutes les cellules voisines à A1 vont être intégrées dans le filtre.
Si le filtre automatique existait déjà, celui-ci sera désactivé. Pour préalablement vérifier la présence du filtre, utilisez AutoFilterMode qui renvoie True si le filtre existe :
With
Worksheets
(
"Feuil1"
)
If
Not
.AutoFilterMode
Then
.Range
(
"A1"
).AutoFilter
End
With
Chaque champ (colonne) peut recevoir les critères de filtre que vous aurez paramétré : Vous disposez de critères de condition (Criteria1 et Criteria2) pour indiquer les données à vérifier et des opérateurs (xlAnd, xlOr) pour combiner ces conditions. L'argument Field correspond au numéro de colonne dans la plage du filtre automatique.
Range
(
"A1"
).AutoFilter
Field:=
1
, Criteria1:=
"Ville01"
Range
(
"A1"
).AutoFilter
Field:=
1
, Criteria1:=
"Ville01"
, Operator:=
xlOr, Criteria2:=
"Ville02"
'Les Opérateurs de comparaison: ", <, >=, <>"
'
'Utilisez le point à la place de la virgule pour définir les valeurs décimales.
'
Range
(
"A1"
).AutoFilter
Field:=
2
, Criteria1:=
"<>19.6"
'Utilisez le signe générique astérisque (*) pour indiquer que le critère 'contient'.
'(le filtre est insensible à la casse)
Range
(
"A1"
).AutoFilter
Field:=
1
, Criteria1:=
"*dvp*"
Pour enlever tous les filtres actifs, utilisez :
With
Worksheets
(
"Feuil1"
)
If
.FilterMode
=
True
Then
.ShowAllData
End
With
Pour supprimer le filtre automatique :
Worksheets
(
"Feuil1"
).AutoFilterMode
=
False
Sub
AppliqueCouleur_ColonneFiltree
(
)
Dim
x As
Integer
Dim
Ws As
Worksheet
Set
Ws =
Worksheets
(
"Feuil1"
)
With
Ws
'Enlève les couleurs initiales
.Cells.Interior.ColorIndex
=
xlNone
'Vérifie si la feuille est en mode filtre automatique
If
.FilterMode
=
True
Then
'boucle sur les filtres de la feuille
With
.AutoFilter.Filters
For
x =
1
To
.Count
'Colorie la colonne en jaune si le filtre est actif
If
.Item
(
x).On
Then
Ws.Columns
(
x).Interior.ColorIndex
=
6
Next
End
With
End
If
End
With
End
Sub
Dans cet exemple, le filtre automatique est dans la feuille nommée Feuil1.
Sub
NommerZoneFiltree
(
)
ActiveWorkbook.Names.Add
Name:=
"NomPlage_01"
, _
RefersTo:=
"=Feuil1!"
&
_
Feuil1.AutoFilter.Range.SpecialCells
(
xlCellTypeVisible).Address
End
Sub
Dans Excel 2007, l'application est capable d'analyser automatiquement les dates par jour, semaine, mois, semestre ou année ce qui facilite les filtres sur ce type de données.
Pour désactiver cette option et dissocier cette hiérarchie (transformation en liste non hiérarchique):
Cliquez sur le Bouton Office.
Cliquez sur le bouton Options Excel.
Sélectionnez le menu Options avancées.
Dans la partie Afficher les options pour ce classeur,
Choisissez le classeur.
Décochez l'option Grouper les dates dans le menu Filtre automatique.
Cliquez sur le bouton OK pour valider.
Exemple pour un filtre placé dans la colonne A.
Formule à valider par Ctrl+Maj+Entrée.
=INDEX
(A1
:A100
;MIN
(SI
(SOUS.TOTAL
(3
;DECALER
(A2
;LIGNE
(A1
:A100
);));LIGNE
(A3
:A100
)));1
)
Cet exemple additionne les cellules visibles de la colonne B.
MsgBox
Application.WorksheetFunction.Subtotal
(
9
, Columns
(
2
))
3 solutions :
MsgBox
Range
(
"A1:A"
&
Range
(
"A65536"
).End
(
xlUp).Row
).SpecialCells
(
xlVisible).Count
MsgBox
Feuil1.AutoFilter.Range.Columns
(
1
).SpecialCells
(
xlCellTypeVisible).Cells.Count
MsgBox
Evaluate
(
"=subtotal(3,A:A)"
)
Pour filtrer les champs dont le contenu est vide, tapez dans la zone de critère
=
"="
Pour filtrer les enregistrements non vides: tapez
=
""
Il n'existe pas d'évènement spécifique pour identifier l'utilisation d'un filtre.
Pour contourner le problème, vous pouvez par exemple insérer la fonction suivante dans une
cellule quelconque de la feuille :
=SOUS.TOTAL
(3
;A
:A
)
Et utilisez l'évènement Calculate dans le module objet de la feuille contenant le filtre.
La procédure sera déclenchée à chaque recalcul.
Private
Sub
Worksheet_Calculate
(
)
AppliqueCouleur_ColonneFiltree
End
Sub
Sub
AppliqueCouleur_ColonneFiltree
(
)
Dim
x As
Integer
Dim
Ws As
Worksheet
Set
Ws =
Worksheets
(
"Feuil1"
)
With
Ws
'Enlève les couleurs initiales
.Cells.Interior.ColorIndex
=
xlNone
'Vérifie si la feuille est en mode filtre automatique
If
.FilterMode
=
True
Then
'boucle sur les filtres de la feuille
With
.AutoFilter.Filters
For
x =
1
To
.Count
'Colorie la colonne en jaune si le filtre est actif
If
.Item
(
x).On
Then
Ws.Columns
(
x).Interior.ColorIndex
=
6
Next
End
With
End
If
End
With
End
Sub
Une autre solution proposée par Jacques Boisgontier :
Appliquer une Mise en Forme Conditionnelle sur les en-têtes de filtre.
Sélectionnez les titres de champ dans la première ligne A1 à Ax
Menu Format
Mise en forme conditionnelle
Appliquez "La formule est" =ChampActif(A1
)
Et dans un module standard ajoutez la fonction :
Function
ChampActif
(
c)
Application.Volatile
ChampActif =
Sheets
(
Application.Caller.Parent.Name
).AutoFilter.Filters.Item
_
(
c.Column
-
Sheets
(
Application.Caller.Parent.Name
).Range
(
"_FilterDataBase"
).Column
+
1
).On
End
Function
Une troisième solution proposée par Tirex28 :
Téléchargez le classeur démo qui contient
un module de classe pour identifier l'utilisation du filtre dans la feuille de calcul.
Il n'est pas possible directement mais vous pouvez identifier l'affichage de toutes les données depuis l'évènement Calculate, et ensuite annuler la dernière opération grâce à la méthode Undo.
Procédure à ajouter dans le module objet de la feuille contenant le filtre :
Private
Sub
Worksheet_Calculate
(
)
If
Evaluate
(
"=subtotal(3,A:A)"
) =
Range
(
"A1"
).End
(
xlDown).Row
Then
_
Application.Undo
End
Sub