Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Résolution des erreurs de formule

Objectifs de formation

Une fois cette unité terminée, vous pourrez :
  • Comprendre comment surviennent les erreurs de formule courantes
  • Résoudre les problèmes liés aux champs de formule avancée

Erreurs de syntaxe

Même les pros des formules avancées rencontrent parfois des difficultés avec celles qu’ils écrivent. Les erreurs de formule les plus courantes sont celles de syntaxe. Vous pouvez vérifier la syntaxe de votre formule à tout moment en cliquant sur Vérifier la syntaxe.

Parenthèses manquantes ou supplémentaires

Il est fréquent de saisir accidentellement une parenthèse supplémentaire dans votre formule ou, au contraire, d’en oublier une. Cette erreur est particulièrement courante lors de l’imbrication d’instructions logiques comme IF(), AND() et OR().

Par exemple, il manque une parenthèse fermante à la fin de cette formule.

Une erreur de syntaxe due à une parenthèse manquante

Vous verrez également cette erreur s’afficher si votre fonction contient des parenthèses en trop ou une virgule mal placée. Voici la même formule, cette fois avec une parenthèse superflue.

Une erreur de syntaxe due à la présence d’une parenthèse en trop

Champ n’existe pas

L’éditeur de formule avancée vous sera d’une grande aide vis-à-vis des erreurs de syntaxe. Grâce aux boutons Insérer un opérateur et Insérer un champ, il est presque impossible de mal orthographier le nom d’un champ ou d’une fonction.

Une erreur de syntaxe due à un nom de champ mal orthographié

Ici, nous voulions faire référence au champ Principal__c et non Principle__c. Cette erreur s’affiche également si vous oubliez d’entourer une chaîne de texte de guillemets.

Nombre incorrect de paramètres

Si vous utilisez un nombre incorrect de paramètres pour une fonction donnée, vous rencontrerez des erreurs de syntaxe. Soyez particulièrement vigilant lorsque vous utilisez des fonctions acceptant un nombre variable de paramètres, telles que CASE().

Une erreur de syntaxe due à un nombre incorrect de paramètres dans une fonction

Il manquait dans l’instruction CASE() son dernier argument, la requête représentant un échec. L’éditeur de formules est alors parti du principe que nous ne voulions vérifier que quatre cas et non pas cinq. Il a donc recherché 10 arguments au total, alors que nous voulions lui en soumettre 12.

Fonction inconnue

Vous rencontrerez également des erreurs si vous orthographiez un nom de fonction de manière incorrecte ou essayez d’utiliser une fonction qui n’existe pas.

Une erreur de syntaxe due à une référence à une fonction inconnue

Cette formule tente de faire référence à la fonction MINIMUM(), qui n’existe pas. Nous voulions en réalité utiliser MIN(), qui renvoie la valeur minimale figurant dans une liste de nombres qu’on lui soumet.

Manipulation de différents types de données

Lorsque vous élaborez une formule, réfléchissez au type de données que vous souhaitez qu’elle renvoie avant de l’écrire. Si votre formule renvoie un type de données autre que celui que vous avez sélectionné, vous ne pourrez pas l’enregistrer.

Il arrive souvent que des confusions surviennent dans l’utilisation des types de données, notamment lors de la conversion d’une valeur d’un type à un autre ou si les types de données sont semblables, tels que Date et Date/Heure ou Nombre et Devise. Cette formule, par exemple, est rédigée pour renvoyer une valeur de date alors que le type de retour de formule sélectionné est Date/Heure.

Le type de renvoi de cette formule diffère du type de données de la valeur qu’elle est supposée retourner.

Pour corriger cette erreur, vous pouvez modifier le type de retour du champ de formule en Date. Vous pouvez également remplacer TODAY() par NOW(), qui produira une valeur de date/heure au lieu d’une valeur de date.

Erreurs de taille compilée et de longueur de formule

Les champs de formule sont des outils puissants, mais dont la taille est limitée. Les formules sont limitées à 3 900 caractères ou 4 000 octets, espaces, caractères de retour à la ligne et commentaires inclus, et ne peuvent dépasser 5 000 octets une fois compilées. Il est important de comprendre les différences entre ces restrictions de taille et de connaître la manière de contourner ou de respecter ces contraintes.

Limite de longueur

La longueur des formules est limitée à 3 900 caractères. Plusieurs possibilités s’offrent à vous pour raccourcir des formules trop longues. Le fait de remplacer AND() par &&, par exemple, permet d’économiser quelques caractères à chaque fois, tout comme le fait de remplacer des instructions IF() imbriquées par une instruction CASE(). Utiliser des noms de champs et rédiger des commentaires plus courts permet également de raccourcir quelque peu la taille de votre formule, ce qui n’est pas négligeable.

Si votre champ de formule a une longueur nettement supérieure à 3 900 caractères, utilisez un champ de formule auxiliaire.

Limite de taille compilée

Une formule contenant moins de 3 900 caractères reste susceptible de dépasser la limite de taille compilée, qui est de 5 000 octets. Lorsqu’une formule dépasse la limite de taille compilée, créer des champs auxiliaires et raccourcir les noms de champs ou les commentaires n’est d’aucune utilité. Lorsque vous référencez un champ auxiliaire, sa taille compilée s’additionne à la taille compilée de la formule qui la référence. L’une des manières de réduire la taille compilée d’une formule consiste à y minimiser le nombre de références à d’autres champs de formule.

Certaines méthodes permettant de réduire la longueur d’une formule, telles que le remplacement d’instructions IF() imbriquées par une instruction CASE(), permettent également de réduire la taille compilée d’une formule.

Intéressons-nous à deux champs :
  • Date1__c est un champ de date.
  • Date2__c est un champ de formule qui crée une date à partir de Date1__c.
    DATE( YEAR( Date1__c ), MONTH( Date1__c ), DAY( Date1__c ) )

La formule suivante renvoie la date du dernier jour du mois auquel appartient une date donnée (nous supposons ici que février dure toujours 28 jours) :

DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 IF(
   OR(
     MONTH( SomeDate__c ) = 4,
     MONTH( SomeDate__c ) = 6,
     MONTH( SomeDate__c ) = 9,
     MONTH( SomeDate__c ) = 11
   ),
   30,
   IF(
     MONTH( SomeDate__c ) = 2,
     28,
     31
   )
 )
)

la formule vérifie d’abord s’il s’agit d’un mois durant 30 jours, puis s’il s’agit de février. Si ce n’est pas le cas, il s’agit d’un des mois restants, qui durent tous 31 jours. Ici, la formule emploie une fonction IF() imbriquée, peu lisible, dont la taille compilée est de 1 069 caractères pour Date1__c et de 7 271 caractères pour Date2__c, ce qui est considérable ! Pourquoi ? Parce que la formule fait référence à la date sept fois. Maintenant, comparez-là à cette version révisée :

DATE(
 YEAR( SomeDate__c ),
 MONTH( SomeDate__c ),
 CASE(
   MONTH( SomeDate__c ),
   2, 28,
   4, 30,
   6, 30,
   9, 30,
   11, 30,
   31
 )
)

Non seulement cette nouvelle formule est plus facile à lire, mais sa taille compilée n’est que de 645 caractères pour Date1__c et de 3 309 caractères pour Date2__c. Par ailleurs, la date n’y est référencée que trois fois au lieu de sept.

Voici maintenant un exemple issu de la communauté Réponses Salesforce. Une liste de sélection stocke le nom d’un agent responsable d’une opportunité. La formule calcule une commission en fonction de la valeur de la commission de base et d’un multiplicateur. Toutefois, comme Base_Commission__c est référencé dans chaque condition de l’instruction CASE(), la formule dépasse la taille compilée.

CASE( Agent__c,
  "John", Base_Commission__c * 2,
  "Jane", Base_Commission__c * 6,
  /* Repeat for many other agents */
  Base_Commission__c
)

Pour résoudre ce problème, vous pouvez déplacer Base_Commission__c en dehors de la fonction CASE(). La formule peut être réécrite comme suit :

Base_Commission__c * CASE( Agent__c,
  "John", 2,
  "Jane", 6,
  /* Repeat for many other agents */
  1
)

Même si Commission de base n’est qu’un champ de devise et non une formule, le fait de ne le référencer qu’une fois au lieu de plusieurs réduit considérablement la taille compilée de la formule.