Taille de police :

×

Lecture de la page :

Lire Test2

Les différentes fonctions conditionnelles

0
(0)

Il s'agit des fonctions incontournables pour permettre aux formules de s'adapter selon différentes conditions.

Un article sur des notions de bases mais qui manquait sur ce site.

La fonction SI : La base

Une fonction SI permet de faire un choix entre 2 possibilités seulement.

Syntaxe

=SI(Test_logique ; Valeur_si_vrai ; Valeur_si_faux)
  • Test_logique : Valeur ou expression correspondante à une valeur booléenne (valeur VRAI ou FAUX).
    • On peut utiliser les 5 opérateurs suivant <, <=, >, >=, =, <> (différent).
    • On peut utiliser toute fonctions renvoyant des valeurs booléennes (ET, OU, EST.PAIR...).
  • Valeur_si_vrai : Valeur ou expression renvoyée si Test_logique est égale à VRAI.
  • Valeur_si_faux : Valeur ou expression renvoyée si Test_logique est égale à FAUX.

Cas simple sans imbrications

Exemple 1

Afficher "Admis" si une valeur (A2) est égale ou supérieur à 10, sinon ne rien afficher.

=SI(A2 > = 10;"Admis";"")

Exemple 2

Si la valeur de la cellule A2 est égale à la lettre R (réduction), Excel fera le calcul B2*D2 sinon Excel fera le calcul C2*D2.

=SI(A2="R";B2;C2)*D2

Cas complexe avec imbrications

La fonction SI permettant de faire seulement un choix entre 2 possibilités, comment faire avec 3, 4... possibilités ?

On va utiliser la méthode de dichotomie. En faisant une succession de choix simple (2 possibilités), on va parvenir à sélectionner le résultat désiré.

Principe

Par exemple si l'on a 4 choix possibles, on va devoir utiliser 3 fonctions SI imbriqués, une de moins que le nombre de cas. Chaque fonction SI imbriquée permettra, dans ce cas, "d'éliminer"/"choisir" une des valeurs de la liste, la dernière fonction SI s'occupera des 2 dernières valeurs restantes.

Exemple avec 4 possibilités

  • Valeur inférieure 2 => on affiche "A".
  • Valeur entre 2 et 3 => on affiche "B".
  • Valeur entre 3 et 4 => on affiche "C".
  • Valeur supérieure à 4 => on affiche "D".
Syntaxe 1
Schéma explicatif sur l'imbrication de 3 fonctions SI - logique 1

Ce "découpage" est celui que je conseille, on part d'une "extrémité" et on se décale vers l'autre en éliminant un cas toujours du côté du départ.

Avantages de cette structure logique
  • Facilité de lecture
  • Toutes les parenthèses se ferme à la fin (même nombre que de fonction SI).
=SI(A2<2;"A";SI(A2<3;"B";SI(A2<4;"C";"D")))

Syntaxe 2

Plusieurs autres solutions sont possibles, par exemple en utilisant cette logique

Schéma explicatif sur l'imbrication de 3 fonctions SI - logique 2

Cette logique nécessite une profondeur d'imbrication de fonction plus faible que la logique précédente et pouvait être intéressante dans d'anciennes versions d'Excel ou l'on était plus limité à ce niveau.

  • Format xls : Limité à 7 niveaux d'imbrication, soit 8 fonctions SI, soit
    • 9 choix avec la 1ère syntaxe.
    • 256 choix avec la 2ème syntaxe (Cette 2ème syntaxe semble plus avantageuse mais au-delà de 4/5 imbrications, d'autres solutions devraient être envisagées).
  • Format moderne (xlsx...) : Limité à 64 niveaux d'imbrication, donc ce sera plus la longueur de la formule (nombre de caractères) qui sera limitant que par le nombre d'imbrication.
=SI(A2<3;SI(A2<2;"A";"B");SI(A2<4;"C";"D"))

Inconvénients de cette structure logique
  • Formule longue (rédaction longue, maintenance/correction plus complexe).
  • Fait peur aux débutants qui confondent "formule longue" et "formule complexe".

Remarques :

  • On trouve souvent des expressions inutilement complexes pour l'argument Test_logique comme "A2 = VRAI". Dans ce cas spécifique, un simple "SI( A2 ; ..." est suffisant vu que A2 contient déjà une valeur booléenne, inutile donc de chercher à en générer une nouvelle avec un test d'égalité).
  • Une erreur classique que l'on rencontre dans ce type de formule est de vouloir tester les 2 bornes de chaque plage en imbriquant une fonction ET pour chaque test.
    Exemple : =SI(A2<2;"A";SI( ET(A2>=2;A2<3) ;"B"; SI( ET(A2>=3;A2<4) ;"C";"D"))) ce qui complexifie inutilement la formule.
  • Une autre erreur classique est d'ajouter une fonction SI de trop à la fin ainsi =SI(A2<2;"A";SI(A2<3;"B";SI(A2<4;"C";SI A2>4;"D";???)))) (Que mettre à la place des "???" ?).
  • Les fonctions ET et OU sont souvent utilisées dans l'argument Test_logique.
    Exemple : On affiche le mot "Prime" pour toutes personnes dont l'ancienneté est supérieure à 20 ans sans aucune autre considération mais aussi pour les personnes ayant fait au moins +5 en objectif sans avoir plus de 9 jours d'absence (ici utilisation de cellules nommées).
=SI(OU(Ancienneté>20;ET(Objectif>4;Absence<10));"Prime";"")

La fonction SI.CONDITIONS (version >=2019)

Permet de simplifier la formule avec SI imbriqués en évitant la réécriture des "SI(" et de la parenthèse finale correspondante pour les fonctions SI imbriqués.

Syntaxe

=SI.CONDITIONS(Test_logique1;Valeur_si_vrai1;[Test_logique2;Valeur_si_vrai2];…)
  • Test_logique1 : Valeur ou expression correspondante à une valeur booléen (valeur VRAI ou FAUX).
  • Valeur_si_vrai1 : Valeur ou expression renvoyée si Test_logique1 est égale à VRAI.
    Facultatif :
  • Test_logique2 à 127 : Valeur ou expression correspondante à une valeur booléen (valeur VRAI ou FAUX).
  • Valeur_si_vrai2 à 127 : Valeur ou expression renvoyée si Test_logique2 à 127est égale à VRAI.

Si aucune condition test_logique n'est vérifiée la fonction renvoie la valeur #N/A.

Exemple avec le cas à 4 possibilités

=SI(A2<2;"A";SI(A2<3;"B";SI(A2<4;"C";"D")))

devient

=SI.CONDITIONS(A2<2;"A";A2<3;"B";A2<4;"C";VRAI;"D")

Les arguments Test_logique sont évalués selon l'ordre de leur saisie, ainsi le dernier Test_logique est souvent la simple valeur VRAI renvoyant un Valeur_si_vrai qui correspondant ainsi à la valeur par défaut (évite le #N/A si aucune condition Test_logique n'est vérifiée).

Autre exemple

Dans un tableau structuré (voir A la découverte des tableaux structurés 1/2), on doit calculer une valeur de réduction de prix basée sur cette logique.

  • Une personne handicapée bénéficie d'une réduction de 10%.
  • Une personne de moins de 18 ans bénéficie d'une réduction de 5%.
Exemple d'utilisation de la fonction SI.CONDITIONS

=SI.CONDITIONS([@Handicapé];10%;[@Age]<18;5%;VRAI;0)

La fonction SI.MULTIPLE (version >=2019)

Permet de simplifier la formule avec SI imbriqués et SI.CONDITIONS dans le cas particulier ou tous les tests logiques portent sur la même expression et que celle-ci est une simple égalité (pas de conditions complexes avec les opérateurs >, >=, <, <=, <>).

Syntaxe

=SI.MULTIPLE(Expression;Valeur1;Résultat1;[Défaut ou Valeur2; Résultat2];…)
  • Expression : Expression renvoyant une valeur qui sera comparée à Valeur1 à 126.
  • Valeur1 à Valeur126 : Expression renvoyant une valeur qui sera comparée à Expression.
  • Résultat1 à Résultat126 : Valeur à renvoyer lorsque l’argument ValeurN correspondant est conforme à l’expression
  • Défaut : Dernier argument n'ayant pas d'argument Valeur lui correspondant, sert à renvoyer une valeur si aucune correspondance n’est trouvée dans les expressions précédente ValeurN.

Exemple

Afficher la tranche d'âge en fonction de la catégorie sportive (indiqué en colonne Catégorie dans un tableau structuré).

Version SI
=SI([@Catégorie]="Poussin";"9-10";SI([@Catégorie]="Benjamin";"11-12";
 SI([@Catégorie]="Minime";"13-14";SI([@Catégorie]="Cadet";"15-16";
 SI([@Catégorie]="Junior";"17-18";SI([@Catégorie]="Senior";"19-34";
 SI([@Catégorie]="Vétéran";"35 et +";"")))))))

Version SI.CONDITIONS
=SI.CONDITIONS(
    [@Catégorie]="Poussin";"9-10";[@Catégorie]="Benjamin";"11-12";
    [@Catégorie]="Minime";"13-14";[@Catégorie]="Cadet";"15-16";
    [@Catégorie]="Junior";"17-18";[@Catégorie]="Senior";"19-34";
    [@Catégorie]="Vétéran";"35 et +";VRAI;"")

Version SI.MULTIPLE
=SI.MULTIPLE(
    [@Catégorie];"Poussin";"9-10";"Benjamin";"11-12";
                 "Minime";"13-14";"Cadet";"15-16";"Junior";"17-18";
                 "Senior";"19-34";"Vétéran";"35 et +";"")

La fonction CHOISIR

Ressemble à la fonction SI.MULTIPLE en plus "simple" et "limité.

Syntaxe

=CHOISIR(no_index;valeur1[;valeur2];...)
  • No_index : Argument correspondant à l'argument Expression de la fonction SI.MULTIPLE. N'accepte que des valeurs numériques entre 1 et 254.
  • Valeur1 à Valeur254 : Valeur correspondantes au 254 valeurs possibles pour No_index.(exemple : Avec No_index = 3, la fonction CHOISIR renvoie la valeur Valeur3).

Comparaison à la fonction SI.MULTIPLE :

  • Expression peut être numérique ou non => dans la fonction CHOISIR ce n'est que des valeurs numériques entre 1 et 254.
  • Valeur1 à Valeur126 => dans la fonction CHOISIR c'est inutile vu que l'on sait que ce ne peut être que des valeurs entre 1 et 245.
  • Résultat1 à Résultat126 => dans la fonction CHOISIR ce sont les arguments Valeur1 à Valeur254.

Exemple

Sur un ordinateur configuré Français, on veut afficher le jour de la semaine en anglais correspondante à la date saisie en A2.

=CHOISIR(JOURSEM(A2;2);"Monday";"Tuesday";"Wednesday";"Thursday";"Friday";"Saturday";"Sunday")

Remarque, pour la version Française, il y a plus simple mais ça n'illustre pas bien l'utilisation de la fonction CHOISIR 😁.

=TEXTE(A2;"jjjj")

La fonction SIERREUR

Permet d'"intercepter" une erreur dans une formule, traiter un cas spécifique/effet de bord qui provoque une erreur.

Syntaxe

=SIERREUR(Valeur;Valeur_si_erreur)
  • Valeur : Valeur ou expression à renvoyer.
  • Valeur_si_erreur : Valeur ou expression à renvoyer si l'évaluation de l'argument Valeur génère une erreur (#N/A, #VALEUR!, #REF!, #DIV/0!, #NOMBRE!, #NOM?, #NUL!).

Exemple

On veut faire une simple division mais la valeur du diviseur, pouvant être égale à 0 dans certains cas ,rendant ainsi la division impossible, doit être "contrôlé" afin d'éviter une formule en erreur. Dans ce cas spécifique (division impossible) on veut afficher un texte d'alerte.

Solution avec la fonction SI :
=SI(A2=0;"A2 vide !";10/A2) ou =SI(A2;10/A2;"A2 vide !") car 0 <=> FAUX

Solution avec la fonction SIERREUR :
=SIERREUR(10/A2;"A2 vide !")

Remarque :

  • Les fonctions SI.NON.DISP joue le même rôle mais seulement avec le message 'information #N/A (= information non trouvée) renoyé par les fonctions de recherche comme RECHERCHEX, EQUIV, RCHERCHEV...

Les fonctions de recherche de valeurs

Dans certain cas il est tout à fait possible d'utiliser des fonctions comme INDEX, EQUIV, FILTRE, RECHERCHEX... (voir Les fonctions de recherche de valeur) pour remplacer avantageusement de fonctions conditionnelles.

Exemple

Afficher la tranche d'âge en fonction de la catégorie sportive (indiqué en colonne Catégorie dans un tableau structuré).

=INDEX({"9-10";"11-12";"13-14";"15-16";"17-18";"19-34";"35 et +";""};
       SI.NON.DISP(EQUIV([@Catégorie];{"Poussin";"Benjamin";"Minime";"Cadet";"Junior";"Senior";"Vétéran"};0);
                   8))
ou

=SIERREUR(INDEX({"9-10";"11-12";"13-14";"15-16";"17-18";"19-34";"35 et +";""};
                EQUIV([@Catégorie];{"Poussin";"Benjamin";"Minime";"Cadet";"Junior";"Senior";"Vétéran"};0));
          "")

Ici 2 constantes matricielles sont utilisées mais elles pourraient être remplacées par une plage/table annexe permettant de faire la correspondance entre le résultat du test/recherche et le résultat attendu.

Quand utiliser quoi !

  • SI : cas simple quand il y a 3/4 choix au maximum.
  • SI.CONDITION : quand il y a une dizaine de choix au maximum.
  • SI.MULTIPLE : quand il y a une dizaine de choix au maximum utilisant le même test logique.
  • CHOISIR : quand il y a une dizaine de choix au maximum utilisant le même test logique renvoyant des valeurs numériques de 1 à ...
  • SIERREUR, SI.NON.DIS : que pour "intercepter" une erreur dans une formule (traiter un cas spécifique/ effet de bord).
  • Les fonctions de recherche de valeurs : Permet de traiter un très grand nombre de choix mais nécessite la réalisation d'une table/tableau annexe pour faire la correspondance.

J'aurais pu ajouter les fonctions se terminant par ".SI" et ".SI.ENS" mais je vous renvoie à Une famille de fonctions incontournable, les ... .SI.ENS pour plus d'informations les concernant.

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

Un commentaire

Laisser un commentaire

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