Calcul age sous excel
Résolu
maxololo
-
Mytå Messages postés 4246 Date d'inscription Statut Contributeur Dernière intervention -
Mytå Messages postés 4246 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Comment calculer sous excel 2003 l'âge exact de qq?
Comment calculer sous excel 2003 l'âge exact de qq?
A voir également:
- Formule excel pour calculer l'age à une date donnée
- Comment calculer la moyenne sur excel - Guide
- Formule excel si et - Guide
- Liste déroulante excel - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule excel pour additionner plusieurs cellules - Guide
13 réponses
Salut,
Je viens mettre mon grain de sel dans la discussion même s'il s'agit d'une relance, ça prouve que rien ne se perd
Mets en B9 la date de naissance ou changes la valeur dans la formule
=DATEDIF(B9;AUJOURDHUI();"y")&" ans, "&DATEDIF(B9;AUJOURDHUI();"ym")&" mois et "&DATEDIF(B9;AUJOURDHUI();"md")&" jours"
et en cadeau un fichier complet avec mise en forme conditionnelle. Pour la sécurité des formules le fichier est protégé et le code macro également.
Le mot de passe pour accèder à la déprotection et macro dans le ThisWorbook saisir OPEN en majuscule
https://www.cjoint.com/?lvwZVI1Euo
A+
Je viens mettre mon grain de sel dans la discussion même s'il s'agit d'une relance, ça prouve que rien ne se perd
Mets en B9 la date de naissance ou changes la valeur dans la formule
=DATEDIF(B9;AUJOURDHUI();"y")&" ans, "&DATEDIF(B9;AUJOURDHUI();"ym")&" mois et "&DATEDIF(B9;AUJOURDHUI();"md")&" jours"
et en cadeau un fichier complet avec mise en forme conditionnelle. Pour la sécurité des formules le fichier est protégé et le code macro également.
Le mot de passe pour accèder à la déprotection et macro dans le ThisWorbook saisir OPEN en majuscule
https://www.cjoint.com/?lvwZVI1Euo
A+
bonjour
Merci pour ce classeur bien conçu et pratique pour ceux qui ne veulent pas oublier d'anniversaire.
Dans le tri, peut-être remplacer Header:=xlGuess par Header:=xlYes car chez moi excel "devine" très mal.
Merci pour ce classeur bien conçu et pratique pour ceux qui ne veulent pas oublier d'anniversaire.
Dans le tri, peut-être remplacer Header:=xlGuess par Header:=xlYes car chez moi excel "devine" très mal.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
je n'arrive pas à faire la formule pour calculer l'âge de qqun à une date postérieure à la date du jour, par exemple je veux calculer l'age au 01/10/2012. Par avance merci de m'aider.
Voyez la fonction DATEDIF !!!
=DATEDIF(date de naissance;aujourdhui();"y")
Fontionne au jour près. seule solution valable.
Scarabée
=DATEDIF(date de naissance;aujourdhui();"y")
Fontionne au jour près. seule solution valable.
Scarabée
Salut le fil,
Il existe une fonction personnalisé editée par Microsoft qui décompte les années à coller dans un module. si besoin faire signe
Public Function AgeFunc(stdate As Variant, endate As Variant)
Dim stvar As String
Dim stmon As String
Dim stday As String
Dim styr As String
Dim endvar As String
Dim endmon As String
Dim endday As String
Dim endyr As String
Dim stmonf As Integer
Dim stdayf As Integer
Dim styrf As Integer
Dim endmonf As Integer
Dim enddayf As Integer
Dim endyrf As Integer
Dim years As Integer
Dim fx As Integer
fx = 0
stvar = sfunc("/", stdate)
stmon = Left(stdate, sfunc("/", stdate) - 1)
stday = Mid(stdate, stvar + 1, sfunc("/", stdate, sfunc("/", stdate) + 1) - stvar - 1)
If Len(stday) = 1 Then fx = fx + 1
If Len(stmon) = 2 Then fx = fx + 1
styr = Right(stdate, Len(stdate) - (sfunc("/", stdate) + 1) - stvar + fx)
stmonf = CInt(stmon)
stdayf = CInt(stday)
styrf = CInt(styr)
If stmonf < 1 Or stmonf > 12 Or stdayf < 1 Or stdayf > 31 Or styrf < 1 Then
AgeFunc = "Invalid Date"
Exit Function
End If
fx = 0
endvar = sfunc("/", endate)
endmon = Left(endate, sfunc("/", endate) - 1)
endday = Mid(endate, endvar + 1, sfunc("/", endate, sfunc("/", endate) + 1) - endvar - 1)
If Len(endday) = 1 Then fx = fx + 1
If Len(endmon) = 2 Then fx = fx + 1
endyr = Right(endate, Len(endate) - (sfunc("/", endate) + 1) - endvar + fx)
endmonf = CInt(endmon)
enddayf = CInt(endday)
endyrf = CInt(endyr)
If endmonf < 1 Or endmonf > 12 Or enddayf < 1 Or enddayf > 31 Or endyrf < 1 Then
AgeFunc = "Invalid Date"
Exit Function
End If
years = endyrf - styrf
If stmonf > endmonf Then
years = years - 1
End If
If stmonf = endmonf And stdayf > enddayf Then
years = years - 1
End If
If years < 0 Then
AgeFunc = "Invalid Date"
Else
AgeFunc = years
End If
End Function
Public Function sfunc(x As Variant, y As Variant, Optional z As Variant)
sfunc = Application.WorksheetFunction.Search(x, y, z)
End Function
-
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Il existe une fonction personnalisé editée par Microsoft qui décompte les années à coller dans un module. si besoin faire signe
Public Function AgeFunc(stdate As Variant, endate As Variant)
Dim stvar As String
Dim stmon As String
Dim stday As String
Dim styr As String
Dim endvar As String
Dim endmon As String
Dim endday As String
Dim endyr As String
Dim stmonf As Integer
Dim stdayf As Integer
Dim styrf As Integer
Dim endmonf As Integer
Dim enddayf As Integer
Dim endyrf As Integer
Dim years As Integer
Dim fx As Integer
fx = 0
stvar = sfunc("/", stdate)
stmon = Left(stdate, sfunc("/", stdate) - 1)
stday = Mid(stdate, stvar + 1, sfunc("/", stdate, sfunc("/", stdate) + 1) - stvar - 1)
If Len(stday) = 1 Then fx = fx + 1
If Len(stmon) = 2 Then fx = fx + 1
styr = Right(stdate, Len(stdate) - (sfunc("/", stdate) + 1) - stvar + fx)
stmonf = CInt(stmon)
stdayf = CInt(stday)
styrf = CInt(styr)
If stmonf < 1 Or stmonf > 12 Or stdayf < 1 Or stdayf > 31 Or styrf < 1 Then
AgeFunc = "Invalid Date"
Exit Function
End If
fx = 0
endvar = sfunc("/", endate)
endmon = Left(endate, sfunc("/", endate) - 1)
endday = Mid(endate, endvar + 1, sfunc("/", endate, sfunc("/", endate) + 1) - endvar - 1)
If Len(endday) = 1 Then fx = fx + 1
If Len(endmon) = 2 Then fx = fx + 1
endyr = Right(endate, Len(endate) - (sfunc("/", endate) + 1) - endvar + fx)
endmonf = CInt(endmon)
enddayf = CInt(endday)
endyrf = CInt(endyr)
If endmonf < 1 Or endmonf > 12 Or enddayf < 1 Or enddayf > 31 Or endyrf < 1 Then
AgeFunc = "Invalid Date"
Exit Function
End If
years = endyrf - styrf
If stmonf > endmonf Then
years = years - 1
End If
If stmonf = endmonf And stdayf > enddayf Then
years = years - 1
End If
If years < 0 Then
AgeFunc = "Invalid Date"
Else
AgeFunc = years
End If
End Function
Public Function sfunc(x As Variant, y As Variant, Optional z As Variant)
sfunc = Application.WorksheetFunction.Search(x, y, z)
End Function
-
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Bonjour Mike-31,
Tu as tout à fait raison mais cette fonction est pour la version anglaise (traduction automatique) et ne fonctionne pas avec le format français des dates. Mytå nous l'a améliorée pour prendre en compte les paramètres régionaux sur ce sujet.
Cependant, contrairement à DATEDIF que tu maitrise parfaitement, elle ne permet que de calculer les années.
Bien cordialement.
Tu as tout à fait raison mais cette fonction est pour la version anglaise (traduction automatique) et ne fonctionne pas avec le format français des dates. Mytå nous l'a améliorée pour prendre en compte les paramètres régionaux sur ce sujet.
Cependant, contrairement à DATEDIF que tu maitrise parfaitement, elle ne permet que de calculer les années.
Bien cordialement.
re,
Si on s'accorde une marge d'erreur d'un jour pour les années bissextiles des débuts de siècles, cette formule peut être faire l'affaire.
En effet sont bissextiles les années divisibles par 4 ou par 100 comme 2000, voire les deux.
sauf si elles sont divisible par 400 ce qui ne sera pas le cas de l'an 2500
Excel considère 1900 comme année bissextile ce qui est faut, et donc les calcul de cette année sont erronée.
la marge d'erreur est donc faible. en A1 la date de début et en A2 de fin.
si la formule ne passe pas, je mettrais un fichier
=SI(ET(A1<>"";A2<>"");SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")=0;" ";(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")>1;" ans, ";" an, ")))&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")=0;"";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")&" mois, ")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")=0;" ";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")>1;" jours ";" jour "));"")
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Si on s'accorde une marge d'erreur d'un jour pour les années bissextiles des débuts de siècles, cette formule peut être faire l'affaire.
En effet sont bissextiles les années divisibles par 4 ou par 100 comme 2000, voire les deux.
sauf si elles sont divisible par 400 ce qui ne sera pas le cas de l'an 2500
Excel considère 1900 comme année bissextile ce qui est faut, et donc les calcul de cette année sont erronée.
la marge d'erreur est donc faible. en A1 la date de début et en A2 de fin.
si la formule ne passe pas, je mettrais un fichier
=SI(ET(A1<>"";A2<>"");SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")=0;" ";(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"Y")>1;" ans, ";" an, ")))&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")=0;"";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"YM")&" mois, ")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")=0;" ";DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")&SI(DATEDIF((GAUCHE(A1;TROUVE("_";SUBSTITUE(A1;"/";"_";2);1))&DROITE(A1;4)+(1900-DROITE(A1;4)))*1;(GAUCHE(A2;TROUVE("_";SUBSTITUE(A2;"/";"_";2);1))&(DROITE(A2;4)+(1900-DROITE(A2;4))+DROITE(A2;4)-DROITE(A1;4)))*1;"MD")>1;" jours ";" jour "));"")
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.
Re,
Oui malheureusement, Excel est capable de calculer très facilement la différence entre deux dates à partir 1901 (le calendrier Excel 1900 est erroné) avec la fonction
= DateDif(A1; A2; "D" )
Par contre avant 1900 c'est le vide. Une fois ma formule testée par tous ceux qui parcourent le forum j'essayerai d'adapter un code VBA qui rendra l'utilisation plus simple.
Un exemple sur ce lien
https://www.cjoint.com/?AFBvceXg3OA
Oui malheureusement, Excel est capable de calculer très facilement la différence entre deux dates à partir 1901 (le calendrier Excel 1900 est erroné) avec la fonction
= DateDif(A1; A2; "D" )
Par contre avant 1900 c'est le vide. Une fois ma formule testée par tous ceux qui parcourent le forum j'essayerai d'adapter un code VBA qui rendra l'utilisation plus simple.
Un exemple sur ce lien
https://www.cjoint.com/?AFBvceXg3OA
Salut le forum
Pourquoi essayer de réinventer la roue : XDate: Extended Date Functions Add-In
Mytå
Pourquoi essayer de réinventer la roue : XDate: Extended Date Functions Add-In
Mytå
Salut Myta,
Tout simplement le plaisir et avoir un décompte année/mois et jours entre deux dates.
Pour avoir simplement le nombre d'années entre deux dates on pourrait simplement formater la plage de saisie en texte exemple en A, et en A1 saisir la date 1/1/1700, en A2 1/1/2011
cette formule donne le nombre d'années entre les deux dates 311
=(DROITE(A2;4)-DROITE(A1;4))*1
cordialement
Mike-31
Tout simplement le plaisir et avoir un décompte année/mois et jours entre deux dates.
Pour avoir simplement le nombre d'années entre deux dates on pourrait simplement formater la plage de saisie en texte exemple en A, et en A1 saisir la date 1/1/1700, en A2 1/1/2011
cette formule donne le nombre d'années entre les deux dates 311
=(DROITE(A2;4)-DROITE(A1;4))*1
cordialement
Mike-31
En tout cas grand merci à néné, car j'avais une formule beaucoup plus (et inutilement) compliquée ...