Gestion des erreurs
Dans un environnement de données réelles, les champs peuvent être vides, les recherches peuvent ne rien trouver. Apprenez à gérer ces cas gracieusement.
Pourquoi gérer les erreurs ?
Une formule peut échouer pour plusieurs raisons :
- Un champ optionnel n'est pas renseigné
- Une recherche ne trouve aucun objet
- Une opération sur une valeur nulle
- Un accès à un champ qui n'existe pas
Sans gestion d'erreur, votre formule affichera un message d'erreur peu élégant. Avec une gestion appropriée, vous pouvez afficher une valeur par défaut ou un message clair.
❌ Sans gestion d'erreur
Erreur: Cannot read property 'email' of undefined
✓ Avec gestion d'erreur
Email non renseigné
SI.ECHOUE.RENVOYER
SI.ECHOUE.RENVOYER(expressionRisquee, valeurSecours)
Tente d'exécuter la première expression. Si elle échoue (erreur quelconque), retourne la valeur de secours à la place.
SI.ECHOUE.RENVOYER({{champ.risque}}, "valeur par défaut")
// Exemple: recherche qui peut échouer
SI.ECHOUE.RENVOYER(
CHERCHER.OBJET(client, { id: {{commande.clientId}} }),
null
)
// Exemple: calcul qui peut échouer
SI.ECHOUE.RENVOYER(
{{total}} / {{quantite}},
0
)Cas d'utilisation
Recherche d'objet
// Sans gestion : erreur si aucun client trouvé
CHERCHER.OBJET(client, { email: {{email}} }).nom
// Avec gestion : retourne null si pas trouvé
var client = SI.ECHOUE.RENVOYER(
CHERCHER.OBJET(client, { email: {{email}} }),
null
);
SI EXISTE(client)
ALORS {{client.nom}}
SINON "Client inconnu"
FINSIAccès à un champ profond
// Accès risqué : le client ou l'adresse peut ne pas exister
SI.ECHOUE.RENVOYER({{commande.client.adresse.ville}}, "Non renseignée")Calcul avec données manquantes
// Somme qui peut échouer si le tableau n'existe pas
SI.ECHOUE.RENVOYER(SOMME({{commande.produits.prix}}), 0)SI.VIDE.RENVOYER
SI.VIDE.RENVOYER(expression, valeurSecours)
Évalue l'expression. Si le résultat est null, vide ou undefined, retourne la valeur de secours.
SI.VIDE.RENVOYER({{client.telephone}}, "Non renseigné")
// Exemple: champ optionnel
SI.VIDE.RENVOYER({{client.email}}, "N/A")
// Exemple: tableau potentiellement vide
SI.VIDE.RENVOYER({{commande.notes}}, "Aucune note")Différence avec SI.ECHOUE.RENVOYER
SI.ECHOUE.RENVOYER capture les erreurs d'exécution(exceptions, accès impossible).SI.VIDE.RENVOYER gère les valeurs vides valides(null, chaîne vide, undefined).
Cas d'utilisation
Champs optionnels
// Téléphone optionnel
SI.VIDE.RENVOYER({{client.telephone}}, "Non communiqué")
// Email avec fallback
SI.VIDE.RENVOYER({{contact.email}}, {{contact.emailSecondaire}})Valeurs par défaut
// Taux de TVA par défaut
var tva = SI.VIDE.RENVOYER({{produit.tauxTVA}}, 20);
{{produit.prixHT}} * (1 + tva / 100)
// Devise par défaut
var devise = SI.VIDE.RENVOYER({{facture.devise}}, "EUR");
CONCAT({{facture.total}}, " ", devise)Affichage conditionnel
// Afficher le nom commercial ou la raison sociale
SI.VIDE.RENVOYER({{client.nomCommercial}}, {{client.raisonSociale}})
// Afficher la première valeur non vide
SI.VIDE.RENVOYER(
SI.VIDE.RENVOYER({{contact.portable}}, {{contact.fixe}}),
"Aucun téléphone"
)Combiner les deux
Dans certains cas, vous aurez besoin des deux fonctions ensemble : d'abord gérer les erreurs, puis les valeurs vides.
// Rechercher un client, gérer l'erreur ET la valeur vide
var client = SI.ECHOUE.RENVOYER(
CHERCHER.OBJET(client, { email: {{email}} }),
null
);
var nomClient = SI.VIDE.RENVOYER({{client.nom}}, "Anonyme");
CONCAT("Client : ", nomClient)Autre exemple avec un calcul complexe :
// Calcul du prix moyen avec double protection
var prix = SI.ECHOUE.RENVOYER(
MOYENNE({{produits.prix}}),
0
);
var prixAffiche = SI.VIDE.RENVOYER(prix, 0);
SI prixAffiche == 0
ALORS "Prix non disponible"
SINON CONCAT(FIXER.DECIMALES(prixAffiche, 2), " €")
FINSIExemples pratiques
Afficher une adresse complète avec champs optionnels
var ligne1 = SI.VIDE.RENVOYER({{client.adresse}}, "");
var ligne2 = SI.VIDE.RENVOYER({{client.complementAdresse}}, "");
var cp = SI.VIDE.RENVOYER({{client.codePostal}}, "");
var ville = SI.VIDE.RENVOYER({{client.ville}}, "");
var lignes = FILTRER([ligne1, ligne2, CONCAT(cp, " ", ville)], {{$}} != "");
SI COMPTER(lignes) > 0
ALORS JOINDRE(lignes, "
")
SINON "Adresse non renseignée"
FINSICalculer un total avec produits optionnels
var produits = SI.ECHOUE.RENVOYER({{commande.produits}}, []);
SI COMPTER(produits) == 0
ALORS "Aucun produit"
SINON
var total = SOMME(TRANSFORMER(produits,
SI.VIDE.RENVOYER({{$.quantite}}, 1) * SI.VIDE.RENVOYER({{$.prixUnitaire}}, 0)
));
CONCAT(FIXER.DECIMALES(total, 2), " €")
FINSIRécupérer le dernier commentaire
var commentaires = SI.ECHOUE.RENVOYER({{ticket.commentaires}}, []);
SI COMPTER(commentaires) == 0
ALORS "Aucun commentaire"
SINON
var dernier = SI.ECHOUE.RENVOYER(commentaires[COMPTER(commentaires) - 1], null);
SI.VIDE.RENVOYER({{dernier.texte}}, "Commentaire vide")
FINSIAfficher les informations de contact
// Chercher le meilleur moyen de contact
var email = SI.VIDE.RENVOYER({{client.email}}, null);
var telephone = SI.VIDE.RENVOYER({{client.telephone}}, null);
var portable = SI.VIDE.RENVOYER({{client.portable}}, null);
SI EXISTE(email)
ALORS CONCAT("📧 ", email)
SINON SI EXISTE(portable)
ALORS CONCAT("📱 ", portable)
SINON SI EXISTE(telephone)
ALORS CONCAT("📞 ", telephone)
SINON "❌ Aucun contact disponible"
FINSIProchaine étape
Découvrez maintenant des exemples pratiques complets qui combinent tout ce que vous avez appris.