Tutoriels > Tutoriels & Astuces Excel > Fonctions & Formules > DATEDIF() : Calculer la différence entre deux dates

DATEDIF() : Calculer la différence entre deux dates

Publié par Mth le 26-07-2009 (358685 lectures)

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

 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. 
  • 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:

    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 :

      Formule :
    =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 :

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



  • 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 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:

  • 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.

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 !

Tags Tutoriel   Fonction   Formule   DATEDIF()  

 

Autres articles dans cette catégorie Publié le Vues
Rechercher une Fonction 28-05-2013 10083
T() - Tester et renvoyer du texte 02-07-2012 30728
EPURAGE() - Supprimer certains caractères indésirables 02-06-2012 85584
REMPLACER() - Echanger une chaîne de caractères par une autre 02-06-2012 29865
CTXT() - Convertir un nombre en texte 23-05-2012 83226
REPT() - Répéter des caractères un certain nombre de fois 26-04-2012 40748
L'Assistant Somme Conditionnelle 01-11-2011 16534
CELLULE() - Nom de l'onglet, du fichier ou du répertoire dans une cellule 03-10-2010 157011
EXACT() - Comparer deux chaînes de texte 26-04-2010 164346
Purgez les espaces inutiles ! 05-04-2010 209436
SUPPRESPACE() - Supprimer les espaces inutiles dans une cellule 05-04-2010 108600
STXT() - Extraire une chaîne de caractères au sein d'une autre 13-03-2010 395470
CHERCHE() TROUVE() - Retourne la position d'une chaîne de caractères 04-01-2010 185372
NBCAR() - Compter les caractères d'une chaîne de texte ou d'une plage de cellules 21-11-2009 45633
SUBSTITUE() - Remplacer une chaîne de texte par une autre 08-11-2009 209523
CAR() - CODE() : Utilisation des codes caractères 25-10-2009 76421
CONCATENER() - Assembler plusieurs chaînes de texte en une seule. 10-10-2009 43949
TEXTE() - Convertir une valeur numérique en texte formaté 29-09-2009 138981
DROITE() - GAUCHE() : Extraire les premiers ou derniers caractères d'une chaîne. 12-09-2009 478271
MAJUSCULE() - MINUSCULE() - NOMPROPRE(): Modifier la casse d'un texte 23-08-2009 13476
CNUM() - Convertir une chaîne en valeur numérique 19-08-2009 102784
DATEDIF() : Calculer la différence entre deux dates 26-07-2009 358686
Nommer une Plage Dynamique 06-12-2008 99883
Nommer une Plage de Cellules 05-12-2008 104163
Références Relatives & Absolues 05-12-2008 24140
Formule pour Nombres Premiers 29-08-2007 26629