SharePoint Lists : corriger l’erreur #Name? et calculer la différence de jours sans DATEDIF

Dans une liste SharePoint, un calcul « jours entre deux dates » renvoyait l’erreur #Name? avec DATEDIF. Voici un résumé pragmatique : pourquoi l’erreur survient, quelle formule utiliser, et comment fiabiliser le calcul, avec variantes et bonnes pratiques.

Sommaire

Résumé du problème

Objectif : créer une colonne calculée « Date Difference » qui donne le nombre de jours entre Confirmed Start Date et Confirmed Shipping Date. Si l’une des deux dates est vide, retourner 0. L’utilisateur avait tenté :

=IF(OR([Confirmed Shipping Date]=" ", [Confirmed Start Date]=" "), "0", DATEDIF([Confirmed Start Date],[Confirmed Shipping Date], "d"))

Résultat : affichage #Name? au lieu de 0 (et calcul impossible).

Pourquoi l’erreur #Name? apparaît

  • DATEDIF n’est pas pris en charge dans les colonnes calculées SharePoint : c’est une fonction héritée d’Excel. En liste SharePoint, elle est généralement inconnue, d’où #Name?.
  • Test de vide incorrect : comparer à la chaîne " " (espace) n’est pas équivalent à « vide ». Il faut tester "" (chaîne vide) ou utiliser une approche équivalente.
  • Type de retour incohérent : renvoyer "0" (texte) peut forcer la colonne calculée à devenir Texte et gêner tri/agrégations. Mieux : renvoyer le nombre 0 (sans guillemets) et définir la colonne sur le type Nombre.
  • Séparateur d’arguments : selon la langue/paramètres régionaux du site, SharePoint attend , (virgule) ou ; (point-virgule). Une virgule au lieu d’un point-virgule (ou inversement) peut provoquer des erreurs.
  • Nom de colonne : il doit correspondre exactement à l’affichage (ou être encadré par [ ]). Un nom mal saisi déclenche aussi #Name?.

Solution recommandée : formule simple et compatible

En SharePoint, la manière la plus fiable de calculer des jours entre deux dates est de soustraire les dates. La différence renvoyée est en jours (éventuellement décimaux si vos colonnes sont « Date & heure »). Utilisez :

Version avec virgules (site en-US, etc.)

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), 0, INT([Confirmed Shipping Date]-[Confirmed Start Date]))

Version avec point-virgule (site fr-FR, etc.)

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); 0; INT([Confirmed Shipping Date]-[Confirmed Start Date]))

Explications :

  • OR(...) teste si l’une des deux dates est vide.
  • 0 renvoie un nombre (pas une chaîne), utile pour totaliser ou filtrer.
  • [Confirmed Shipping Date]-[Confirmed Start Date] calcule la différence en jours.
  • INT(...) restitue un entier (pas de décimales). Conserve une logique exclusive du jour de départ : du 01/01 au 03/07/2024 donne 66 (sans +1).

Variante : empêcher les valeurs négatives

Si une date d’expédition est antérieure à la date de départ (erreur de saisie), la soustraction produira un nombre négatif. Pour borner à 0 :

Version avec virgules

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), 0, IF([Confirmed Shipping Date]<[Confirmed Start Date], 0, INT([Confirmed Shipping Date]-[Confirmed Start Date])))

Version avec point-virgule

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); 0; IF([Confirmed Shipping Date]<[Confirmed Start Date]; 0; INT([Confirmed Shipping Date]-[Confirmed Start Date])))

Variante : conserver les décimales (si vos colonnes sont « Date & heure »)

Si vos colonnes stockent aussi l’heure, la soustraction peut donner des décimales. Pour afficher un nombre arrondi (2 décimales par exemple) :

Version avec virgules

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), 0, ROUND([Confirmed Shipping Date]-[Confirmed Start Date], 2))

Version avec point-virgule

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); 0; ROUND([Confirmed Shipping Date]-[Confirmed Start Date]; 2))

Variante : si vous souhaitez un retour Texte

Si, pour des raisons d’affichage, vous devez renvoyer une chaîne (par ex. « 0 »), sachez que la colonne calculée sera de type Texte. Dans ce cas :

Version avec virgules

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), "0", TEXT(INT([Confirmed Shipping Date]-[Confirmed Start Date]), "0"))

Version avec point-virgule

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); "0"; TEXT(INT([Confirmed Shipping Date]-[Confirmed Start Date]); "0"))

Recommandation : dans la plupart des cas, préférez un retour numérique (type de colonne : Nombre, 0 décimales), bien plus pratique pour trier, agréger et filtrer.

Étapes détaillées pour mettre en place la colonne calculée

  1. Assurez-vous que Confirmed Start Date et Confirmed Shipping Date sont de type Date (idéalement « Date uniquement » pour ignorer l’heure).
  2. Ouvrez Paramètres de la liste > Créer une colonne.
  3. Choisissez Colonne calculée (calculée à partir d’autres colonnes).
  4. Nom : Date Difference.
  5. Formule : copiez l’une des formules ci‑dessus selon votre séparateur d’arguments.
  6. Le type de données retourné par cette formule : sélectionnez Nombre.
  7. Nombre de décimales : 0 (ou plus si vous conservez l’heure).
  8. Enregistrez. Vérifiez ensuite le calcul sur quelques lignes de test.

Exemples d’entrées et résultats attendus

Confirmed Start DateConfirmed Shipping DateRésultat (formule INT)Commentaire
(vide)03/28/20240Une des deux dates est vide → 0
02/13/2024(vide)0Une des deux dates est vide → 0
01/12/202403/28/202476Différence exclusive du jour de départ
01/01/202403/07/202466Exemple de référence
03/29/202403/28/20240 (avec variante anti-négatifs)Valeur négative aplatie à 0

Bonnes pratiques pour fiabiliser la solution

  • Type « Date uniquement » si le temps n’a pas d’intérêt : cela évite des décimales et des écarts liés aux heures/UTC.
  • Retour numérique : choisissez Nombre comme type de retour. Évitez "0" (chaîne) quand vous avez besoin de tris/agrégations.
  • Arrondi maîtrisé : utilisez INT pour tronquer, ou ROUND(..., n) si vous gardez l’heure et souhaitez afficher 1,25 jour par exemple.
  • Contrôles de saisie : l’ordre logique est StartShipping. La variante anti‑négatifs sécurise les erreurs.
  • Nommer clairement : noms de colonnes explicites (sans caractères spéciaux si possible) pour limiter les fautes de frappe.
  • Préférer "" à " " : la chaîne vide est le bon test de « valeur non fournie ».
  • Respecter le séparateur local : si votre site est en français, le point‑virgule (;) est souvent requis entre les arguments.

Diagnostic : résoudre rapidement #Name?

Si l’erreur persiste, suivez cette check‑list :

  1. Fonctions supportées : remplacez toute fonction non prise en charge (DATEDIF, etc.) par des opérations natives (soustraction de dates).
  2. Espaces cachés & guillemets : supprimez les espaces superflus, employez des guillemets droits (").
  3. Mise en forme régionale : testez la même formule en remplaçant , par ; si nécessaire.
  4. Noms exacts : vérifiez l’orthographe exacte entre crochets : [Confirmed Start Date], [Confirmed Shipping Date].
  5. Type de retour : confirmez que la colonne calculée retourne bien Nombre si vous renvoyez des nombres.
  6. Colonnes sources : vos deux colonnes doivent être de type Date (pas « Texte »).

Choisir le mode de comptage des jours

Selon la règle métier, vous pouvez vouloir compter « à partir du lendemain » (exclusif, « du 01 au 02 » = 1 jour) ou « en incluant le jour de départ » (inclusif, « du 01 au 01 » = 1 jour). Par défaut, la soustraction de dates est exclusive. Pour un comptage inclusif, ajoutez +1 :

Version avec virgules

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), 0, INT([Confirmed Shipping Date]-[Confirmed Start Date])+1)

Version avec point-virgule

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); 0; INT([Confirmed Shipping Date]-[Confirmed Start Date])+1)

Rendre la valeur parlante à l’écran (optionnel)

Pour améliorer la lisibilité, vous pouvez formater la colonne dans la vue (formatage JSON) afin de colorer la valeur en fonction de seuils. Exemple minimal :

{
  "elmType": "div",
  "attributes": {
    "class": "=if(@currentField >= 15, 'sp-field-severity--warning', 'sp-field-severity--good')"
  },
  "style": { "font-weight": "600" },
  "txtContent": "@currentField"
}

Ceci colore en « warning » au‑delà de 15 jours, sinon en « good ». Adaptez les seuils à votre SLA.

Alternatives quand une colonne calculée n’est pas idéale

  • Power Automate : calculez et écrivez la valeur dans une colonne Nombre à la création/modification. Avantage : la valeur est persistante (export, API, Power BI). Inconvénient : une dépendance supplémentaire.
  • Power Apps (si formulaire personnalisé) : calculez à l’écran (ex. DateDiff(Start, Ship, Days)) pour guider l’utilisateur, et enregistrez dans une colonne Nombre.
  • Mesure côté rapport : si l’usage est surtout analytique, calculez la différence dans Power BI plutôt que dans la liste.

Foire aux questions express

Q : Pourquoi ne pas utiliser DATEDIF ?
R : La fonction n’est pas supportée dans les colonnes calculées SharePoint. La soustraction entre dates est la méthode native, plus simple et portable.

Q : Dois‑je utiliser ISBLANK ?
R : Le test [Colonne]="" suffit le plus souvent. Si ISBLANK est disponible dans votre environnement, il est équivalent ; sinon gardez ="".

Q : Comment gérer l’heure/UTC ?
R : Si vos colonnes sont « Date & heure », utilisez INT pour ignorer l’heure, ou ROUND(..., 2) pour exposer des fractions de jour. En cas de décalages (Fuseau/UTC), préférez « Date uniquement ».

Q : Le résultat devrait être 0 quand les dates sont identiques ?
R : Oui avec le calcul exclusif (INT(Ship-Start)). Si la règle veut compter le jour de départ, ajoutez +1.

Modèles prêts à copier

Calcul exclusif, entier, anti‑négatifs :

Virgules

=IF(OR([Confirmed Start Date]="",[Confirmed Shipping Date]=""), 0, IF([Confirmed Shipping Date]<[Confirmed Start Date], 0, INT([Confirmed Shipping Date]-[Confirmed Start Date])))

Point-virgule

=IF(OR([Confirmed Start Date]="";[Confirmed Shipping Date]=""); 0; IF([Confirmed Shipping Date]<[Confirmed Start Date]; 0; INT([Confirmed Shipping Date]-[Confirmed Start Date])))

Conclusion

Le calcul de jours entre deux dates dans une liste SharePoint se fait de manière fiable sans DATEDIF, simplement en soustrayant les colonnes de type Date. En testant correctement les vides (=""), en retournant un nombre et en choisissant INT (ou ROUND), vous obtenez un résultat propre, triable et agrégable. La variante anti‑négatifs sécurise la saisie, et l’option inclusif (+1) vous permet d’aligner le calcul sur votre règle métier. En résumé : une formule courte, compatible et opérationnelle, qui remplace avantageusement DATEDIF et met fin à l’erreur #Name?.

Sommaire