Fonctions conditionnelles et recherche
Ce que ce chapitre apporte
- Écrire une fonction SI, et empiler plusieurs SI dans le bon ordre de seuils.
- Compter et additionner sous condition avec NB.SI et SOMME.SI.
- Retrouver une donnée avec RECHERCHEV, et déjouer ses quatre pièges.
- 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.
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 et il vaut mieux passer à une table de correspondance avec RECHERCHEV, ce que la fin du chapitre présente.
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.
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.
| 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.
RECHERCHEVINDEX et EQUIV.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.
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.
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.
Exercices type
É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.
`=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.
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.
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.=NB.SI(B2:B50;"informatiques") avec un « s » de trop rend…
4.Un RECHERCHEV recopié donne des #N/A à partir du milieu du tableau. La cause est…
5.Omettre le quatrième argument de RECHERCHEV déclenche…
6.SIERREUR sert à…
La méthode
- Écrire la règle en français avant de toucher au clavier. Le « et » ou le « ou » de la phrase deviennent le
ETou leOUde la formule. - Taper
=SI(, puis la comparaison, un point-virgule, le cas vrai, un point-virgule, le cas faux. Le texte va entre guillemets, un nombre ou une référence sans. - Ordonner les seuils du plus exigeant au moins exigeant dans une cascade de
SI, et s'arrêter à trois ou quatre niveaux. - Pour un
RECHERCHEV, placer d'abord la colonne cherchée en première colonne de la table. La fonction ne regarde jamais à gauche. - Verrouiller la table dès qu'elle est écrite : sélectionner sa référence dans la barre de formule et appuyer sur
F4, avant toute recopie. - Écrire
FAUXen quatrième argument, sauf recherche par tranches voulue explicitement sur une table triée. - Contrôler les comptages : la somme des
NB.SIsur toutes les catégories doit redonner leNBVALde la colonne. Un écart envoie chercher un espace de fin ou un pluriel. - Chercher la cause d'une erreur avant de l'habiller.
SIERREURne s'ajoute qu'une fois la cause comprise et jugée normale.
Synthèse
SI(test ; alors ; sinon)fait trancher le tableur ; le texte va entre guillemets.- Une cascade de
SIse teste du seuil le plus exigeant au moins exigeant. - Au-delà de trois ou quatre niveaux, une table de correspondance vaut mieux qu'une imbrication.
NB.SIcompte,SOMME.SIadditionne une autre plage que celle du test.- Un critère qui ne correspond à rien rend zéro, jamais une erreur : espaces et pluriels sont les coupables habituels.
RECHERCHEVcherche dans la première colonne de la table, et ne regarde jamais à gauche.- La table doit être verrouillée, faute de quoi les
#N/Aapparaissent à mi-parcours. - Le quatrième argument doit valoir
FAUX; sans lui la recherche est approchée et rend du plausible. SIERREURmasque l'erreur au lieu de la résoudre ; il ne s'emploie qu'après avoir compris la cause.ETexige toutes les conditions,OUune seule ; une règle n'est pas une moyenne.
Mettre en pratique
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