OVH Cloud OVH Cloud

calcul d'age

32 réponses
Avatar
Bernard TELLIEZ
Bonjour

A partir de la date de naissance et de la date du jour, je voudrais calculer
l'age d'une personne
sous la forme ans,mois,jours

ex 43ans 08mois 03 jours

Pouvez-vous me conseiller?

Merci

10 réponses

1 2 3 4
Avatar
Modeste
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Ben dit donc, y a vraiment pas de VRAI solution
Ceci explique cela
http://cjoint.com/?jduYMvj4Ey
N'explique pas devrais-je dire.



Ce que concluait Josiane BdR :
"la vraie vérité est détenue par le vieux forçat qui, au fil des jours, sans
ordinateur, garnit le mur de sa geôle de barres verticales durement
inscrites du bout du manche de sa cuillère en bois. "
;o)))


--
@+
;o)))
Avatar
AndréBdR
Deux jumeaux, qui naissent à un jour d'intervalle (ça arrive), s'ouvrent à
la vie le 28 Février pour le premier, et le lendemain pour le second.
Si l'année est bissextile, ils sont nés le même mois.
Si c'est une année normale, ils sont nés sur deux mois différents.
Ils conserveront toujours cette journée d'écart, quelle que soit la méthode
de calcul dirait Modeste.
C'était aussi l'avis de ma grand-mère qui ne connaissait rien en
informatique.
Moi, DATEDIF, j'ai compris que je ne l'utiliserai jamais.


"michdenis" a écrit dans le message de
news:
Au moins de mai, il y avait eu une discussion sur le sujet
mais à propos de "DateDif"....très intéressant :

http://groups.google.fr/group/microsoft.public.fr.excel/search?hl=fr&group=microsoft.public.fr.excel&q=pb+calcul+duree+avec+datedif&qt_g=Rechercher+dans+ce+groupe

Où j'avais proposé cette procédure :

Une fonction personnelle parue ici sous la plume de "cervolent"

'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1
+
ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------




"Jacky" a écrit dans le message de news:
u$
Merci Modeste
Belle démo
L'étonnant, ne serait-ce que pour calculer l'âge du Mgr.(en plus un mois
de
février) ,que MS ne dispose pas de fonction correcte.
Datedif n'étant pas une fonction répertoriée....

--
Salutations
JJ


"Modeste" a écrit dans le message de news:

Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Il y a tout de même un écart de deux jours entre le code de LL et le
tien dans certain cas.
Je veux pas chipoté, mais deux jours .....c'est beaucoup sur moins de
deux ans.
http://cjoint.com/?jdkp0mEf30



;o)))
C'est tout a fait ce que je disais, cet écart pourrai même aller jusque 4
jours !

Partant du principe que j'ai un profond respect pour notre mentor...
et conformement aux innombrables échanges homériques ayant déja eut lieu
ici
même
ma proposition reflete ce que j'ai dis précédement :
Le probleme de l'âge est un classique qui n'admet de solution exacte qu'en
terme de jours.
l'utilisation d'une durée annuelle constante, et d'une subdivision
mensuelle
qui est à la fois multiple de la division jour et sous-multiple de la
division année
1 an= 365,256354 jours
1 mois= 30,438029 jours
permet la réversibilité de la fonction proposée ce qui est un minimum en
terme d'unicité :

;o)))
avec la logique Modeste
17/02/1939 => 69 ans 6 mois 15 jours
réversibilité Modeste
AUJOURDHUI()-((69*365,256354) +(6 * 30,438029) +15)  Fév 1939
reversibilité EXCEL
DATE(ANNEE(AUJOURDHUI())-69;MOIS(AUJOURDHUI())-6;-15) = 13 Fév 1939

avec la logique DateDif
17/02/1939 => 69 ans 6 mois 17 jours
réversibilité Modeste
AUJOURDHUI()-((69*365,256354) +(6 * 30,438029) +17) = 15 Fév 1939
reversibilité EXCEL
DATE(ANNEE(AUJOURDHUI())-69;MOIS(AUJOURDHUI())-6;-17) = 11 Fév 1939

qui pourra éventuellement confirmer ou infirmer ??
ou bien fournir un algorithme quant à la réversibilité de la méthode
DateDif

le Banni du 17 février est exclu du challenge ;o)))


--
--
@+
;o)))




Avatar
michdenis
C'est ce que je disais, la proposition de Cervolent
est la meilleure des solutions inexactes ...;-))



"Jacky" a écrit dans le message de news:
%
Re...
Je viens de parcourir.....
Ben dit donc, y a vraiment pas de VRAI solution
Ceci explique cela
http://cjoint.com/?jduYMvj4Ey
N'explique pas devrais-je dire.
--
Salutations
JJ


"michdenis" a écrit dans le message de news:

Au moins de mai, il y avait eu une discussion sur le sujet
mais à propos de "DateDif"....très intéressant :

http://groups.google.fr/group/microsoft.public.fr.excel/search?hl=fr&group=microsoft.public.fr.excel&q=pb+calcul+duree+avec+datedif&qt_g=Rechercher+dans+ce+groupe

Où j'avais proposé cette procédure :

Une fonction personnelle parue ici sous la plume de "cervolent"

'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1
+
ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------


Avatar
Jacky
Re...
Moi, DATEDIF, j'ai compris que je ne l'utiliserai jamais



Celle de modeste me tente car elle permet de remonte dans le temps sans
erreur.
Pour MA date de naissance, j'utiliserai celle de "cervolent", .....c'est
toujours un jour de gagné ;o))))

Les MVPs n'ont pas de pouvoir pour ce genre d'erreur chez MS ???

--
Salutations
JJ


"AndréBdR" a écrit dans le message de news:
48bee2e7$0$954$
Deux jumeaux, qui naissent à un jour d'intervalle (ça arrive), s'ouvrent à
la vie le 28 Février pour le premier, et le lendemain pour le second.
Si l'année est bissextile, ils sont nés le même mois.
Si c'est une année normale, ils sont nés sur deux mois différents.
Ils conserveront toujours cette journée d'écart, quelle que soit la
méthode de calcul dirait Modeste.
C'était aussi l'avis de ma grand-mère qui ne connaissait rien en
informatique.
Moi, DATEDIF, j'ai compris que je ne l'utiliserai jamais.


"michdenis" a écrit dans le message de
news:
Au moins de mai, il y avait eu une discussion sur le sujet
mais à propos de "DateDif"....très intéressant :

http://groups.google.fr/group/microsoft.public.fr.excel/search?hl=fr&group=microsoft.public.fr.excel&q=pb+calcul+duree+avec+datedif&qt_g=Rechercher+dans+ce+groupe

Où j'avais proposé cette procédure :

Une fonction personnelle parue ici sous la plume de "cervolent"

'----------------------------------------------
Function TEMPSECOULE(Debut, Fin) As String
Dim ValAnnée As Integer, ValMois As Integer
Dim ValJour As Integer, ValJour1 As Integer, ValJour2 As Integer

ValAnnée = Year(Fin) - Year(Debut)
ValMois = Month(Fin) - Month(Debut)
If ValMois < 0 Then
ValAnnée = ValAnnée - 1
ValMois = ValMois + 12
End If
ValJour1 = Day(Debut)
ValJour2 = Day(Fin)
ValJour = ValJour2 - ValJour1
If ValJour < 0 Then
ValJour = Day(DateSerial(Year(Debut), Month(Debut) + 1, 0)) - ValJour1
+
ValJour2
If ValMois > 0 Then
ValMois = ValMois - 1
Else
ValAnnée = ValAnnée - 1
ValMois = 11
End If
End If
'les tests qui suivent ne servent qu'aux accrords de pluriel !!
If ValAnnée > 1 Then
antexte = " ans "
Else
antexte = " an "
End If
If ValJour > 1 Then
jrtexte = " jours"
Else
jrtexte = " jour"
End If
TEMPSECOULE = ValAnnée & antexte & ValMois & " mois " & ValJour & jrtexte
End Function
'----------------------------------------------




"Jacky" a écrit dans le message de news:
u$
Merci Modeste
Belle démo
L'étonnant, ne serait-ce que pour calculer l'âge du Mgr.(en plus un mois
de
février) ,que MS ne dispose pas de fonction correcte.
Datedif n'étant pas une fonction répertoriée....

--
Salutations
JJ


"Modeste" a écrit dans le message de news:

Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Il y a tout de même un écart de deux jours entre le code de LL et le
tien dans certain cas.
Je veux pas chipoté, mais deux jours .....c'est beaucoup sur moins de
deux ans.
http://cjoint.com/?jdkp0mEf30



;o)))
C'est tout a fait ce que je disais, cet écart pourrai même aller jusque 4
jours !

Partant du principe que j'ai un profond respect pour notre mentor...
et conformement aux innombrables échanges homériques ayant déja eut lieu
ici
même
ma proposition reflete ce que j'ai dis précédement :
Le probleme de l'âge est un classique qui n'admet de solution exacte
qu'en
terme de jours.
l'utilisation d'une durée annuelle constante, et d'une subdivision
mensuelle
qui est à la fois multiple de la division jour et sous-multiple de la
division année
1 an= 365,256354 jours
1 mois= 30,438029 jours
permet la réversibilité de la fonction proposée ce qui est un minimum en
terme d'unicité :

;o)))
avec la logique Modeste
17/02/1939 => 69 ans 6 mois 15 jours
réversibilité Modeste
AUJOURDHUI()-((69*365,256354) +(6 * 30,438029) +15)  Fév 1939
reversibilité EXCEL
DATE(ANNEE(AUJOURDHUI())-69;MOIS(AUJOURDHUI())-6;-15) = 13 Fév 1939

avec la logique DateDif
17/02/1939 => 69 ans 6 mois 17 jours
réversibilité Modeste
AUJOURDHUI()-((69*365,256354) +(6 * 30,438029) +17) = 15 Fév 1939
reversibilité EXCEL
DATE(ANNEE(AUJOURDHUI())-69;MOIS(AUJOURDHUI())-6;-17) = 11 Fév 1939

qui pourra éventuellement confirmer ou infirmer ??
ou bien fournir un algorithme quant à la réversibilité de la méthode
DateDif

le Banni du 17 février est exclu du challenge ;o)))


--
--
@+
;o)))







Avatar
Modeste
Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Les MVPs n'ont pas de pouvoir pour ce genre d'erreur chez MS ???



ce n'est pas un probleme MS,
c'est un probleme général pour les calculs en années, mois, jours
la notion de mois n'est pas une fraction exacte de l'année !!!!

--
--
@+
;o)))
Avatar
Jacky
Re...
la notion de mois n'est pas une fraction exacte de l'année !!!!


Evidemment !
Désolé, la question était idiote.
A force....

--
Salutations
JJ


"Modeste" a écrit dans le message de news:

Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Les MVPs n'ont pas de pouvoir pour ce genre d'erreur chez MS ???



ce n'est pas un probleme MS,
c'est un probleme général pour les calculs en années, mois, jours
la notion de mois n'est pas une fraction exacte de l'année !!!!

--
--
@+
;o)))
Avatar
Jacquouille
Bonjour Gilbert, et les autres
Tout ça est ben vrai.
Et si on ne tenait pas compte de la longueur des mois?
Du 28/2/2007 au 28/2/09 , ce serait deux ans, avec sous sans bi-sexilité.
Du 28/2 au 28/3, ce serait 1 mois, avec ou sans bi-sexilité?
Ce ne serait pas plus simple?
Perso, je suis né en janvier, afin d'éviter ce problème. -)
Bonne journée à tous.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Modeste" a écrit dans le message de news:

Bonsour® Jacky avec ferveur ;o))) vous nous disiez :

Les MVPs n'ont pas de pouvoir pour ce genre d'erreur chez MS ???



ce n'est pas un probleme MS,
c'est un probleme général pour les calculs en années, mois, jours
la notion de mois n'est pas une fraction exacte de l'année !!!!

--
--
@+
;o)))
Avatar
Modeste
Bonsour® 18851jrs avec ferveur ;o))) vous nous disiez :

Tout ça est ben vrai.
Et si on ne tenait pas compte de la longueur des mois?
Ce ne serait pas plus simple?
Perso, je suis né en janvier, afin d'éviter ce problème. -)



alors dit-nous :
51 ans 7 mois
mais 9 ou 11 jours ????

tu as 2 jours de sursis ;o)))

--
--
@+
;o)))
Avatar
Jacquouille
Salut Gilbert
Pourquoi être si tatillon pour 2 jours alors que ta formule me rajeunit de
10 ans ? -)))

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Modeste" a écrit dans le message de news:
%
Bonsour® 18851jrs avec ferveur ;o))) vous nous disiez :

Tout ça est ben vrai.
Et si on ne tenait pas compte de la longueur des mois?
Ce ne serait pas plus simple?
Perso, je suis né en janvier, afin d'éviter ce problème. -)



alors dit-nous :
51 ans 7 mois
mais 9 ou 11 jours ????

tu as 2 jours de sursis ;o)))

--
--
@+
;o)))
Avatar
Padre Vikal Mart
Bonsour® 22505 jours avec ferveur ;o))) vous nous disiez :

> Pourquoi être si tatillon pour 2 jours alors que ta formule me
rajeunit de
> 10 ans ? -)))



tu vois mon bon Jacquouille avec l'age, l'écart s'est réduit = 1 jour
Formule DateDif : 61 ans 7 mois 12 jours
Formule "Sidérale" : 61 an(s) 7 mois 11 jr(s)

et que étant moi-même né un 24 (*) jour de St Modeste ;o)))
je te suis de 2 an(s) 1 mois 1 jr(s)
le 1 jr s'expliquant alors par le fait que l'année 1948 était bissextile

(*)
tu pourra dorénavant m' appeler :
p. a. d. VI Kal.Mart
pen ante diem sextum Kalendas Martias
1 2 3 4