DATEDIF() : Calculer la différence entre deux dates
Catégorie : Fonctions & Formules
Publié par Mth le 26-07-2009

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)

 iconinfo_32 à noter : Date2 doit toujours être supérieure ou égale à Date1

Exemple 
mthxl_trait_500


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 :

Datedif 1


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. 



 

iconinfo_32 Nous remarquons à cette occasion que la fonction DATEDIF renvoie des valeurs entières. Si le chantier 3 a duré 2 mois, la fonction DATEDIF(C32 ;D32 ; "y") n’inscrit pas 0.1667 ans mais bien 0, car il y a moins d’une année complète.

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 :

Datedif 2

Toujours pour notre chantier 3, nous avons obtenu zéro pour le nombre d’années, 2 mois ou 63 jours, ces deux résultats ne changent donc pas ; en revanche, l’intervalle « md » restant, une fois les années et les mois retranchés, est bien de 1 jour : 63 moins 2 mois de 31 jours reste 1.

Idem pour le chantier 1, qui a duré 5 ans ou 61 mois ou 1886 jours. Le résultat de 1886 jours n’est pas forcément très parlant, on se représente mieux la durée exprimée en années mois et jours sur une longue durée. En fonction des intervalles choisis DATEDIF permet de dire que ce chantier a duré en tout 5 ans 1 mois et 28 jours.


 

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 :

Appliquée au chantier 2 (soit en remplaçant dans la formule ci dessus la ligne 30 par la ligne 31) cette formule renvoie : 1 ans 1 mois 1 jours . Le pluriel de ans et jours est ici mal venu. 



Comment gérer également les valeurs nulles :

Appliquée au chantier 3 notre dernière formule ci dessus donne: 0 an 2 mois 1 jour. Le problème du singulier et du pluriel est résolu, mais ce sont maintenant les zéros qui sont inesthétiques.

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.

Cette formule est puissante, mais peut sembler complexe si l’on débute avec Excel; il peut y avoir d’autres approches, certes plus longues et moins élégantes, en passant par un tableau intermédiaire ce qui permet de n’utiliser que des formulations simples.
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 :

Datedif 3


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 :

Datedif 4




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 résultat des trois formules précédentes est agrégé et séparé par un espace afin que les résultats ne soient pas collés les uns aux autres ( =SUPPRESPACE(E4&F4&G4) donnerait 2 mois1 jour sans séparation entre mois et 1 ce qui est inesthétique).

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:

Pour effectuer des calculs sur des âges, ancienneté du personnel, date de règlement des factures pour gérer des relances, il est souvent bien utile de connaître cette fonction DATEDIF.


mthxl_trait_780

En complément à cet article, pour voir d’autres exemples et vous permettre de vous entrainer, un fichier Excel est disponible en téléchargement. Il vous présente quelques exercices corrigés, adaptés à des situations concrètes :

Téléchargez les exercices corrigés !

Extrait du fichier d’exercices :

Téléchargez les exercices corrigés !
Pour toutes vos questions ou si vous rencontrez des difficultés, n'hésitez pas à rejoindre nos Forums de Discussions !