OVH Cloud OVH Cloud

Précision du calcul sur l'age

8 réponses
Avatar
brinco
Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement en
fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en format
"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi puisque
lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez pas
c'est moi en fait) et que je fais une inscription au 01/01/06 (donc avant la
date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect, c'est
encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un bête
problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.

8 réponses

Avatar
Domi
Bonjour,

Il y'a peut-être plus simple, mais en calculant en mois et en divisant par
12 ?

=Ent(DiffDate("m";[DateNaissance];[DateInscription])/12)

Bonne journée.

Domi


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement en
fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en format
"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi puisque
lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez pas
c'est moi en fait) et que je fais une inscription au 01/01/06 (donc avant la
date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect, c'est
encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un bête
problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.


Avatar
Hervé DUCARNE

Bonjour,



Salut,


lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez
pas c'est moi en fait)



Bon anniversaire !



Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un
bête


problème de format ou de paramétrage mais je ne vois pas où).



Tiens, vas voir sur le site de Jessy, ici :
http://access.jessy.free.fr/htm/DateTime/Age.htm

Merci d'avance.



Pas de mal.

@+


Avatar
brinco
Salut,

ça marche pas non plus. Finalement j'ai fait avec le format 'jour' et en
divisant par 365,25 mais je trouve pas ça très propre.

Merci quand même.


Bonjour,

Il y'a peut-être plus simple, mais en calculant en mois et en divisant par
12 ?

=Ent(DiffDate("m";[DateNaissance];[DateInscription])/12)

Bonne journée.

Domi


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement en
fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en format
"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi puisque
lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez pas
c'est moi en fait) et que je fais une inscription au 01/01/06 (donc avant la
date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect, c'est
encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un bête
problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.




Avatar
Buddy
Salut,

le calcul des ages avec précision ne peut être fait aussi simplement à cause des variations des
années bissextiles. Dans une formule, si tu divise par 365,25, tu ne tomberas pas forcément juste à
tous les coups. J'ai eu le problème avec une date à la con : 16/07/1976 (cherches pas c'est la
mienne)
en format interne des dates cela donne
16/07/1976 => 27957
16/07/2006 => 38914
Ecart 10957 (Pareil avec DateDiff en jours)
et 10957/365.25 = 29.9986311 et pas 30 ! Or le 16 de chaque année je prend bien 1 an, si si je
t'assure :-)

Du coup j'ai abandonné les formules magiques du genre DateDiff pour une fonction

Function m_age(ByVal vp_date As String) As Integer
If IsDate(vp_date) = False Then Exit Function
Dim v_annee As Long, v_mois as Byte, v_jour as Byte
vp_date = Replace(vp_date, "/", "")
v_annee = Right(vp_date, 4)
v_mois = Mid(vp_date, 3, 2)
v_jour = Left(vp_date, 2)
m_age = Year(Now) - v_annee
If Month(Now) > v_mois Then Exit Function
If Month(Now) < v_mois Then m_age = m_age - 1: Exit Function
If Month(Now) = v_mois Then If Day(Now) < v_jour Then m_age = m_age - 1
End Function

Bon yapuka l'adapter à tes besoins

Ouala
Bye
Buddy


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement en
fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en format
"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi puisque
lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez pas
c'est moi en fait) et que je fais une inscription au 01/01/06 (donc avant la
date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect, c'est
encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un bête
problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.



--
Ouala
Bye
Buddy

PS : Oter 123 pour l'email

Avatar
Hervé DUCARNE
Bonjour,

T'as pas vu mon message au-dessus, dans lequel je lui donne un lien vers une
fonction de Jessy ?

@+

"Buddy" a écrit dans le message de
news:
Salut,

le calcul des ages avec précision ne peut être fait aussi simplement à
cause des variations des

années bissextiles. Dans une formule, si tu divise par 365,25, tu ne
tomberas pas forcément juste à

tous les coups. J'ai eu le problème avec une date à la con : 16/07/1976
(cherches pas c'est la

mienne)
en format interne des dates cela donne
16/07/1976 => 27957
16/07/2006 => 38914
Ecart 10957 (Pareil avec DateDiff en jours)
et 10957/365.25 = 29.9986311 et pas 30 ! Or le 16 de chaque année je prend
bien 1 an, si si je

t'assure :-)

Du coup j'ai abandonné les formules magiques du genre DateDiff pour une
fonction


Function m_age(ByVal vp_date As String) As Integer
If IsDate(vp_date) = False Then Exit Function
Dim v_annee As Long, v_mois as Byte, v_jour as Byte
vp_date = Replace(vp_date, "/", "")
v_annee = Right(vp_date, 4)
v_mois = Mid(vp_date, 3, 2)
v_jour = Left(vp_date, 2)
m_age = Year(Now) - v_annee
If Month(Now) > v_mois Then Exit Function
If Month(Now) < v_mois Then m_age = m_age - 1: Exit Function
If Month(Now) = v_mois Then If Day(Now) < v_jour Then m_age = m_age -
1

End Function

Bon yapuka l'adapter à tes besoins

Ouala
Bye
Buddy


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement
en


fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en
format


"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi
puisque


lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez
pas


c'est moi en fait) et que je fais une inscription au 01/01/06 (donc
avant la


date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect,
c'est


encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un
bête


problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.



--
Ouala
Bye
Buddy

PS : Oter 123 pour l'email





Avatar
Buddy
Salut

bah non, tu sais avec l'âge la vue baisse ;-)
(sérieux j'ai pas fais gaffe)

Ouala
Bye
Buddy


Bonjour,

T'as pas vu mon message au-dessus, dans lequel je lui donne un lien vers une
fonction de Jessy ?

@+

"Buddy" a écrit dans le message de
news:
Salut,

le calcul des ages avec précision ne peut être fait aussi simplement à cause des variations des
années bissextiles. Dans une formule, si tu divise par 365,25, tu ne tomberas pas forcément
juste à tous les coups. J'ai eu le problème avec une date à la con : 16/07/1976 (cherches pas
c'est la mienne)
en format interne des dates cela donne
16/07/1976 => 27957
16/07/2006 => 38914
Ecart 10957 (Pareil avec DateDiff en jours)
et 10957/365.25 = 29.9986311 et pas 30 ! Or le 16 de chaque année je prend bien 1 an, si si je
t'assure :-)

Du coup j'ai abandonné les formules magiques du genre DateDiff pour une fonction

Function m_age(ByVal vp_date As String) As Integer
If IsDate(vp_date) = False Then Exit Function
Dim v_annee As Long, v_mois as Byte, v_jour as Byte
vp_date = Replace(vp_date, "/", "")
v_annee = Right(vp_date, 4)
v_mois = Mid(vp_date, 3, 2)
v_jour = Left(vp_date, 2)
m_age = Year(Now) - v_annee
If Month(Now) > v_mois Then Exit Function
If Month(Now) < v_mois Then m_age = m_age - 1: Exit Function
If Month(Now) = v_mois Then If Day(Now) < v_jour Then m_age = m_age - 1
End Function

Bon yapuka l'adapter à tes besoins

Ouala
Bye
Buddy


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée automatiquement en
fonction de la date de naissance et d'une 'date d'inscription'. Ces deux
dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en format
"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi puisque
lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez pas
c'est moi en fait) et que je fais une inscription au 01/01/06 (donc avant la
date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect, c'est
encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car en
fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un bête
problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.



--
Ouala
Bye
Buddy

PS : Oter 123 pour l'email




--
Ouala
Bye
Buddy

PS : retirer 123 pour m'envoyer un email.



Avatar
Hervé DUCARNE
Re,

Avec l'age ou avec la fin de semaine ? :O)

Je sais pas s'il l'a vu aussi, mais en tout cas l'a pas fait de retour...

@+

"Buddy" a écrit dans le message de
news:
Salut

bah non, tu sais avec l'âge la vue baisse ;-)
(sérieux j'ai pas fais gaffe)

Ouala
Bye
Buddy


Bonjour,

T'as pas vu mon message au-dessus, dans lequel je lui donne un lien vers
une


fonction de Jessy ?

@+

"Buddy" a écrit dans le message de
news:
Salut,

le calcul des ages avec précision ne peut être fait aussi simplement à
cause des variations des



années bissextiles. Dans une formule, si tu divise par 365,25, tu ne
tomberas pas forcément



juste à tous les coups. J'ai eu le problème avec une date à la con :
16/07/1976 (cherches pas



c'est la mienne)
en format interne des dates cela donne
16/07/1976 => 27957
16/07/2006 => 38914
Ecart 10957 (Pareil avec DateDiff en jours)
et 10957/365.25 = 29.9986311 et pas 30 ! Or le 16 de chaque année je
prend bien 1 an, si si je



t'assure :-)

Du coup j'ai abandonné les formules magiques du genre DateDiff pour une
fonction




Function m_age(ByVal vp_date As String) As Integer
If IsDate(vp_date) = False Then Exit Function
Dim v_annee As Long, v_mois as Byte, v_jour as Byte
vp_date = Replace(vp_date, "/", "")
v_annee = Right(vp_date, 4)
v_mois = Mid(vp_date, 3, 2)
v_jour = Left(vp_date, 2)
m_age = Year(Now) - v_annee
If Month(Now) > v_mois Then Exit Function
If Month(Now) < v_mois Then m_age = m_age - 1: Exit Function
If Month(Now) = v_mois Then If Day(Now) < v_jour Then m_age m_age - 1
End Function

Bon yapuka l'adapter à tes besoins

Ouala
Bye
Buddy


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée
automatiquement en




fonction de la date de naissance et d'une 'date d'inscription'. Ces
deux




dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en
format




"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi
puisque




lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez
pas




c'est moi en fait) et que je fais une inscription au 01/01/06 (donc
avant la




date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect,
c'est




encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car
en




fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un
bête




problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.



--
Ouala
Bye
Buddy

PS : Oter 123 pour l'email




--
Ouala
Bye
Buddy

PS : retirer 123 pour m'envoyer un email.







Avatar
brinco
Bonjour,

Désolé de ne pas vous avoir répondu plus tôt mais j'étais occupé. J'ai
utilisé la fonction de Jessy et effectivement elle marche très bien.

Merci bcp pour votre aide.


Re,

Avec l'age ou avec la fin de semaine ? :O)

Je sais pas s'il l'a vu aussi, mais en tout cas l'a pas fait de retour...

@+

"Buddy" a écrit dans le message de
news:
Salut

bah non, tu sais avec l'âge la vue baisse ;-)
(sérieux j'ai pas fais gaffe)

Ouala
Bye
Buddy


Bonjour,

T'as pas vu mon message au-dessus, dans lequel je lui donne un lien vers
une


fonction de Jessy ?

@+

"Buddy" a écrit dans le message de
news:
Salut,

le calcul des ages avec précision ne peut être fait aussi simplement à
cause des variations des



années bissextiles. Dans une formule, si tu divise par 365,25, tu ne
tomberas pas forcément



juste à tous les coups. J'ai eu le problème avec une date à la con :
16/07/1976 (cherches pas



c'est la mienne)
en format interne des dates cela donne
16/07/1976 => 27957
16/07/2006 => 38914
Ecart 10957 (Pareil avec DateDiff en jours)
et 10957/365.25 = 29.9986311 et pas 30 ! Or le 16 de chaque année je
prend bien 1 an, si si je



t'assure :-)

Du coup j'ai abandonné les formules magiques du genre DateDiff pour une
fonction




Function m_age(ByVal vp_date As String) As Integer
If IsDate(vp_date) = False Then Exit Function
Dim v_annee As Long, v_mois as Byte, v_jour as Byte
vp_date = Replace(vp_date, "/", "")
v_annee = Right(vp_date, 4)
v_mois = Mid(vp_date, 3, 2)
v_jour = Left(vp_date, 2)
m_age = Year(Now) - v_annee
If Month(Now) > v_mois Then Exit Function
If Month(Now) < v_mois Then m_age = m_age - 1: Exit Function
If Month(Now) = v_mois Then If Day(Now) < v_jour Then m_age > m_age - 1
End Function

Bon yapuka l'adapter à tes besoins

Ouala
Bye
Buddy


Bonjour,

j'ai un formulaire dans lequel une zone âge est calculée
automatiquement en




fonction de la date de naissance et d'une 'date d'inscription'. Ces
deux




dates sont au format jj/mm/aa et j'utilise la fonction DiffDate en
format




"aaaa" afin d'obtenir mon âge.

Où est le problème me direz vous? En fait j'ai un problème d'arrondi
puisque




lorsque quelqu'un possède une date de naissance au 19/01/79 (cherchez
pas




c'est moi en fait) et que je fais une inscription au 01/01/06 (donc
avant la




date anniversaire), j'ai comme âge 27 ans alors que c'est incorrect,
c'est




encore 26 ans. J'ai malhaureusement besoin d'un résultat correct car
en




fonction de l'âge, mes traitements suivant peuvent être différents.

Voyez vous comment je pourrais m'en sortir. Je pense qu'il s'agit d'un
bête




problème de format ou de paramétrage mais je ne vois pas où).

Merci d'avance.



--
Ouala
Bye
Buddy

PS : Oter 123 pour l'email




--
Ouala
Bye
Buddy

PS : retirer 123 pour m'envoyer un email.