XL 2010 Fonction personnalisée renvoyant le nombre d'années et fraction d'année entre deux dates

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

Je pensais qu’Excel aurait proposé une telle fonction, cela ne semble apparemment pas le cas.

J’ai rédigé cette fonction qui, ma foi, a l’air de marcher :
VB:
Function DiffAnneesEntreDeuxDates#(date1 As Date, date2 As Date)
'Renvoie le nombre d'années et, éventuellement, une fraction d'année entre 2 dates
'ATTENTION ! date1 < date2
'Ex : date1 = 01/08/1998 | date2 = 11/12/2020 --> 22,36

    DiffAnneesEntreDeuxDates = Round(DateDiff("yyyy", date1, date2) + (DateDiff("d", date1, date2) - DateDiff("yyyy", date1, date2) * 365.25) / 365.25, 2)

End Function
Peut-on, éventuellement, trouver plus simple ?
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Magic_Doctor
heu...... la réponse est dans la question et dans ta ligne de code


VB:
Function DiffAnneesEntreDeuxDates#(date1 As Date, date2 As Date)
'Renvoie le nombre d'années et, éventuellement, une fraction d'année entre 2 dates
'ATTENTION ! date1 < date2
'Ex : date1 = 01/08/1998 | date2 = 11/12/2020 --> 22,36

'DiffAnneesEntreDeuxDates = Round(DateDiff("yyyy", date1, date2) + (DateDiff("d", date1, date2) - DateDiff("yyyy", date1, date2) * 365.25) / 365.25, 2)
DiffAnneesEntreDeuxDates = Abs(Round((date2 - date1) / 365.25, 2))
End Function
Sub test()
MsgBox DiffAnneesEntreDeuxDates(#1/8/1998#, #11/12/2020#)
End Sub
et ca fonction dans l'ordre croissant et décroissant
🤪 ;)
 

patricktoulon

XLDnaute Barbatruc
oserais dire aussi que ta formulation était une erreur
il faut savoir que pas mal de fonction date excel et vba sont mathématiquement bête
exemple ici si je reprend ta formulation datedif "yyyy"
VB:
Sub test2()
 date1 = #1/8/2018#
 date2 = #7/7/2020#

    MsgBox Round(DateDiff("yyyy", date1, date2))
End Sub
comme tu va le voir ca va te donner "2" alors qu'entre les deux dates il n'y a pas 24 mois de passé
et si en plus tu ajoute le datedif "d" ben tu t’éloigne encore plus
et c'est pire avec 2007
à bon entendeur ;)
alors que dateX-dateY va te donner le nombre de jours entre les deux dates
utiliser "ABS" si négatif
enlever le jour1 si on veut le vrai interval (pour ne pas inclure les jours bornes )
le tout divisé par 365.25
et voila
 

Modeste geedee

XLDnaute Barbatruc
Bonsour®
oserais dire aussi que ta formulation était une erreur
il faut savoir que pas mal de fonction date excel et vba sont mathématiquement bête
exemple ici si je reprend ta formulation datedif "yyyy"
VB:
Sub test2()
date1 = #1/8/2018#
date2 = #7/7/2020#

    MsgBox Round(DateDiff("yyyy", date1, date2))
End Sub
comme tu va le voir ca va te donner "2" alors qu'entre les deux dates il n'y a pas 24 mois de passé
et si en plus tu ajoute le datedif "d" ben tu t’éloigne encore plus
et c'est pire avec 2007
à bon entendeur ;)
alors que dateX-dateY va te donner le nombre de jours entre les deux dates
utiliser "ABS" si négatif
enlever le jour1 si on veut le vrai interval (pour ne pas inclure les jours bornes )
le tout divisé par 365.25
et voila
:cool: toujours ces foutus problèmes de calendrier... ;)
Lorsque l'on parle de calendrier , on devrait utiliser la notion d'année civile (année grégorienne = 365,2425 jrs) un jour =86400 secondes
Au niveau millénaire La référence à l'année Julienne (365.250000 jrs) est erronée :
les millénaires non divisible par 4 ne sont pas bissextiles :)rolleyes:bug du calendrier Excel , il n'y a pas de 29 février 1900)

Lorsque l'on parle de durée (astronomie, espace) on utilise l'année sidérale (365.256363 jrs)
et même dans ce cas la durée d'un jour est différente : 86 164 secondes

il existe d'autres valeurs de l'année :

Le tableau suivant donne une comparaison entre les différentes années astronomiques :

AnnéeSecondesJours solairesJours sidéraux
31 556 925365,242 190 517366,242 574 48
31 557 600365,250 000 000366,250 406 20
31 558 149365,256 363 051366,256 777 77
31 558 433365,259 635 864366,260 068 46
Draconitique​
29 947 975346,620 075 883347,569 455 50

:cool:
 

Discussions similaires

Statistiques des forums

Discussions
311 729
Messages
2 081 970
Membres
101 852
dernier inscrit
dthi16088