Aller au contenu principal

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.
Jusqu'ici, les formules calculaient toujours de la même façon. On passe maintenant à autre chose : faire prendre une décision au tableur, et lui faire retrouver une information dans un grand tableau. Ce sont les deux familles de fonctions qui font gagner des heures, et ce sont aussi celles où les erreurs sont les plus discrètes.

La fonction SI

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érateurSens
=égal
<>différent
> <strictement supérieur, inférieur
>= <=supérieur ou égal, inférieur ou égal
D2fx
ABCD
1ÉlèveNoteRésultatMention
2Amina14ReçuB
3Bastien8Ajourné 
4Chloé17ReçuTB
5Dorian11Reçu 
6Elias9,5Ajourné 
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.

Cinq élèves. La colonne C tranche sur un seul seuil, la colonne D empile trois SI pour attribuer une mention. Changer la note d'Elias en 10 pour le voir passer de « Ajourné » à « Reçu », et en 12 pour lui donner une mention.
Imbriquer des SI sans s'y perdre

Un 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 et SOMME.SI

=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".

B8fx
ABCD
1ArticleCatégoriePrixStock
2Clavierinformatique25,912
3Sourisinformatique12,540
4Écraninformatique1495
5Chaisemobilier898
6Bureaumobilier2493
7Lampemobilier34,922
8Articles informatiques3Valeur du stock info187,4
9Articles à moins de 503Stock total du mobilier33
10    

B8 contient la formule =NB.SI(B2:B7;"informatique"), et affiche 3. Les cellules qu'elle utilise sont teintées.

Six articles et quatre calculs conditionnels. Changer la catégorie de la lampe en « informatique » pour voir les quatre résultats bouger d'un coup. Attention à l'orthographe : « Informatique » avec une majuscule compte quand même, mais « informatiques » au pluriel ne compte plus.
Un critère qui ne correspond à rien rend zéro, pas une erreur
=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

=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.

B8fx
ABCDE
1CodeDésignationPrix  
2CLAClavier25,9  
3SOUSouris12,5  
4ECRÉcran 24 pouces149  
5CASCasque79,9  
6     
7CommandeDésignationPrix unitaireQuantitéTotal
8SOUSouris12,5450
9ECRÉcran 24 pouces1492298
10XXX#N/A#N/A1#N/A
11     
B10 #N/A C10 #N/A E10 #N/A

B8 contient la formule =RECHERCHEV(A8;$A$2:$C$5;2;FAUX), et affiche Souris. Les cellules qu'elle utilise sont teintées.

Un catalogue en haut, une commande en bas. Taper un code dans la colonne A remplit tout le reste de la ligne. Le code XXX de la dernière ligne n'existe pas au catalogue, et RECHERCHEV rend #N/A, qui se propage jusqu'au total. Remplacer XXX par CLA pour voir la ligne se compléter.
Les quatre pièges de RECHERCHEV
La valeur cherchée doit être dans la première colonne de la table. La fonction ne regarde jamais à gauche. Si le code se trouve en colonne C et la désignation en colonne A, il faut réorganiser la table ou employer INDEX 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

=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.

C3fx
ABC
1CodeSans SIERREURAvec SIERREUR
2CLAClavierClavier
3XXX#N/Acode inconnu
4   
5Catalogue  
6CLAClavier 
7SOUSouris 
8ECRÉcran 
9   
B3 #N/A

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.

Le même code introuvable, traité de deux façons. À gauche, #N/A s'affiche et se propagerait dans tout calcul en aval. À droite, SIERREUR le remplace par un message lisible. Le résultat est plus présentable, et c'est précisément le danger.
SIERREUR masque le problème au lieu de le résoudre
Envelopper une formule dans SIERREUR 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.

D3fx
ABCD
1FournisseurQualitéDélaiDécision
2Alpha1411Retenu
3Beta167Écarté
4Gamma915Écarté
5Delta1212Retenu
6Retenus2Qualité moyenne des retenus13
7    

D3 contient la formule =SI(ET(B3>=10;C3>=10);"Retenu";"Écarté"), et affiche Écarté. Les cellules qu'elle utilise sont teintées.

La règle d'achat exige au moins 10 sur chacun des deux critères. Regarder la ligne Beta : 16 en qualité, et pourtant « Écarté », parce que son délai est noté 7. Un critère excellent ne rachète pas un critère insuffisant, et c'est exactement ce que ET exprime. Remplacer ET par OU dans une des formules pour voir la décision basculer.

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.

Vérification rapideon peut se reprendre

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

  1. Écrire la règle en français avant de toucher au clavier. Le « et » ou le « ou » de la phrase deviennent le ET ou le OU de la formule.
  2. 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.
  3. Ordonner les seuils du plus exigeant au moins exigeant dans une cascade de SI, et s'arrêter à trois ou quatre niveaux.
  4. Pour un RECHERCHEV, placer d'abord la colonne cherchée en première colonne de la table. La fonction ne regarde jamais à gauche.
  5. 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.
  6. Écrire FAUX en quatrième argument, sauf recherche par tranches voulue explicitement sur une table triée.
  7. Contrôler les comptages : la somme des NB.SI sur toutes les catégories doit redonner le NBVAL de la colonne. Un écart envoie chercher un espace de fin ou un pluriel.
  8. Chercher la cause d'une erreur avant de l'habiller. SIERREUR ne 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 SI se 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.SI compte, SOMME.SI additionne 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.
  • RECHERCHEV cherche dans la première colonne de la table, et ne regarde jamais à gauche.
  • La table doit être verrouillée, faute de quoi les #N/A apparaissent à mi-parcours.
  • Le quatrième argument doit valoir FAUX ; sans lui la recherche est approchée et rend du plausible.
  • SIERREUR masque l'erreur au lieu de la résoudre ; il ne s'emploie qu'après avoir compris la cause.
  • ET exige toutes les conditions, OU une seule ; une règle n'est pas une moyenne.

Mettre en pratique