Un écart d’un jour sur un calcul de différence de dates ne vient presque jamais de la formule elle-même. Le problème se situe en amont : Excel traite du texte formaté en date comme une vraie date, et la cellule affiche un résultat cohérent en apparence. Nous observons ce scénario dans la majorité des fichiers partagés entre services ou importés depuis un ERP.
Dates stockées comme texte : la cause réelle d’un calcul date différence Excel faux
Quand une colonne de dates provient d’un copier-coller depuis un autre classeur, un export CSV ou une base externe, Excel conserve souvent la valeur en tant que chaîne de caractères. La cellule affiche « 15/06/2025 », le format indique « Date », mais le contenu interne reste du texte brut.
Le résultat : toute formule de différence (soustraction directe, DATEDIF, JOURS, NB.JOURS.OUVRES) renvoie une erreur #VALEUR! ou, pire, un résultat silencieusement faux. Excel ne signale rien si l’une des deux cellules contient une date réelle et l’autre du texte converti implicitement.
Diagnostic rapide
Sélectionnez la cellule suspecte et passez-la en format « Standard » (Ctrl+1, catégorie Standard). Si elle affiche un nombre sériel (par exemple 45822), c’est une date authentique. Si elle continue d’afficher « 15/06/2025 » en clair, c’est du texte.
Autre indice : une colonne de dates-texte s’aligne à gauche par défaut, tandis qu’une colonne de dates numériques s’aligne à droite. Ce détail visuel suffit à repérer le problème avant même d’ouvrir une formule.
Correction fiable
La fonction DATEVAL convertit une chaîne en date sérielle. Encapsulez vos références dans DATEVAL avant tout calcul de différence :
=DATEVAL(A2) – DATEVAL(B2) renvoie un nombre de jours fiable, même si les deux cellules contiennent du texte. Pour les fichiers volumineux, nous recommandons de créer une colonne intermédiaire de conversion plutôt que d’imbriquer DATEVAL dans chaque formule métier.

Bug du 29 février 1900 : un écart d’un jour figé dans Excel
Excel considère que le 29 février 1900 existe. Ce jour n’a jamais existé (1900 n’est pas une année bissextile), mais Microsoft maintient ce comportement pour des raisons de compatibilité historique avec Lotus 1-2-3. Ce choix de conception, documenté par Microsoft, n’est pas prévu d’être corrigé.
Conséquence directe : toute différence de dates franchissant le 28 février 1900 est décalée d’un jour. Sur des calculs d’ancienneté ou de durée contractuelle remontant à des dates très anciennes, le résultat est systématiquement faux d’une unité.
En pratique, ce cas concerne peu de fichiers métier courants. Mais si vous manipulez des dates historiques ou des séries temporelles longues commençant avant mars 1900, vérifiez manuellement les résultats autour de cette période.
Système de dates 1900 contre 1904 : fichiers Mac et Windows incompatibles
Excel pour Windows utilise par défaut le système de dates 1900 (le jour 1 correspond au 1er janvier 1900). Excel pour Mac peut utiliser le système 1904 (le jour 1 correspond au 2 janvier 1904). La différence entre les deux systèmes est de 1 462 jours.
Quand un fichier créé sur Mac avec le système 1904 est ouvert sur Windows (ou inversement), les dates affichées se décalent de quatre ans et un jour. Les formules de différence entre deux dates du même fichier restent correctes, mais tout calcul croisant des dates issues de fichiers aux systèmes différents produit un écart massif et silencieux.
Vérification du système actif
- Dans Excel pour Windows : Fichier, Options, Options avancées, section « Lors du calcul de ce classeur », vérifiez si « Utiliser le calendrier depuis 1904 » est coché
- Dans Excel pour Mac : le réglage se trouve au même endroit dans les préférences du classeur
- Avant de fusionner deux fichiers, comparez le système de dates de chaque classeur et alignez-les sur le même référentiel
Formules de différence de dates Excel : DATEDIF, JOURS et soustraction directe
La soustraction directe (=B2-A2) renvoie un nombre de jours. C’est la méthode la plus transparente et celle que nous recommandons pour les calculs simples. Le résultat est un entier si les deux cellules ne contiennent pas de composante horaire.
La fonction JOURS (=JOURS(B2;A2)) fait exactement la même chose mais avec une syntaxe plus lisible dans les formules complexes. Attention à l’ordre des arguments : date de fin en premier, date de début en second.
DATEDIF reste non documentée dans l’aide officielle d’Excel, bien qu’elle fonctionne. Elle accepte trois unités principales :
- « Y » pour les années complètes entre deux dates
- « M » pour les mois complets entre deux dates
- « D » pour les jours, équivalent à la soustraction directe
- « YM » pour les mois restants après décompte des années, utile pour calculer un âge précis
Le piège fréquent avec DATEDIF : si la date de début est postérieure à la date de fin, la fonction renvoie #NOMBRE! sans explication claire. Validez toujours l’ordre chronologique de vos dates avant d’utiliser cette fonction.
Composante horaire cachée
Une cellule de date peut contenir une composante horaire invisible. « 15/06/2025 08:30 » et « 15/06/2025 » ne sont pas la même valeur sérielle. La soustraction des deux renvoie un nombre décimal, pas un entier. Pour neutraliser cette composante, encapsulez la référence dans ENT() : =ENT(B2)-ENT(A2).

Valider les données de dates avant tout calcul Excel
Corriger une formule ne sert à rien si les données d’entrée sont incohérentes. Nous recommandons une étape de validation systématique avant de construire un tableau de bord ou un calcul d’écart.
La fonction ESTNUM appliquée à une cellule de date renvoie VRAI si la valeur est bien un nombre sériel, FAUX si c’est du texte. Combinez-la avec NB.SI pour compter en une formule le nombre de cellules problématiques dans une colonne entière.
Un fichier dont les dates ne sont pas toutes numériques produira des résultats partiellement faux, sans aucun avertissement d’Excel. Cette vérification prend quelques secondes et évite des heures de débogage en aval.
Pour les imports récurrents (exports ERP, fichiers CSV, flux de données), automatisez la conversion via Power Query. Le typage des colonnes à l’import force la transformation en date dès l’entrée dans le classeur, ce qui élimine le problème à la source.

