Forum Clubic

Excel : exprimer un nombre en années-mois-jours ?

Salut

Tout est dans le titre :slight_smile:

par ex:

405
= 1 an 1 mois et 10 jours

j’aurais dit
dans format de cellule tu vas dans personnalisé et tu mets :
aa “an” mm “mois et” jj “jours”
mais il se base sur la date depuis 1900
donc ca le fait pas :smiley:

:stuck_out_tongue:
il est possible de créer une fonction specifique puisqu’il semble qu’elle n’existe pas en standard
en toute rigueur le resultat sera approché puisqu’on devra assimiler les années à 365 jours (en oubliant les bissextiles) et les mois à 30 jours
par contre j’ai fait à une époque un fonction donnant l’age en fonction de la date de naissance et de la date du jour
si les macros ne te font pas peur je cherche et je te ferais des propositions (honnetes bien sur)
:slight_smile:

voici deja une fonction qui donne la difference entre 2 dates exprimée en années mois et jours

Function entre_dates(debut, fin) As String
If Not IsNull(debut) And Not IsNull(fin) Then
AN = Val(Format(debut, “yyyy”))
MN = Val(Format(debut, “mm”))
JN = Val(Format(debut, “dd”))

AA = Val(Format(fin, “yyyy”))
MA = Val(Format(fin, “mm”))
JA = Val(Format(fin, “dd”))

NJMP = “01/” & MA & “/” & AA
NJMP = DateValue(NJMP) - 1
NJMP = Val(Format(NJMP, “dd”))

If JN > JA Then
JA = JA + NJMP
MA = MA - 1
End If

If MN > MA Then
MA = MA + 12
AA = AA - 1
End If

NA = AA - AN
NM = MA - MN
NJ = JA - JN

If NA = 0 Then
NbAn = “”
ElseIf NA = 1 Then
NbAn = Str$(NA) & " an"
Else
If NM <> 0 Then
If NJ <> 0 Then
NbAn = Str$(NA) & " ans"
Else
NbAn = Str$(NA) & " ans et"
End If
Else
NbAn = Str$(NA) & " ans et"
End If
If NM = 0 And NJ = 0 Then
NbAn = Str$(NA) & " ans"
End If
End If

If NJ = 0 Then
nbj = “”
ElseIf NJ = 1 Then
nbj = Str$(NJ) & " jour"
Else
nbj = Str$(NJ) & " jours"
End If

If NM = 0 Then
NbM = “”
Else
If NJ <> 0 Then
NbM = Str$(NM) & " mois et"
Else
NbM = Str$(NM) & " mois"
End If
End If

entre_dates = NbAn & NbM & nbj
Else
entre_dates = “”
End If
End Function

:slight_smile:

Les problèmes de dates ne sont jamais simples. En effet 405 jours peuvent donner différentes réponses justes.
Par Exemple :
Si les 405 jours commencent le 1 mars 2002 le résultat sera 1 an 1 mois et 9 jours
Si les 405 jours commencent le 1 février 2002 le résultat sera 1 an 1 mois et 12 jours

Mais dans tous les cas Excel arrive à un résultat satisfaisant.
Si les 405 jours sont le résultat d’une différence entre 2 dates il y a la fonction Datedif
Exemple : en B2 tu as 01/03/2002 et en B3 tu as 10/04/2003
Dans une autre cellule tu mets :
=DATEDIF(B2;B3;“y”)&SI(DATEDIF(B2;B3;“y”)>1;" ans “;” an “)&DATEDIF(B2;B3;“ym”)&” mois " &1+DATEDIF(B2;B3;“md”)&SI(DATEDIF(B2;B3;“md”)>1;" jours "; " jour ")

Par contre si tu n’as que le nombre de jours (405 dans B3 par exemple) tu dois mettre cette formule :
=DATEDIF(0;B3;“y”)&SI(DATEDIF(0;B3;“y”)>1;" ans “;” an “)&DATEDIF(0;B3;“ym”)&” mois " &2+DATEDIF(0;B3;“md”)&SI(DATEDIF(0;B3;“md”)>1;" jours "; " jour ")

Il y a bien sûr d’autres formules si celles-ci ne répondent pas à ton problème.

Bonjour
Regarde ici
dans la section Gestion des dates
http://bvrve.club.fr/Astuces_Michel/excel.html

merci bcp pour votre aide :wink:

mon pb s’avère être + “compliqué” que prévu car j’avais oublié qu’un nombre exprimé en années-mois-jours s’avère être inexact (cf joueur67) et comme c’est pour calculer une ancienneté, il faut absolument être juste.

Donc voila exactement ma situation :

Jojo:
01/03/1999 au 31/08/2001
01/04/2002 au 15/12/2004
10/01/2005 au 16/05/2005
Ancienneté : x ans y mois z jours.

:stuck_out_tongue:
voila ce que donne la fonction citée plus haut
si tu as un problème pour la mettre en place , je te ferais un pas à pas

:slight_smile:

merci encore !

en fait + je refléchi au pb, + je m’aperçois des limites à exprimer un nombre en ans-mois-jours car cette formulation ne tient pas compte du fait que 28 jours en février = 1 mois complet.

ex: résultats avec les formules ci-dessus :

01/01/2005 28/02/2005 0 an 1 mois 28 jours
01/03/2005 30/04/2005 0 an 1 mois 30 jours

on obtient pas le même résultat et pourtant on a 2 mois complets dans les 2 cas.

Qd on calcul une ancienneté sur plusieurs années, on peut du coup se retrouver avec une grosse différence entre le nbre de jours réellement faits et leur expression ans-mois-jours !

Bon je vais m’arreter la car ça devient prise de tête !
bonne journée à tous !

:stuck_out_tongue:
avec ma fonction je trouve 1 mois et 27 jours et 1 mois et 29 jours
les mois complets sont en fait validés le lendemain
le problème est toujours de preciser si les bornes sont incluses ou non
le plus vicieux est le delai entre le 15/02/2005 et le 14/03/2005 qui est bien de 27 jours
bonne journée
:slight_smile: