0
(0)

Cette fonction récente dans Excel recèle quelques finesses que peu d’utilisateurs ont remarquées. Partons à leur découverte !

Rôle de la fonction

Elle permet de filtrer une matrice de données en fonction de critères. Elle renvoie un tableau dynamique (Voir l’article Formules de tableaux dynamiques, une nouvelle logique de conception).

Par exemple dans un fichier du personnelle, ne renvoyer que les femmes de la comptabilité.

Syntaxe

=FILTRE(Tableau ; Inclure [ ; Si_vide])
  • Tableau :  La matrice à filtrer (plage, tableau dynamique, constante matricielle).
  • Inclure : Une matrice booléenne dont la hauteur ou largeur est identique à la matrice de l’argument Tableau.
    Si la matrice est verticale/ligne, le filtre s'applique aux lignes, si elle est horizontale/colonne le filtre s'applique aux colonnes.
  • Si_vide : Valeur à renvoyer si le filtre ne renvoie aucune réponse (critère Inclure trop strict) sinon la fonction renverra l’erreur #CALC !.

Exemple : Classique critères ET et OU mélangés

Excel : Fonction FILTRE
Fonction FILTRE avec critères ET et OU

Objectif : Les personnes nées après le 1/1/2005 de sexe féminin ainsi que les personnes n’ayant pas d’enfants (quel que soit l’âge ou le sexe).

Cette condition écrite avec les opérateurs logique :
Naissance > 1/1/2005 ET Sexe = F OU NbEnfants = 0.

Rappel Attention en français la conjonction « et » veut parfois dire ET ou parfois OU en opérateur logique !

Exemple avec ces 2 phrases :

  • Je veux les Dijonnais et les Lyonnais.
  • Je veux les habitant de Dijon ou de Lyon.

Elles ont le même sens et correspondent à un OU logique.

Astuce : dans OU on a le U de Union donc si la condition ajoute des résultats c’est un OU (ET lui enlève des résultats).

De même le où (accent) correspond à un ET logique 🤪.

=FILTRE(A2:D7;(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0))

Tableau : A2:D7 > Prendre la ligne d’étiquettes de colonne (ligne1) ne sert à rien car elle ne sera pas sélectionnée dans le résultat du filtre.

Inclure : (B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0)

Décomposons cette matrice :

(B2:B7>"1/1/2005"*1)

Excel : Fonction FILTRE

*1 est une astuce de conversion (Voir Trucs et astuces pour convertir les types de valeurs).

(C2:C7="f")

Excel : Fonction FILTRE

La lettre f fonctionne donc ne tient pas compte de la casse (Différence Majuscule/Minuscule).

(D2:D7=0)

Excel : Fonction FILTRE

Rappel :

= VRAI + 0 =>1 donc VRAI <=> 1
= FAUX + 0 =>0 donc FAUX <=> 0

Donc  (B2:B7>"1/1/2005"*1)*(C2:C7="f") correspond à une matrice ou seules les lignes correspondantes au lignes où les 2 critères sont vérifiés en même temps sont à 1 les autres sont à 0.

Excel : Fonction FILTRE

L'argument Inclure  (B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0) est donc égale à cette matrice.

Excel : Fonction FILTRE

La fonction FILTRE de renverra que les lignes correspondantes au 1 dans le même ordre.

Remarque :

  • ET est prioritaire sur OU (comme la division sur l’addition) donc en cas de doute ajouter des parenthèses en plus.
  • Après validation, à vous d’ajouter des bordures et les intitulés de colonnes.

Filtrage en colonnes

Filtrer les colonnes pour ne garder que celles qui correspondent au critère Inclure.

On va donc utiliser une matrice horizontale/colonne pour inclure.

Exemple

Objectif : Filtrer les colonnes pour ne garder que la colonne Prénom.

Excel_Fonction_FILTRE_Base de départ
=FILTRE(A1:E7 ; A1:E1="Prénom")
=FILTRE(A1:E7 ; A3:E3="Marie")

A1:E1="Prénom" ou A3:E3="Marie" renvoie la matrice de colonne (cf les points) { FAUX . FAUX . FAUX . FAUX . VRAI }.

Remarque : =FILTRE(A1:E7 ; A3:E3=2) renvoie les colonnes et NbEnfants.

Comment filtrer les lignes mais n'avoir qu'une seule colonne ?

Pour cela on voit souvent l’utilisation d’une fonction INDEX ou FILTRE en plus.

Exemple :

=INDEX(FILTRE(A2:D7;(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0));;1)

On utilise ici une propriété peu connue de la fonction INDEX. Quand le n° de Ligne/Colonne est à 0, la fonction ne renvoie pas une valeur mais un vecteur, c’est à dire toute la Ligne/Colonne correspondante.

Mais il y a beaucoup plus simple ! Il n’a jamais été dit que l’on devait englober toute la plage dans l’argument Tableau !

=FILTRE(A2:A7;(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0))

Comment filtrer en ligne mais "piocher" les colonnes que l'on veut ?

Objectif : Renvoyer la 1ere et la 4eme colonne du tableau filtré.

Solution 1

On englobe la fonction FILTRE dans une autre fonction FILTRE avec une matrice horizontal/en colonne ({1.0.0.1}) précisant ainsi les colonnes à conserver (Voir plus haut Filtrage en colonne).

=FILTRE(FILTRE(A2:D7;(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0));{1.0.0.1})

Solution 2

Génération de la plage de 2 colonnes à filtrer via CHOISIR.

=FILTRE(CHOISIR({1.2};A2:A7;D2:D7);(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0))

Solution 3

Idem à Solution2 avec ASSEMB.H (365, >2021).

=FILTRE(ASSEMB.H(A2:A7;D2:D7);(B2:B7>"1/1/2005"*1)*(C2:C7="f")+(D2:D7=0))

Comment avoir une ligne sur deux ?

Objectif : Je veux les lignes ou n° est égale à 1, 3 et 5.

=FILTRE(A2:B7;MOD(SEQUENCE(6);2))
  • SEQUENCE fournie une matrice de 1 à 6 : {1;2;3;4;5;6}
  • MOD la modifie en {1;0;1;0;1;0}

On voit ici que la matrice Inclure peut ne pas être liée aux données du tableau tant qu’elle possède la bonne taille (j’ai pris 2 colonnes arbitrairement).
On peut remplacer directement Tableau ou Inclure par une constante matricielle (Voir Excel et les matrices (pas celles du cours de mathématiques)).

=FILTRE(A2:B7;{1;0;1;0;1;0})

Donne le même résultat !

Quelques exemples

Les naissances de novembre.

=FILTRE(B2:B7;MOIS(B2:B7)=11)

Les prénoms commençant par P (* et ? ne sont pas utilisables).

=FILTRE(E2:E7;GAUCHE(E2:E7;1)="P")

Les prénoms qui contiennent « Pi » (Pierrette, Jean-Pierre).

=FILTRE(E2:E7;ESTNUM(CHERCHE("Pi";E2:E7)))

Les prénoms de moins de 6 lettres.

=FILTRE(E2:E7;NBCAR(E2:E7)<=5)

Les prénoms dupliqués (Marie).

=FILTRE(E2:E7;NB.SI.ENS(E2:E7;E2:E7)>1)

Les prénoms uniques.

=FILTRE(E2:E7;NB.SI.ENS(E2:E7;E2:E7)=1)

Les prénoms des 3 personnes ayant le plus d’enfants (4 résultats car 3 et 4eme sont ex aequo).

=FILTRE(E2:E7;D2:D7>=GRANDE.VALEUR(D2:D7;3))

Comment filtrer un tableau avec une zone nommée unique ?

La plage A1:E7 est nommée Maplage. Pour faire référence à la 4eme colonne par exemple dans l’argument Inclure de la fonction FILTRE, on va utiliser la fonction INDEX.

Exemple : Filtrer tout le tableau MaPlage avec un NbEnfants>2 (NbEnfants est la 4eme colonne).

=FILTRE(MaPlage;INDEX(MaPlage;;4)>2)

Merci pour votre attention bienveillante.

Article intéressant ?

Cliquez sur une étoile pour noter cet article !

Note moyenne 0 / 5. Nombre de votes : 0

Aucun vote pour l'instant ! Soyez le premier à noter ce post.

Nous sommes désolés que cet article ne vous ait pas été utile !

Améliorons cet article !

Dites nous comment nous pouvons améliorer cet article ?

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *