SIERREUR vs SI.NON.DISP : masquer les erreurs Excel
Excel dispose de deux fonctions pour intercepter les erreurs et les remplacer par une valeur personnalisée : SIERREUR (qui capture toutes les erreurs) et SI.NON.DISP (qui capture uniquement #N/A). Le choix entre les deux a des implications importantes sur la fiabilité de vos données.
Les erreurs Excel en un coup d'œil
| Erreur | Cause principale | Capturée par SIERREUR | Capturée par SI.NON.DISP |
|---|---|---|---|
| #N/A | Valeur introuvable (RECHERCHEV, EQUIV…) | Oui | Oui |
| #VALEUR! | Type de données incorrect | Oui | Non |
| #REF! | Référence supprimée ou invalide | Oui | Non |
| #DIV/0! | Division par zéro | Oui | Non |
| #NOM? | Nom de fonction ou de plage nommée inconnu | Oui | Non |
| #NBRE! | Résultat numérique impossible | Oui | Non |
| #NUL! | Intersection vide | Oui | Non |
Comparatif des deux fonctions
Capture toutes les erreurs
Remplace n'importe quelle erreur par la valeur spécifiée
=SIERREUR(valeur; valeur_si_erreur) =SIERREUR(RECHERCHEV(A2;B:C;2;0);"Non trouvé") =SIERREUR(D2/E2;0) =SIERREUR(1/A2;"—")
Disponible depuis Excel 2007.
Capture uniquement #N/A
Remplace #N/A ; laisse passer toutes les autres erreurs
=SI.NON.DISP(valeur; valeur_si_na) =SI.NON.DISP(RECHERCHEV(A2;B:C;2;0);"Non trouvé") =SI.NON.DISP(EQUIV(A2;D:D;0);"Absent") =SI.NON.DISP(RECHERCHEX(A2;B:B;C:C);"—")
Disponible depuis Excel 2013.
La différence qui change tout
Imaginez que votre formule RECHERCHEV contient une faute de frappe dans le nom de la plage :
— Avec SIERREUR : le #NOM? est masqué, tout semble normal
=SIERREUR(RECHERCHEV(A2;Produits_!;2;0);"Non trouvé")
→ Affiche "Non trouvé" même si le problème est une erreur dans la formule
— Avec SI.NON.DISP : le #NOM? reste visible, vous détectez le bug
=SI.NON.DISP(RECHERCHEV(A2;Produits_!;2;0);"Non trouvé")
→ Affiche #NOM? car ce n'est pas un #N/A
Avec RECHERCHEV et RECHERCHEX
— RECHERCHEV : #N/A quand la valeur n'existe pas dans la table
=SI.NON.DISP(RECHERCHEV(A2;$D$2:$F$100;2;0);"Non trouvé")
— RECHERCHEX (Excel 365) : possède son propre paramètre par défaut
=RECHERCHEX(A2;D2:D100;E2:E100;"Non trouvé") ← pas besoin de SIERREUR
← Mais SI.NON.DISP reste utile en combinaison avec des formules imbriquées
Avec EQUIV et INDEX
— EQUIV renvoie #N/A si la valeur est introuvable
=SI.NON.DISP(INDEX(C:C;EQUIV(A2;B:B;0));"Introuvable")
— Avec double correspondance (lignes + colonnes) :
=SI.NON.DISP(
INDEX($C$2:$F$100; EQUIV(A2;$B$2:$B$100;0); EQUIV(B2;$C$1:$F$1;0));
"—"
)
Quand SIERREUR est le bon choix
— Division conditionnelle : le seul risque est #DIV/0!
=SIERREUR(B2/C2;0)
— Calcul racine : le seul risque est #NBRE! (nombre négatif)
=SIERREUR(RACINE(A2);"N/A")
— Somme sur plage avec valeurs texte mélangées
=SIERREUR(SOMMEPROD(...);"—")
Dans ces cas, le type d'erreur attendu est connu et unique — SIERREUR est parfaitement adapté.
Tableau de décision
| Situation | Recommandation |
|---|---|
| Valeur introuvable dans RECHERCHEV / EQUIV | SI.NON.DISP — laisse les vraies erreurs de formule visibles |
| Division par zéro possible | SIERREUR — seul risque connu = #DIV/0! |
| RECHERCHEX avec valeur absente | Utiliser le 4e argument de RECHERCHEX directement |
| SOMMEPROD avec erreurs dans la plage | SIERREUR autour de chaque sous-expression, ou SIERREUR(valeur;0) |
| Prototypage rapide sur formule complexe | SIERREUR temporairement, puis affiner |
| Formule de production en production partagée | SI.NON.DISP — les erreurs inattendues doivent rester visibles |
Astuce : imbriquer pour distinguer plusieurs erreurs
=SI(ESTNA(RECHERCHEV(A2;D:E;2;0));
"Produit non référencé";
SI(ESTERREUR(RECHERCHEV(A2;D:E;2;0));
"Erreur de formule — vérifiez la table";
RECHERCHEV(A2;D:E;2;0)
)
)
→ Affiche un message différent selon le type d'erreur
Cette approche (ancienne mais universelle) utilise ESTNA et ESTERREUR pour distinguer les erreurs. Elle reste utile quand vous voulez des messages d'erreur spécifiques selon le cas.
Ignorer les erreurs dans une somme → SI vs SI.CONDITIONS vs SI.MULTIPLE Fiche SIERREUR