Datediff mais résultat différent VBA ou excel

tom59

XLDnaute Nouveau
Bonjour @ tous,

Ca fait plusieurs heures que je cherche une solution mais franchement ça me dépasse...

Je veux faire une différence de dates afin de calculer un age. par exemple : 09/11/1982 et 24/01/2006.

Sous excel, avec la formule =DATEDIF(C2;A4;'y') j'obtiens 23 ans ce que je veux obtenir.

Avec VBA, dans un labelBox intitulé 'Age' que je configure ainsi :
Age = DateDiff('yyyy', Date_de_naissance, Date) avec Date_de_naissance à 09/11/1982 bien sur, j'obtiens 24 :angry:

Existe t il une fonction VBA qui prends en compte les jours pour calculer une différence d'année ?

Merci d'avance

Message édité par: tom59, à: 24/01/2006 22:14
 

Jacques87

XLDnaute Accro
Bonsoir

Lors de la comparaison des dates 31 décembre et 1er janvier de l'année suivante, DateDiff avec la valeur Année ('yyyy') renvoie 1, même si la différence est seulement d'un jour.

alors, comme cela à la volée, si tu essayais de calculer le nombre de jours que tu diviserais par 365
age = DATEDIF('d';date1;date2)
Evidemment il faudra arrondir à la valeur entière la plus proche

Cette idée est peut être loufoque, mais ....

Bonne soirée
 

Jacques87

XLDnaute Accro
C'est encore moi
Ta question me turlupinait, mais m'intéressait
Ma proposition je la trouvais vraiment loufoque
Donc j'ai cherché et voila ce que j'ai trouvé (attention je ne l'ai pas testé)

Function Age(varDateNaiss As Date) As Integer
' Objectif: Calculer l'âge de quelqu'un à partir de sa date de naissance
' Le résultat est un nombre d'années pleines.
Dim varAge As Integer
If IsNull(varDateNaiss) Then Age = 0: Exit Function
' Calcul de l'écart entre aujourd'hui et la date lue
varAge = DateDiff('yyyy', varDateNaiss, Now)
' Teste si le mois ou le jour de la date du jour est < que celui de la date de naissance
' pour toujours obtenir un nombre d'années pleines
If Date < DateSerial(Year(Now), Month(varDateNaiss), Day(varDateNaiss)) Then
varAge = varAge - 1
End If
Age = varAge
End Function

fais moi part de tes impressions

Message édité par: Jacques87, à: 24/01/2006 23:10
 

tom59

XLDnaute Nouveau
alors, comme cela à la volée, si tu essayais de calculer le nombre de jours que tu diviserais par 365
age = DATEDIF('d';date1;date2)
Evidemment il faudra arrondir à la valeur entière la plus proche

C'est une idée interessante mais je pense qu'il ne faut pas arrondir le résultat à l'entier naturel le plus proche, plustot supprimer l'affichage des décimales sinon avec une différence à partir de 6 mois j'ai de nouveau le meme probleme.

Vois ce lien :
Lien supprimé

tu auras peut-être un début de réponse

Oui tu as raison, j'ai trouvé la solution dans le fichier attaché, je la recopie au cas ou ça interesserai quelqu'un :

L'inconvénient de DateDiff, c'est qu'il arrondi le résultat : Si on cherche le nombre d'années entre deux dates alors que ces dates ne sont séparées que de 11 mois, il renverra 1 an.
Pour éviter cela, après avoir récupéré le nombre, on teste si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi. Dans ce cas, on enlève 1 et le tour est joué.

Voici le code :
Code:
Dim An as long
An = DateDiff('yyyy', maDate1, maDate2)
    If DateAdd('yyyy', An, maDate1) > maDate2 Then An = An - 1
'il ne reste plus qu'à afficher an !


Merci pour vos réponses et la rapidité

Message édité par: tom59, à: 24/01/2006 23:45

Message édité par: tom59, à: 24/01/2006 23:49
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 136
Membres
103 129
dernier inscrit
Atruc81500