DATEDIF() : Calculer la différence entre deux dates
La fonction DATEDIF() permet de calculer la différence entre deux dates en années, mois et jours.
Cette fonction n'est pas documentée dans l'aide Excel, mais elle s'avère bien pratique pour effectuer des calculs sur des âges ou des dates d'échéance.
Syntaxe : DATEDIF (Date1; Date2;Intervalle)
- Date 1 est la date de Départ
- Date 2 est la date de Fin
- Intervalle peut prendre différentes valeurs:
"y" : différence en années
"m" : différence en mois
"d" : différence en jours
"ym" : différence en mois, une fois les années soustraites
"yd" : différence en jours, une fois les années soustraites
"md" : différence en jours, une fois les années et les mois soustraits
à noter : Date2 doit toujours être supérieure ou égale à Date1
Exemple
Pour illustrer les possibilités de la fonction DATEDIF, prenons l’exemple de 3 chantiers dont nous connaissons les dates de démarrage et de fin, et pour lesquels nous souhaitons connaître la durée :
Pour le Chantier 3, les formules inscrites en ligne 32 indiquent qu’il a duré moins d’un an, ou 2 mois, ou encore 63 jours.
Les trois autres intervalles disponibles de la fonction permettent d’obtenir le nombre de mois ou de jours résiduels une fois les années soustraites, ou les mois et années soustraites :
Ce résultat peut être présenté dans un tableau comme dans notre exemple, mais il peut s’avérer utile de l’écrire en texte. Utilisons pour cela l’opérateur de concaténation : & (équivalent à la fonction concatener() )
Pour obtenir les années : =DATEDIF(C30;D30;"y") renvoie 5; la formule =DATEDIF(C30;D30;"y")&"ans" renvoie le texte 5 ans.
Le même raisonnement est applicables pour les mois et les jours. Pour écrire sous forme de texte le résultat 5 ans 1 mois 28 jours il suffit donc d’appliquer la formule suivante :
Formule :
=DATEDIF(C30;D30;"y")&" ans "&DATEDIF(C30;D30;"ym")&" mois "&DATEDIF(C30;D30;"md")&" jours"
Comment gérer le singulier/pluriel :
- Afin que le résultat soit correct aussi bien au singulier qu’au pluriel, une solution serait de mettre les "s" entre parenthèses :
La formule =DATEDIF(C31;D31;"y")&" an(s)" renvoie le texte 1 an(s)
- Une autre solution est de tester si le nombre d'années/jours sont supérieurs à 1:Formule :
Par exemple, pour le nombre d’années : =SI(DATEDIF(C31;D31;"y")>1;" ans ";" an ") renvoie ans au pluriel si le nombre d'années est >1, an au singulier dans le cas contraire.
Le raisonnement est le même pour le nombre de jours, et pour donner le résultat 1 an 1 mois 1 jour la formule devient :=DATEDIF(C31;D31;"y") & SI(DATEDIF(C31;D31;"y")>1;" ans ";" an ") & DATEDIF(C31;D31;"ym") & " mois " & DATEDIF(C31;D31;"md") & SI(DATEDIF(C31;D31;"md")>1;" jours ";" jour ")
Comment gérer également les valeurs nulles :
Sur son excellent site, Laurent Longre (site aujourd'hui hébergé sur excelabo) met à notre disposition une formule qui, à l’aide d’un format personnalisé, de la fonction datedif() associée aux fonctions texte() et supprespace(), permet de résoudre à la fois le problème d'orthographe et celui des valeurs nulles.
Formule de Laurent Longre adaptée à notre exemple :
Formule :
=SUPPRESPACE(SI(D32-C32;TEXTE(DATEDIF(C32;D32;"y");"[>1]0"" ans"";[>]""1 an"";")&TEXTE(DATEDIF(C32;D32;"ym");"[>] 0"" mois "";") &TEXTE(DATEDIF(C32;D32;"md");"[>1]0"" jours"";[>]""1 jour"";");"0 jour"))
Superbe formule, applicable à tous les cas rencontrés, et qui renvoie bien 2 mois 1 jour dans notre exemple.
Par exemple dans le tableau ci dessous, trois formules pour les années/mois/jours gérant les valeurs nulles ainsi que le singulier/pluriel, et la dernière synthétisant l’ensemble :
Pour les années en colonne E:
Formule :
=SI(DATEDIF(C4;D4;"y")=0;"";SI(DATEDIF(C4;D4;"y")=1;DATEDIF(C4;D4;"y")&" an";DATEDIF(C4;D4;"y")&" ans"))
Décomposons la formule :
- Si le résultat de DATEDIF(C4 ;D4) est égal à zéro, cela signifie qu’il y a moins d’un an entre les deux dates, dans ce cas nous n’affichons pas le résultat et mettons un vide (deux guillemets)
- Si non nous faisons un second test : Si le résultat de DATEDIF(C4 ;D4) est égal à 1, alors nous affichons le résultat suivi de an au singulier soit DATEDIF(C4 ;D4)& " an"
- Dernier cas possible une fois que les deux premiers ont été traités, il y a plusieurs années séparant les deux dates, nous affichons donc le résultat mais suivi de ans au pluriel soit en formule DATEDIF(C4;D4)& " ans".
Pour les mois en colonne F:
Formule :
=SI(DATEDIF(C4;D4;"ym")=0;"";DATEDIF(C4;D4;"ym")&" mois")
La formule est plus simple puisque mois est invariable, il suffit de tester si le nombre de mois est nul afin d’afficher soit vide (avec deux guillemets sans espace "") soit le résultat suivi de mois.
Pour les jours en colonne G:
Formule :
=SI(DATEDIF(C4;D4;"md")=0;"";SI(DATEDIF(C4;D4;"md")=1;DATEDIF(C4;D4;"md")&" jour";DATEDIF(C4;D4;"md")&" jours"))
Même principe que pour les années, un premier test pour gérer les valeurs nulles, suivi d’un second pour écrire jour au singulier ou au pluriel.
La concaténation colonne H:
Formule :
=SUPPRESPACE(E4&" "&F4&" "&G4)
Le tout est intégré dans la fonction SUPPRESPACE() afin de supprimer les espaces inutiles.
En effet, dans notre exemple n’ayant pas d’année complète la cellule E4 est vide puis suivie d’un espace avant d’inscrire le nombre de mois. Cet espace est inutile, la fonction SUPPRESPACE() permet de l’éliminer.
A noter:
- Lorsque les dates sont saisies directement dans la formule, les noter entre guillemets:
Exemple : DATEDIF("13/03/1964";"31/12/2009";"y") - DATEDIF() gère les années bissextiles.
Extrait du fichier d’exercices :