SI, RECHERCHEV et les fonctions conditionnelles
Ce que ce chapitre apporte 6 points
- Écrire une fonction SI, empiler plusieurs SI dans le bon ordre de seuils, et savoir quand SI.CONDITIONS se lit mieux.
- Compter et additionner sous une condition avec NB.SI et SOMME.SI, puis sous plusieurs avec NB.SI.ENS, SOMME.SI.ENS et MOYENNE.SI.ENS.
- Lire un RECHERCHEV et déjouer ses quatre pièges, puis écrire la même recherche avec RECHERCHEX, ou avec INDEX et EQUIV.
- Intercepter une erreur avec SIERREUR, et reconnaître les cas où il ne faut pas le faire.
- Combiner plusieurs conditions avec ET et OU, et distinguer une règle d'une moyenne.
- Obtenir une liste sans doublons, filtrée ou triée, avec UNIQUE, FILTRE et TRI, et la réutiliser par D2#.
La fonction SI
=SI(test ; valeur_si_vrai ; valeur_si_faux)
Le test est une comparaison qui rend vrai ou faux : A1>10, B2="Oui", C3<>0. Les deux autres arguments sont ce que la cellule affichera dans chaque cas.
Le texte s'écrit entre guillemets ; un nombre ou une référence s'écrivent tels quels.
| Opérateur | Sens |
|---|---|
= | égal |
<> | différent |
> < | strictement supérieur, inférieur |
>= <= | supérieur ou égal, inférieur ou égal |
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Élève | Note | Résultat | Mention |
| 2 | Amina | 14 | Reçu | B |
| 3 | Bastien | 8 | Ajourné | |
| 4 | Chloé | 17 | Reçu | TB |
| 5 | Dorian | 11 | Reçu | |
| 6 | Elias | 9,5 | Ajourné | |
| 7 |
D2 contient la formule =SI(B2>=16;"TB";SI(B2>=14;"B";SI(B2>=12;"AB";""))), et affiche B. Les cellules qu'elle utilise sont teintées.
SI sans s'y perdreUn SI imbriqué se place dans l'argument « sinon » du précédent, et l'on obtient une cascade de seuils.
La règle qui évite toutes les erreurs : ordonner les seuils du plus exigeant au moins exigeant. Une note de 17 est aussi supérieure à 14 et à 12 ; si l'on teste 12 en premier, tout le monde a la mention AB et les deux autres tests ne servent à rien.
Écrire "" pour l'absence de mention affiche une case vide, ce qui se lit mieux qu'un mot inutile.
Au-delà de trois ou quatre niveaux, l'imbrication devient illisible. Deux sorties existent : SI.CONDITIONS, qui aligne les tests au lieu de les emboîter, et surtout une table de correspondance lue par RECHERCHEX, que la suite du chapitre présente.
SI.CONDITIONS, la cascade mise à plat
=SI.CONDITIONS(test1 ; valeur1 ; test2 ; valeur2 ; … )
Les couples « test ; valeur » se lisent dans l'ordre, et le premier test vrai l'emporte. Il n'y a plus de parenthèses à fermer en fin de formule, et chaque seuil se lit à côté de ce qu'il donne.
La fonction n'a pas de « sinon ». On le lui donne en dernier couple, avec un test toujours vrai : VRAI ; "Bon".
Un service maintenance classe ses machines d'après la vitesse de vibration mesurée sur les paliers, en millimètres par seconde, avec quatre classes fixées par l'atelier. La même règle est écrite deux fois.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Machine | Vibration (mm/s) | SI imbriqués | SI.CONDITIONS |
| 2 | Tour 1 | 1,2 | Bon | Bon |
| 3 | Tour 2 | 3,1 | Acceptable | Acceptable |
| 4 | Fraiseuse | 6,8 | À surveiller | À surveiller |
| 5 | Presse | 12,5 | Arrêt | Arrêt |
| 6 | Compresseur | 0,9 | Bon | #N/A |
| 7 |
D6 contient la formule =SI.CONDITIONS(B6>=11,2;"Arrêt";B6>=4,5;"À surveiller";B6>=1,8;"Acceptable"), et affiche #N/A. Les cellules qu'elle utilise sont teintées.
SI.CONDITIONS sans dernier couple rend #N/ASI finit toujours par un « sinon » : la syntaxe l'impose. SI.CONDITIONS, elle, s'arrête quand les couples sont épuisés, et si aucun test n'a été vrai elle rend #N/A.L'erreur n'apparaît que sur les lignes qui tombent hors de tous les tests, ce qui peut n'arriver qu'un mois sur dix. D'où le réflexe : terminer par
VRAI ; …, même quand on croit que tous les cas sont couverts.L'ordre reste celui de la cascade, du seuil le plus exigeant au moins exigeant, puisque le premier test vrai l'emporte.
SI.CONDITIONS rend une cascade lisible, mais les seuils restent écrits dans chaque formule : pour les changer, il faut retoucher toute la colonne. La vraie solution, quand la règle est un barème, est de poser les seuils dans une petite table et de les y rechercher, ce que la section « Retrouver une donnée » montre sur ces mêmes vibrations.
Une cousine sert quand on compare à des valeurs exactes plutôt qu'à des seuils : =SI.MULTIPLE(C2;"U";"Usinage";"M";"Montage";"autre atelier") rend « Usinage » si C2 vaut « U », « Montage » si elle vaut « M », et le dernier argument, laissé seul, joue le rôle du « sinon ».
1.Dans =SI(B2>=10;"Reçu";"Ajourné"), à quoi servent les guillemets ?
2.Dans une cascade de SI sur des seuils, il faut tester…
3.Une colonne de SI.CONDITIONS affiche #N/A sur quelques lignes seulement. La cause la plus probable est…
Compter et additionner sous condition
=NB.SI(plage ; critère) compte les cellules de la plage qui satisfont le critère.
=SOMME.SI(plage_de_test ; critère ; plage_à_additionner) additionne les valeurs de la troisième plage, pour les lignes où la première satisfait le critère.
Le critère s'écrit entre guillemets quand il contient un opérateur : ">10", "<>0", "informatique".
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Article | Catégorie | Prix | Stock |
| 2 | Clavier | informatique | 25,9 | 12 |
| 3 | Souris | informatique | 12,5 | 40 |
| 4 | Écran | informatique | 149 | 5 |
| 5 | Chaise | mobilier | 89 | 8 |
| 6 | Bureau | mobilier | 249 | 3 |
| 7 | Lampe | mobilier | 34,9 | 22 |
| 8 | Articles informatiques | 3 | Valeur du stock info | 187,4 |
| 9 | Articles à moins de 50 | 3 | Stock total du mobilier | 33 |
| 10 |
B8 contient la formule =NB.SI(B2:B7;"informatique"), et affiche 3. Les cellules qu'elle utilise sont teintées.
=NB.SI(B2:B7;"informatiques"), avec un « s » de trop, rend 0. Pas #VALEUR!, pas d'avertissement : zéro, comme s'il n'y avait effectivement aucun article dans cette catégorie.C'est la même défaillance silencieuse que le total faux du chapitre 2, et elle a la même parade : vérifier que la somme des comptages fait bien le total. Si
NB.SI sur chaque catégorie ne redonne pas NBVAL de la colonne entière, une catégorie manque à l'appel.Un espace en fin de saisie produit exactement le même effet, et il est invisible. La fonction
SUPPRESPACE existe pour cela.
Plusieurs critères à la fois
=NB.SI.ENS(plage1 ; critère1 ; plage2 ; critère2 ; … ) compte les lignes qui satisfont tous les critères à la fois.
=SOMME.SI.ENS(plage_à_additionner ; plage1 ; critère1 ; plage2 ; critère2 ; … ) additionne, sur ces mêmes lignes, les valeurs de la plage donnée en premier.
=MOYENNE.SI.ENS(plage_à_moyenner ; plage1 ; critère1 ; … ) suit le même ordre que SOMME.SI.ENS.
Toutes les plages doivent avoir la même hauteur. Les critères se relient par un ET : une ligne n'est retenue que si elle passe chacun d'eux.
Le journal de maintenance d'un atelier recense ses interventions. Les deux critères sont posés dans des cellules plutôt qu'écrits dans les formules, ce qui permet de changer de question sans toucher à aucune formule.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Machine | Type | Durée (h) | Coût |
| 2 | Tour 1 | curative | 3 | 420 |
| 3 | Tour 1 | préventive | 1,5 | 180 |
| 4 | Fraiseuse | curative | 5 | 760 |
| 5 | Tour 1 | curative | 2 | 310 |
| 6 | Presse | préventive | 2 | 240 |
| 7 | Fraiseuse | préventive | 1 | 120 |
| 8 | Presse | curative | 4 | 650 |
| 9 | Tour 1 | préventive | 1 | 120 |
| 10 | ||||
| 11 | Machine choisie | Tour 1 | ||
| 12 | Type choisi | curative | ||
| 13 | Interventions | 2 | ||
| 14 | Coût total | 730 | ||
| 15 | Durée moyenne (h) | 2,5 | ||
| 16 | Ce type, plus de 3 h, toutes machines | 2 | ||
| 17 |
B14 contient la formule =SOMME.SI.ENS(D2:D9;A2:A9;B11;B2:B9;B12), et affiche 730. Les cellules qu'elle utilise sont teintées.
SOMME.SI la met à la fin : =SOMME.SI(B2:B9;"curative";D2:D9). SOMME.SI.ENS la met au début : =SOMME.SI.ENS(D2:D9;B2:B9;"curative"). C'est ce qui permet d'ajouter autant de couples « plage ; critère » qu'on veut derrière, mais c'est un piège pour qui passe de l'une à l'autre en ajoutant simplement un critère au bout.Se tromper d'ordre donne le plus souvent une formule refusée ou une erreur, et l'on s'en aperçoit. Le cas sournois est celui où la plage mise en tête est une autre colonne de nombres de la même hauteur : la formule additionne alors des heures au lieu d'euros, et le résultat a l'air juste.
Le plus simple est d'écrire toujours
SOMME.SI.ENS, même pour un seul critère : un seul ordre à retenir, et la formule est prête à recevoir un deuxième critère.
NB.SI.ENS ne sait faire que le ET. Pour un OU entre deux valeurs d'une même colonne (les interventions sur le Tour 1 ou sur la Presse), on additionne deux comptes : =NB.SI(A2:A9;"Tour 1")+NB.SI(A2:A9;"Presse"). Une même ligne ne pouvant pas porter deux machines, rien n'est compté deux fois.
1.=NB.SI(B2:B50;"informatiques") avec un « s » de trop rend…
2.Où se place la plage à additionner dans SOMME.SI.ENS ?
3.=NB.SI.ENS(A2:A9;"Tour 1";B2:B9;"curative") compte les lignes…
Retrouver une donnée
=RECHERCHEV(valeur_cherchée ; table ; numéro_de_colonne ; FAUX)
Le tableur cherche la valeur dans la première colonne de la table, puis rend ce qu'il trouve dans la colonne dont on donne le numéro, compté à partir de la première colonne de la table.
Le dernier argument, FAUX, demande une correspondance exacte. C'est presque toujours celui qu'on veut.
RECHERCHEV a une remplaçante, présentée juste après. Elle reste pourtant à connaître : elle figure dans presque tous les classeurs écrits avant elle, et il faut savoir la lire et la corriger.
Ce que cette fonction réalise porte un nom ailleurs : c'est une jointure, l'opération qui relie deux tables par une valeur commune. Le chapitre sur les requêtes SQL l'écrit en une clause, sans numéro de colonne à compter ni plage à figer, et c'est l'un des moments où le tableur montre sa limite : ici la table cherchée doit commencer par la colonne de recherche, et le numéro se décale dès qu'une colonne est insérée.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Code | Désignation | Prix | ||
| 2 | CLA | Clavier | 25,9 | ||
| 3 | SOU | Souris | 12,5 | ||
| 4 | ECR | Écran 24 pouces | 149 | ||
| 5 | CAS | Casque | 79,9 | ||
| 6 | |||||
| 7 | Commande | Désignation | Prix unitaire | Quantité | Total |
| 8 | SOU | Souris | 12,5 | 4 | 50 |
| 9 | ECR | Écran 24 pouces | 149 | 2 | 298 |
| 10 | XXX | #N/A | #N/A | 1 | #N/A |
| 11 |
B8 contient la formule =RECHERCHEV(A8;$A$2:$C$5;2;FAUX), et affiche Souris. Les cellules qu'elle utilise sont teintées.
RECHERCHEVRECHERCHEX ou à INDEX et EQUIV, qui n'ont pas cette contrainte.Le numéro de colonne se compte dans la table, pas dans la feuille. Sur une table qui commence en colonne A, la colonne 2 est B ; sur une table qui commence en colonne D, la colonne 2 est E.
La table doit être verrouillée avec des
$. Sans eux, la recopie vers le bas fait glisser la table et l'on cherche dans une plage qui rétrécit ligne après ligne, ce qui produit des #N/A qui apparaissent à mi-parcours.Le quatrième argument est
FAUX. Omis, il vaut VRAI, ce qui déclenche une recherche approchée : la fonction rend alors la valeur immédiatement inférieure, ce qui donne des résultats faux mais plausibles sur une table non triée. C'est le plus dangereux des quatre.
RECHERCHEX, la recherche d'aujourd'hui
=RECHERCHEX(valeur_cherchée ; colonne_de_recherche ; colonne_à_renvoyer ; [si_introuvable])
On désigne deux colonnes au lieu d'une table et d'un numéro : celle où chercher, et celle d'où tirer la réponse. Elles doivent avoir la même hauteur, et rien n'oblige la seconde à être à droite de la première.
La recherche est exacte par défaut. Le quatrième argument, facultatif, est ce que la formule affiche quand la valeur est introuvable.
RECHERCHEX existe dans Excel 2021, Microsoft 365 et Excel en ligne, pas dans Excel 2019 ni dans les versions antérieures, qui ne savent pas la calculer. Il en va de même des formules qui débordent, présentées à la fin du chapitre.
Le même catalogue, cette fois avec la désignation à gauche du code, comme on le trouve souvent dans un fichier fourni par quelqu'un d'autre. RECHERCHEV ne pourrait pas y retrouver la désignation sans réorganiser la table.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Désignation | Code | Prix | ||
| 2 | Clavier | CLA | 25,9 | ||
| 3 | Souris | SOU | 12,5 | ||
| 4 | Écran 24 pouces | ECR | 149 | ||
| 5 | Casque | CAS | 79,9 | ||
| 6 | |||||
| 7 | Commande | Désignation | Prix unitaire | Quantité | Total |
| 8 | SOU | Souris | 12,5 | 4 | 50 |
| 9 | ECR | Écran 24 pouces | 149 | 2 | 298 |
| 10 | XXX | code inconnu | #N/A | 1 | #N/A |
| 11 |
B8 contient la formule =RECHERCHEX(A8;$B$2:$B$5;$A$2:$A$5;"code inconnu"), et affiche Souris. Les cellules qu'elle utilise sont teintées.
Ce que l'on gagne tient en quatre points, qui répondent un à un aux pièges de RECHERCHEV.
- La recherche à gauche : les deux colonnes sont désignées séparément, dans n'importe quel ordre.
- Plus de numéro de colonne : insérer une colonne dans le catalogue décale les références, et la formule continue de viser la bonne colonne. Le numéro de
RECHERCHEV, lui, reste 3 quand la colonne des prix devient la quatrième. - La recherche exacte par défaut : le quatrième argument de
RECHERCHEV, oublié, rendait du plausible ; il n'y a plus rien à oublier. - Le cas introuvable prévu dans la formule, sans
SIERREURautour.
Reste le troisième piège, qui ne dépend pas de la fonction : les colonnes doivent être verrouillées avant la recopie, exactement comme la table de RECHERCHEV.
La figure le montre aussi : le message de remplacement se choisit colonne par colonne. Un texte lisible convient à la désignation, qu'un humain lit ; il ne convient pas au prix, qui entre dans un calcul, et que l'on laisse en erreur pour que l'erreur arrête le total.
Les tranches, sans cascade ni table triée
Le cinquième argument de RECHERCHEX règle le mode de correspondance. Avec -1, la fonction prend la valeur exacte, ou à défaut la plus grande valeur inférieure : c'est la recherche par tranches. On y retrouve les vibrations de tout à l'heure, dont les seuils quittent les formules pour une petite table.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | À partir de (mm/s) | Classe | Machine | Vibration (mm/s) | Classe | |
| 2 | 0 | Bon | Tour 1 | 1,2 | Bon | |
| 3 | 1,8 | Acceptable | Tour 2 | 3,1 | Acceptable | |
| 4 | 4,5 | À surveiller | Fraiseuse | 6,8 | À surveiller | |
| 5 | 11,2 | Arrêt | Presse | 12,5 | Arrêt | |
| 6 | Perceuse | 1,8 | Acceptable | |||
| 7 |
F6 contient la formule =RECHERCHEX(E6;$A$2:$A$5;$B$2:$B$5;;-1), et affiche Acceptable. Les cellules qu'elle utilise sont teintées.
Le quatrième argument est laissé vide (;;-1) : il n'y a rien à prévoir pour une valeur introuvable, puisque toute vibration positive tombe dans une tranche. Et contrairement à la recherche approchée de RECHERCHEV, la table n'a pas besoin d'être triée : la fonction la parcourt entièrement.
INDEX et EQUIV, pour les versions qui n'ont pas RECHERCHEX
=EQUIV(valeur ; liste ; 0) rend la position de la valeur dans la liste : 3 si elle est à la troisième place. Le 0 demande une correspondance exacte, et joue le rôle du FAUX de RECHERCHEV.
=INDEX(plage ; ligne ; colonne) rend la valeur qui se trouve à cette position dans la plage.
Réunies, =INDEX(colonne_à_renvoyer ; EQUIV(valeur ; colonne_de_recherche ; 0)) font exactement ce que fait RECHERCHEX, et fonctionnent dans toutes les versions.
Le couple a un usage que RECHERCHEX seul n'a pas : la double entrée. Une grille de tarifs de découpe laser, en euros par mètre, dépend de la matière (en ligne) et de l'épaisseur (en colonne). Deux EQUIV trouvent la ligne et la colonne, INDEX lit la case à leur croisement.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Matière / épaisseur (mm) | 2 | 4 | 6 | 8 |
| 2 | Acier | 1,2 | 1,9 | 2,8 | 3,9 |
| 3 | Inox | 1,8 | 2,9 | 4,3 | 6,1 |
| 4 | Aluminium | 1,5 | 2,4 | 3,6 | 5,2 |
| 5 | |||||
| 6 | Matière | Inox | |||
| 7 | Épaisseur (mm) | 6 | |||
| 8 | Ligne trouvée (EQUIV) | 2 | |||
| 9 | Colonne trouvée (EQUIV) | 3 | |||
| 10 | Prix au mètre (INDEX) | 4,3 | |||
| 11 | En une seule formule | 4,3 | |||
| 12 |
B10 contient la formule =INDEX(B2:E4;B8;B9), et affiche 4,3. Les cellules qu'elle utilise sont teintées.
Les deux lignes intermédiaires ne servent qu'à comprendre : dans un vrai classeur, on écrit directement la formule de la dernière ligne. Mais quand une double recherche rend un résultat douteux, les décomposer ainsi montre tout de suite laquelle des deux positions est fausse.
0, EQUIV redevient approchéEQUIV vaut 1 quand on l'omet, ce qui demande une recherche approchée sur une liste supposée triée. C'est le même piège que le FAUX oublié de RECHERCHEV, et il produit le même genre de résultat : plausible et faux. On écrit donc toujours EQUIV(… ; … ; 0), sauf recherche par tranches voulue.
1.Un RECHERCHEV recopié donne des #N/A à partir du milieu du tableau. La cause est…
2.Omettre le quatrième argument de RECHERCHEV déclenche…
3.Quel avantage RECHERCHEX n'a-t-il pas sur RECHERCHEV ?
4.Dans =INDEX(A2:A5;EQUIV(F2;C2:C5;0)), que rend EQUIV ?
Intercepter les erreurs
=SIERREUR(calcul ; valeur_de_remplacement) rend le résultat du calcul, sauf s'il produit une erreur, auquel cas il rend la valeur de remplacement.
| A | B | C | |
|---|---|---|---|
| 1 | Code | Sans SIERREUR | Avec SIERREUR |
| 2 | CLA | Clavier | Clavier |
| 3 | XXX | #N/A | code inconnu |
| 4 | |||
| 5 | Catalogue | ||
| 6 | CLA | Clavier | |
| 7 | SOU | Souris | |
| 8 | ECR | Écran | |
| 9 |
C3 contient la formule =SIERREUR(RECHERCHEV(A3;$A$6:$B$8;2;FAUX);"code inconnu"), et affiche code inconnu. Les cellules qu'elle utilise sont teintées.
SIERREUR masque le problème au lieu de le résoudreSIERREUR ne la corrige pas : cela cache le message. Le code introuvable reste introuvable, et la ligne de commande reste fausse ; elle est simplement plus jolie.Deux usages sont légitimes. Éviter un
#DIV/0! quand un dénominateur vide est normal en début de mois. Afficher un message compréhensible dans un fichier destiné à quelqu'un d'autre, à condition que ce message dise quoi faire.Un usage ne l'est jamais : mettre
SIERREUR partout par principe, ce qui revient à débrancher le seul système d'alerte du tableur.Le bon réflexe est inverse : quand une erreur apparaît, chercher pourquoi, et n'employer
SIERREUR qu'une fois la cause comprise et jugée normale.
SIERREUR rattrape toutes les erreurs, y compris celles qu'on voudrait voir : une faute de frappe dans un nom de fonction, une division par une case vide qui ne devrait pas l'être. Deux parades plus étroites existent pour le seul cas d'une recherche infructueuse. Le quatrième argument de RECHERCHEX, vu plus haut. Et =SI.NON.DISP(calcul ; valeur), qui s'écrit comme SIERREUR mais ne remplace que #N/A, l'erreur des recherches, et laisse passer toutes les autres.
1.SIERREUR sert à…
2.Qu'est-ce qui distingue SI.NON.DISP de SIERREUR ?
Combiner des conditions
ET exige que toutes les conditions soient vraies, OU qu'au moins une le soit. Les deux s'emploient à l'intérieur d'un SI.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Fournisseur | Qualité | Délai | Décision |
| 2 | Alpha | 14 | 11 | Retenu |
| 3 | Beta | 16 | 7 | Écarté |
| 4 | Gamma | 9 | 15 | Écarté |
| 5 | Delta | 12 | 12 | Retenu |
| 6 | Retenus | 2 | Qualité moyenne des retenus | 13 |
| 7 |
D3 contient la formule =SI(ET(B3>=10;C3>=10);"Retenu";"Écarté"), et affiche Écarté. Les cellules qu'elle utilise sont teintées.
Le même ET se cache dans NB.SI.ENS et SOMME.SI.ENS : leurs critères doivent tous être vérifiés. Compter les fournisseurs retenus s'écrirait donc aussi, sans colonne de décision, =NB.SI.ENS(B2:B5;">=10";C2:C5;">=10"). La colonne D reste pourtant la meilleure solution quand la décision doit se lire ligne par ligne.
Les formules qui débordent
Toutes les formules vues jusqu'ici rendent une valeur, dans une cellule. Certaines fonctions rendent une liste entière : les valeurs distinctes d'une colonne, les lignes qui passent un filtre, un tableau trié. La formule s'écrit dans une seule cellule, et son résultat déborde sur les cellules voisines, vers le bas et vers la droite, autant qu'il le faut.
D2#=UNIQUE(plage) rend chaque valeur de la plage une seule fois, dans l'ordre où elle apparaît.
=FILTRE(plage ; condition ; si_vide) rend les lignes de la plage pour lesquelles la condition est vraie. La condition porte sur une colonne entière, comme B2:B9<C2:C9, et le troisième argument est ce qu'on affiche si aucune ligne ne passe.
=TRI(plage ; numéro_de_colonne ; ordre) rend la plage triée sur l'une de ses colonnes, 1 pour l'ordre croissant et -1 pour l'ordre décroissant. Les lignes restent entières.
Si la formule est en D2, D2# désigne toute la zone qu'elle a remplie, quelle que soit sa taille du moment.
Ces fonctions existent dans les mêmes versions que RECHERCHEX. Leur force est de suivre les données : une machine de plus dans le journal, et la liste s'allonge d'une ligne, sans rien recopier.
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Machine | Arrêt (h) | Machine | Arrêts | Heures | |
| 2 | Tour 1 | 2 | Compresseur | 1 | 6 | |
| 3 | Presse | 1,5 | Fraiseuse | 2 | 5,5 | |
| 4 | Fraiseuse | 3 | Presse | 3 | 6,5 | |
| 5 | Tour 1 | 0,5 | Tour 1 | 4 | 5 | |
| 6 | Presse | 4 | ||||
| 7 | Tour 1 | 1 | ||||
| 8 | Fraiseuse | 2,5 | ||||
| 9 | Presse | 1 | ||||
| 10 | Tour 1 | 1,5 | ||||
| 11 | Compresseur | 6 | ||||
| 12 |
D2 contient la formule =TRI(UNIQUE(A2:A11)), qui rend plusieurs valeurs : elles débordent sur la zone entourée de pointillés.
Choisir une cellule de la zone l'entoure de pointillés. Seule la première cellule contient la formule ; les autres affichent son résultat, mais on ne peut pas les modifier une à une, et effacer la première efface toute la zone.
Le couple =UNIQUE(…) puis =NB.SI(… ; D2#) est le moyen le plus rapide d'obtenir un tableau de comptes : la liste des catégories, et en face le nombre de lignes de chacune. NB.SI reçoit toute la zone D2# comme critère, et rend un compte par valeur, qui déborde à son tour. Le tableau croisé dynamique du chapitre sur les graphiques fait la même chose avec plus de réglages ; celui-ci se recalcule seul à chaque saisie.
#PROPAGATION! : la place est prise#PROPAGATION!.La parade est de réserver la place : ne rien écrire sous une formule qui déborde, et prévoir que la liste peut s'allonger. Un total placé juste sous un
UNIQUE finira par bloquer la liste le jour où une nouvelle valeur apparaîtra.Pour réutiliser le résultat, on écrit
D2# plutôt que D2:D5 : la plage écrite en dur ne suivrait pas la liste quand elle s'allonge.
FILTRE et TRI travaillent sur des lignes entières. Un magasin de pièces détachées compare son stock au seuil de réapprovisionnement de chaque article.
| A | B | C | D | E | F | G | H | I | |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Article | Stock | Seuil | Écart | À commander | Stock | Seuil | Écart | |
| 2 | Roulement 6204 | 12 | 20 | -8 | Roulement 6204 | 12 | 20 | -8 | |
| 3 | Courroie A42 | 8 | 5 | 3 | Filtre à huile | 3 | 10 | -7 | |
| 4 | Filtre à huile | 3 | 10 | -7 | Fusible 10 A | 19 | 25 | -6 | |
| 5 | Joint torique | 150 | 100 | 50 | |||||
| 6 | Fusible 10 A | 19 | 25 | -6 | |||||
| 7 | Graisse (kg) | 6 | 4 | 2 | |||||
| 8 | Plaquette carbure | 40 | 30 | 10 | |||||
| 9 | Huile de coupe (L) | 25 | 20 | 5 | |||||
| 10 | |||||||||
| 11 | Du plus en retard au plus fourni | ||||||||
| 12 | Roulement 6204 | 12 | 20 | -8 | |||||
| 13 | Filtre à huile | 3 | 10 | -7 | |||||
| 14 | Fusible 10 A | 19 | 25 | -6 | |||||
| 15 | Graisse (kg) | 6 | 4 | 2 | |||||
| 16 | Courroie A42 | 8 | 5 | 3 | |||||
| 17 | Huile de coupe (L) | 25 | 20 | 5 | |||||
| 18 | Plaquette carbure | 40 | 30 | 10 | |||||
| 19 | Joint torique | 150 | 100 | 50 | |||||
| 20 |
F2 contient la formule =FILTRE(A2:D9;B2:B9<C2:C9;"rien à commander"), qui rend plusieurs valeurs : elles débordent sur la zone entourée de pointillés.
Sans son troisième argument, un FILTRE qui ne garde aucune ligne rend l'erreur #CALC! : prévoir ce message est le même geste que le quatrième argument de RECHERCHEX.
1.Un =UNIQUE(A2:A40) placé en D2 affiche #PROPAGATION!. Que faire ?
2.Pourquoi écrire =NB.SI(A2:A40;D2#) plutôt que =NB.SI(A2:A40;D2:D6) ?
Mettre en pratique
Cinq résultats sur la même colonne de notes : 14, 8, 17, 11 et 15. Les quatre premiers font travailler les fonctions conditionnelles, le dernier une recherche suivie d'un calcul.
Calculer sous condition
- 1.
Que rend
=SOMME.SIsur cette colonne, avec le critère « supérieur ou égal à 10 » ? - 2.
Que rend
=MOYENNE.SIavec le même critère ? - 3.
De combien cette moyenne conditionnelle dépasse-t-elle la moyenne de toute la colonne ?
- 4.
Que rend
=NB.SI.ENSsur cette colonne avec deux critères, « supérieur ou égal à 10 » et « inférieur à 15 » ? - 5.
Une recherche dans un barème rend un taux de commission de 8 % pour un chiffre d'affaires de 2500 euros. Combien vaut la commission ?
euros
Écrire une formule qui affiche « Rupture » si le stock est inférieur à 5, et rien sinon.
=SI(D2<5;"Rupture";"")
Trois détails comptent.
Le texte va entre guillemets. Sans eux, Rupture est pris pour un nom de plage et la formule rend #NOM?.
"" désigne une chaîne vide, qui affiche une case vide. C'est plus lisible qu'un mot inutile, et cela permet de compter facilement les ruptures ensuite avec =NB.SI(E2:E20;"Rupture").
Le test emploie < et non <= : « inférieur à 5 » exclut 5. Si la règle est « 5 ou moins », il faut <=5.
Un RECHERCHEV recopié vers le bas donne des #N/A à partir de la moitié du tableau. Pourquoi ?
La table n'est pas verrouillée.
Écrite =RECHERCHEV(A8;A2:C5;2;FAUX) sans les $, la table se décale à chaque recopie : A3:C6, puis A4:C7. Elle glisse vers le bas et finit par ne plus contenir les premières lignes du catalogue.
C'est ce qui explique que les erreurs apparaissent progressivement plutôt que d'emblée, ce qui égare la recherche de la cause.
La correction : $A$2:$C$5. Sélectionner la référence dans la barre de formule et appuyer sur F4 pose les quatre $ d'un coup.
Pourquoi toujours écrire FAUX en quatrième argument de RECHERCHEV ?
Parce qu'omis, cet argument vaut VRAI, ce qui déclenche une recherche approchée.
En recherche approchée, la fonction suppose la première colonne triée par ordre croissant et rend la valeur immédiatement inférieure à celle qu'on cherche. Sur une table non triée, elle rend n'importe quoi.
Le danger est que le résultat est plausible : un prix, une désignation, quelque chose qui ressemble à une réponse. Aucune erreur n'est signalée.
La recherche approchée a un usage légitime, celui des tranches : trouver le taux correspondant à une tranche de revenus. Mais il faut alors le vouloir explicitement, et trier la table.
Avec RECHERCHEX, la question ne se pose plus : la recherche est exacte par défaut, et les tranches se demandent par le mode -1, sur une table qui n'a pas besoin d'être triée.
Réécrire =RECHERCHEV(A8;$A$2:$C$5;3;FAUX) avec RECHERCHEX, sachant que les codes sont en colonne A et les prix en colonne C. Qu'y gagne-t-on ?
=RECHERCHEX(A8;$A$2:$A$5;$C$2:$C$5)
La table et son numéro de colonne sont remplacés par deux colonnes : celle où chercher, $A$2:$A$5, et celle d'où tirer le prix, $C$2:$C$5.
Le FAUX disparaît, puisque la recherche est exacte par défaut. Il n'y a plus d'argument dont l'oubli change le sens de la formule.
Si l'on insère une colonne « Fournisseur » entre la désignation et le prix, les références se décalent d'elles-mêmes vers $D$2:$D$5. Le 3 de RECHERCHEV, lui, serait resté 3, et la formule aurait rendu le fournisseur à la place du prix, sans la moindre erreur.
Les $ restent : c'est la seule précaution que RECHERCHEX n'a pas supprimée.
Une réserve : un classeur qui doit être ouvert dans Excel 2019 ou une version antérieure garde RECHERCHEV, ou passe à INDEX et EQUIV.
=SOMME.SI(B2:B9;"curative";D2:D9) donne le coût de toutes les interventions curatives. Comment n'additionner que celles du Tour 1, dont le nom est en colonne A ?
=SOMME.SI.ENS(D2:D9;B2:B9;"curative";A2:A9;"Tour 1")
Il faut changer de fonction, et surtout d'ordre : dans SOMME.SI.ENS, la plage à additionner, D2:D9, passe en tête. Suivent les couples « plage ; critère », ici deux, reliés par un ET.
L'erreur tentante est de garder l'ordre de SOMME.SI et d'ajouter le second critère au bout. Le critère « curative » se retrouve alors là où la fonction attend une plage, et la formule est refusée ou rend une erreur : on s'en aperçoit. Plus sournois, écrire C2:C9 en tête au lieu de D2:D9 additionne les durées au lieu des coûts, sans aucun message.
Poser « Tour 1 » et « curative » dans deux cellules, et y faire référence, permet ensuite d'interroger le journal pour n'importe quelle machine sans réécrire la formule.
=NB.SI(B2:B50;"informatique") rend 0 alors que la colonne en contient. Que chercher ?
Une différence invisible entre le critère et les données.
Trois causes, par ordre de fréquence.
Un espace en fin de saisie : "informatique " n'est pas "informatique". La fonction SUPPRESPACE nettoie la colonne.
Une faute d'orthographe ou un pluriel : informatiques au lieu de informatique.
Un caractère invisible venu d'un copier-coller depuis une page web, souvent un espace insécable.
La casse, elle, ne pose pas de problème : NB.SI ne distingue pas les majuscules des minuscules.
Le contrôle général : la somme des NB.SI sur toutes les catégories doit redonner le NBVAL de la colonne. Si l'un manque, on sait combien de lignes échappent au compte.
Faut-il envelopper toutes ses formules dans SIERREUR ?
Non, presque jamais.
SIERREUR ne corrige rien : il masque le message. Le code introuvable reste introuvable, la ligne reste fausse, elle est seulement plus présentable.
Deux usages sont défendables. Éviter un #DIV/0! quand un dénominateur vide est normal, par exemple un taux de progression au premier mois. Et afficher un message compréhensible dans un fichier destiné à autrui, à condition que ce message dise quoi faire.
Le mettre partout par principe revient à débrancher le seul système d'alerte du tableur.
Le bon réflexe est inverse : quand une erreur apparaît, chercher pourquoi, et n'employer SIERREUR qu'une fois la cause comprise et jugée acceptable. Pour une recherche, le quatrième argument de RECHERCHEX ou SI.NON.DISP font le même travail sans cacher les autres erreurs.
Un fournisseur obtient 16 sur 20 en qualité et 7 sur 20 en délai. La règle d'achat exige au moins 10 sur chacun des deux critères. Quelle formule, et pourquoi pas la moyenne des deux ?
=SI(ET(B3>=10;C3>=10);"Retenu";"Écarté")
La moyenne des deux notes vaut 11,5, ce qui le ferait retenir. Mais la règle n'est pas « avoir 10 de moyenne », elle est « avoir 10 sur chaque critère ».
ET exige que toutes ses conditions soient vraies. OU se contenterait d'une seule, et donnerait ici « Retenu », ce qui serait faux.
C'est un cas où la formule doit traduire une règle, pas un calcul. Confondre les deux est la source d'erreurs les plus difficiles à repérer, parce que le résultat reste vraisemblable.
Dresser, à côté d'un journal dont les machines sont en A2:A200, la liste des machines et le nombre d'arrêts de chacune, de façon qu'une machine nouvelle y apparaisse seule.
En D2 : =UNIQUE(A2:A200). En E2 : =NB.SI(A2:A200;D2#).
UNIQUE rend chaque machine une fois et déborde vers le bas. D2# désigne toute cette liste, quelle que soit sa longueur, et NB.SI rend un compte par machine, qui déborde à son tour.
Une machine nouvelle saisie dans le journal allonge la liste d'une ligne, et son compte apparaît en face, sans rien recopier. C'est ce qu'une plage écrite en dur, D2:D6, ne ferait pas.
Deux conditions : laisser vides les cellules sous D2 et E2, faute de quoi les formules affichent #PROPAGATION! ; et disposer d'une version qui connaît ces fonctions. =TRI(UNIQUE(A2:A200)) donne la même liste dans l'ordre alphabétique.
Chapitre révisé en octobre 2026 · Une erreur dans ce chapitre ?
Dans la bibliothèque d'exercices
Conditions imbriquées, recherche exacte ou approximative, références figées.
- Un barème en conditions imbriquéesNiveau 2
- Recherche exacte ou approximativeNiveau 3
- Ce qu'une formule devient en la recopiantNiveau 2
- Le contrôle des cotes usinéesNiveau 3
- Le prix des pièces du bon de sortieNiveau 1
- Retrouver un instrument par son numéro de sérieNiveau 2
- Les frais de port selon le poids du colisNiveau 2
- Le bilan d'un poste de productionNiveau 3
- Les commandes de chaque fournisseur, selon leur statutNiveau 3