Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Convertir nombre entier en années, mois, jour

1,142 views
Skip to first unread message

Denys

unread,
Nov 18, 2013, 11:15:10 AM11/18/13
to
Bonjour,

Si, en A! j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jours ?
ou encore en A1 j'incris 400 et en B1 1 an, 1 mois et 5 jours..... tout ça sans égard aux années bissextiles....

Merci beaucoup

Denys

Jacky

unread,
Nov 18, 2013, 11:52:33 AM11/18/13
to
Bonsoir,

Lire le fil de Laurent B. du 08/11/2013 19:41

"Problème différence entre 2 dates"

Cela devrait répondre à la question.

--
Salutations
JJ


--
Salutations
JJ


"Denys" <denys.p...@rbc.com> a écrit dans le message de news:
cb5d1962-46cb-4aed...@googlegroups.com...

Denys

unread,
Nov 18, 2013, 12:08:39 PM11/18/13
to
Bonjour Jacky,

Merci beaucoup....

Denys

MichD

unread,
Nov 18, 2013, 12:36:13 PM11/18/13
to
Bonjour

Copie ce qui suit dans le module de ta feuille :

Dans ce type d'aventure, la notion de mois est alambiquée.
Un mois peut avoir 28, 29, 30, 31 jours.

Les calculs qui sont effectués utilisent le 1/1/1900 comme point de départ.
En fait, si on additionnait une valeur numérique à la date 1/1/1900, quel
serait l'écart entre cette nouvelle date et 1/1/1900 en jours - mois - année

'-------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Jour As Integer, Mois As Integer, An As Integer
Dim X As Date, Z As String, Y As String, Rg As Range
Dim C As Range

Set Rg = Intersect(Range("A:A"), Target)
If Not Rg Is Nothing Then
Application.EnableEvents = False
For Each C In Rg
If IsNumeric(Target) Then
X = CDate(Target) + DateSerial(1900, 1, 1)
An = Year(X) - 1900
Mois = Month(X) - 1
Jour = Day(X) - 1

If Jour > 1 Then
Y = " jours "
Else
Y = " jour "
End If

If An > 1 Then
Z = " ans "
Else
Z = " an "
End If
C.Offset(, 1) = An & Z & Mois & " mois " & Jour & Y
End If
Next
Application.EnableEvents = True
End If
End Sub
'-------------------------------------------




MichD
---------------------------------------------------------------
"Denys" a écrit dans le message de groupe de discussion :
cb5d1962-46cb-4aed...@googlegroups.com...

MichD

unread,
Nov 18, 2013, 12:51:23 PM11/18/13
to
Un petit exemple pour illustrer la difficulté :

D'après toi, le chiffre 400 donne 1 an, 1 mois et 5 jours

L'année 1900 n'est pas une année bissextile. Si j'avais
choisi une année de référence bissextile, le résultat serait
légèrement différent. À toi de choisir!!!

L'année 1900, celle choisie comme référence à 365 jours
Le mois de janvier qui est le mois de référence à 31 jours
400 - (365+31) = 4 jours et non 5 jours comme dans ton exemple.


MichD
---------------------------------------------------------------

MichD

unread,
Nov 18, 2013, 12:54:21 PM11/18/13
to
M. Jacky essaie d'en passer une petite vite!!!
;-))


MichD
---------------------------------------------------------------

MichD

unread,
Nov 18, 2013, 1:18:22 PM11/18/13
to
Pour Jacky,

Une petite fonction personnalisée pour calculer ton âge...

Est-ce qu'elle souffre du même bogue que les autres fonctions
dédiées à cette tâche?

Je n'ai pas vraiment le temps de tester à fond...tu veux faire des
tests pour moi?

'--------------------------------------------
Function Age_Jacky(Start As Range)
Dim Jour As Integer, Mois As Integer, An As Integer
Dim X As Date, Z As String, Y As String, Rg As Range
Dim C As Range, Nb As Long

If IsDate(Start) Then
Nb = CLng(CLng(Date) - CLng(Start))

X = CDate(Nb) + DateSerial(1900, 1, 1)
An = Year(X) - 1900
Mois = Month(X) - 1
Jour = Day(X) - 1

If Jour > 1 Then
Y = " jours "
Else
Y = " jour "
End If

If An > 1 Then
Z = " ans "
Else
Z = " an "
End If
If Not IsError(DateSerial(Year(Start), 2, 29)) Then
If Mois > 2 Then Jour = Jour + 1
End If
Age_Jacky = An & Z & Mois & " mois " & Jour & Y
Else
Age_Jacky = "Format date non reconnue"
End If
End Function
'--------------------------------------------

MichD
---------------------------------------------------------------

MichD

unread,
Nov 18, 2013, 1:58:53 PM11/18/13
to
C'est mieux comme ceci, ;-))

'---------------------------------------------
Function Age_Jacky(Start As Range)
Dim Jour As Integer, Mois As Integer, An As Integer
Dim X As Date, Z As String, Y As String, Rg As Range
Dim C As Range, Nb As Long

If IsDate(Start) Then
Nb = CLng(CLng(Date) - CLng(Start))
X = CDate(Nb) + DateSerial(1900, 1, 1)
An = Year(X) - 1900
Mois = Month(X) - 1
Jour = Day(X) - 2

If Jour > 1 Then
Y = " jours "
Else
Y = " jour "
End If

If An > 1 Then
Z = " ans "
Else
Z = " an "
End If
Age_Jacky = An & Z & Mois & " mois " & Jour & Y
End If
End Function
'---------------------------------------------




MichD
---------------------------------------------------------------
"MichD" a écrit dans le message de groupe de discussion :
l6dllb$dqe$1...@speranza.aioe.org...

Jacky

unread,
Nov 18, 2013, 8:32:56 PM11/18/13
to
Hello Denis,

>> Est-ce qu'elle souffre du même bogue que les autres fonctions dédiées à cette tâche?
Cela semble résoudre le bogue des dates de "Laurent B" soit "19/10/1983" et "01/01/2024" pour xl 2007
Mais des affichages "bizarres" apparaissent par exemple sur
20/10/1983 ==>30 ans 1 mois -1 jour
20/11/1983 ==>30 ans 0 mois -1 jour
21/12/1983 ==>29 ans 11 mois -1 jour

J'ai fait un copier / coller ==>valeurs sur la colonne C pour figer les dates
http://cjoint.com/?CKtcFcErPaW
--
Bonne nuit
JJ


"MichD" <mich...@hotmail.com> a écrit dans le message de news: l6dllb$dqe$1...@speranza.aioe.org...

MichD

unread,
Nov 18, 2013, 10:57:58 PM11/18/13
to
Oui, j'ai moi-même constaté cela après quelques tests
après avoir publié ce message!

Regarde ce fichier http://cjoint.com/?CKte1cqydhJ

Est-ce qu'il y a des cas où l'âge est inexact? ;-))

Serait-ce la fonction que l'on attendait?

Merci pour ta participation.

MichD
---------------------------------------------------------------

Jacky

unread,
Nov 19, 2013, 5:51:04 AM11/19/13
to
> Est-ce qu'il y a des cas où l'âge est inexact? ;-))
Date de naissance==>01/01/2013
La fonction retourne 0 an 10 mois 17 jours

De janvier à novembre , il y a 10 mois complet totalisant 304 Jours
Du 01/01/2013 au 19/11/2013 il y a 322 jours
Donc NbJour=322-304=18 jours

Sauf erreur (Là, je ne prends pas beaucoup de risque)
Le résultat devrait être
==> 0 an 10 mois 18 jours
ou si l'on compte la dernière borne(19/11)
==> 0 an 10 mois 19 jours

--
Salutations
JJ


"MichD" <mich...@hotmail.com> a écrit dans le message de news: l6enk7$jr$1...@speranza.aioe.org...

Denys

unread,
Nov 19, 2013, 2:43:58 PM11/19/13
to
Dites....

Merci les gars......

Je n'en espérais pas tant !!!!!

Bonne soirée :-)

Denys

MichD

unread,
Nov 19, 2013, 3:03:37 PM11/19/13
to

Attention, selon Jacky, il y a des pépins dans la procédure!
Je n'ai pas eu le temps de tester...


MichD
---------------------------------------------------------------

Jacquouille

unread,
Nov 19, 2013, 4:35:30 PM11/19/13
to
Bonsoir Denis

Lorsque l'on parle d'âge et d'anniversaire à un interlocuteur lambda, il
soustrait les années des années, puis les mois des mois et enfin les jours.
Il ne se tracasse pas si l'année est bissextile ou non, si le mois compte
autant de jours....
Ainsi, pour reprendre l'exemple du bébé né le 1/1/20013, il aura 2013-2103 =
0 an; nov (11)-janv(1)=10 mois et 19 (aujourd'hui)-1 = 18 jours.

Il est vrai que si on fait le chiffre 41.597 (aujourd'hui) - 41275(1/1/13) =
322.
Il est évident que ces 322 jours amèneront à des résultats différents si
février a 29 jours. Et pourtant, le gosse aura le même âge.

Excel, pur produit artificiel de la modernité peut-il s'accommoder de cette
sagesse populaire?

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
l6gg6p$c58$1...@speranza.aioe.org...

pom...pom...pom..

unread,
Nov 19, 2013, 4:39:44 PM11/19/13
to


"Denys" a écrit dans le message de groupe de discussion :
cb5d1962-46cb-4aed...@googlegroups.com...

Bonjour,

Si, en A! j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jours ?
ou encore en A1 j'incris 400 et en B1 1 an, 1 mois et 5 jours..... tout ça sans
égard aux années bissextiles....


=TEXTE(A1;"aaaa")-1900&" an(s) "&TEXTE(A1;"m")-1 &" mois "&TEXTE(A1;" j") &"
jour(s)"

Jacky

unread,
Nov 19, 2013, 6:29:23 PM11/19/13
to
>> Ainsi, pour reprendre l'exemple du bébé né le 1/1/20013
Ce bébé là.... il n'aura plus rien à faire du bug xl2007
;o))))))

--
Salutations
JJ


"Jacquouille" <j.thie...@skynet.be> a écrit dans le message de news: l6glit$rji$1...@speranza.aioe.org...

Albert

unread,
Nov 19, 2013, 8:08:46 PM11/19/13
to
Bonjour


"pom...pom...pom.." <nom...@live.fr.invalid> a écrit dans le message de
news:l6glqr$s71$1...@speranza.aioe.org...
avec cette formule j'arrive à 1 an 0mois et 4 jurs



Moi j'arrive juste avec la formule suivante:
=SI(H1>59;(ANNEE(H1+1)-1900)&" ANS "&(MOIS(H1+1)-1)&" MOIS "&JOUR(H1+1)&"
JOURS";(ANNEE(H1)-1900)&" ANS "&(MOIS(H1)-1)&" MOIS "&JOUR(H1)&" JOURS")
370 1 ANS 0 MOIS 5 JOURS
58 0 ANS 1 MOIS 27 JOURS
59 0 ANS 1 MOIS 28 JOURS
60 0 ANS 2 MOIS 1 JOURS
365 0 ANS 11 MOIS 31 JOURS
366 1 ANS 0 MOIS 1 JOURS


--
albertri-at-videotron.ca.invalid

MichD

unread,
Nov 20, 2013, 8:49:52 AM11/20/13
to
Bonjour,

Pour ceux que la chose intéresse :

http://cjoint.com/?CKuoWPlMiLN

MichD
---------------------------------------------------------------

Denys

unread,
Nov 20, 2013, 10:19:21 AM11/20/13
to
On Wednesday, 20 November 2013 08:49:52 UTC-5, MichD wrote:
> Bonjour, Pour ceux que la chose intéresse : http://cjoint.com/?CKuoWPlMiLN MichD ---------------------------------------------------------------

Bonjour Denis,

Le lien ne fonctionne pas chez moi.....est-ce moi ???

Merci
Denys

Denys

unread,
Nov 20, 2013, 10:22:05 AM11/20/13
to
On Wednesday, 20 November 2013 10:19:21 UTC-5, Denys wrote:
> On Wednesday, 20 November 2013 08:49:52 UTC-5, MichD wrote: > Bonjour, Pour ceux que la chose intéresse : http://cjoint.com/?CKuoWPlMiLN MichD --------------------------------------------------------------- Bonjour Denis, Le lien ne fonctionne pas chez moi.....est-ce moi ??? Merci Denys

Correction....ça fonctionne maintenant...

Merci à tous !!!!

Denys

Jacquouille

unread,
Nov 20, 2013, 11:43:30 AM11/20/13
to
Messie, Messie, si papy Jacky veut calculer dans combien de temps ce sera
son anniversaire .....



Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Jacky" a écrit dans le message de groupe de discussion :
l6gs8m$cts$1...@speranza.aioe.org...

pom...pom...pom..

unread,
Nov 23, 2013, 7:51:33 PM11/23/13
to
Bonsour� Denis

> "MichD" a �crit dans le message de groupe de discussion :
> l6iem2$tlt$1...@speranza.aioe.org... Bonjour,
> Pour ceux que la chose int�resse :
> http://cjoint.com/?CKuoWPlMiLN

;o)
le jour de son anniversaire on n'a pas x ans 11 mois et 31 jours ou (x+1) ans 0
mois 1 jour

=TEXTE(AUJOURDHUI()-A1+1;"aaaa")-1900&" an(s) "&TEXTE(AUJOURDHUI()-A1+1;"m")-1
&" mois "&TEXTE(AUJOURDHUI()-A1+1;" j")-1 &" jour(s)"

Jacquouille

unread,
Nov 24, 2013, 5:40:32 AM11/24/13
to
Salut Gilbert
Aujourd'hui, �a donne 10 mois pile.

Content de te revoir un peu .....


Jacquouille

" Le vin est au repas ce que le parfum est � la femme."
"pom...pom...pom.." a �crit dans le message de groupe de discussion :
l6riil$20i$1...@speranza.aioe.org...

MichD

unread,
Nov 24, 2013, 6:37:09 AM11/24/13
to
Bonjour pom...pom...pom...,

L'homme par qui la lumi�re fut!

http://cjoint.com/?CKymJ4dBPbL

MichD
---------------------------------------------------------------

Jacquouille

unread,
Nov 24, 2013, 6:53:34 AM11/24/13
to
Bonjour Denis

Etant n� un 24 janvier du si�cle pr�c�dent, je f�te donc mon anniversaire
aujourd'hui (en fait, je le fais chaque mois). J'ai donc 65 ans et 10 mois.
-)))



Jacquouille

" Le vin est au repas ce que le parfum est � la femme."
"MichD" a �crit dans le message de groupe de discussion :
l6sod6$e02$1...@speranza.aioe.org...

Jacky

unread,
Nov 24, 2013, 7:01:52 AM11/24/13
to
Bonjour � tous

Et bien ...
Voila qui contre le bug xl2007

--
Salutations
JJ


"MichD" <mich...@hotmail.com> a �crit dans le message de news: l6sod6$e02$1...@speranza.aioe.org...

MichD

unread,
Nov 24, 2013, 7:25:42 AM11/24/13
to
| Voila qui contre le bug xl2007

Et surtout le bogue de "datedif"

MichD
---------------------------------------------------------------

Jacky

unread,
Nov 24, 2013, 12:26:17 PM11/24/13
to
Oui bien s�r.

Et pour faire jolie...
Genre:
1 an 1 mois 1 jour
Ou pour
1 an 0 mois 25 jour(s)
1 an 25 jours
;o)
=SUPPRESPACE(SI(AUJOURDHUI()-A1;TEXTE(TEXTE(AUJOURDHUI()-A1+1;"aaaa")-1900;"[>1]0"" ans "";[>]""1 an
"";")&TEXTE(TEXTE(AUJOURDHUI()-A1+1;"m")-1;"[>] 0"" mois "";")&TEXTE(TEXTE(AUJOURDHUI()-A1+1;" j")-1;"[>1]0""
jours"";[>]""1 jour"";");"0 jour"))


--
Salutations
JJ


"MichD" <mich...@hotmail.com> a �crit dans le message de news: l6sr87$kn1$1...@speranza.aioe.org...

MichD

unread,
Nov 24, 2013, 1:13:00 PM11/24/13
to

Pour r�sum�,

http://cjoint.com/?CKytmgCgMJG

MichD
---------------------------------------------------------------

MichD

unread,
Nov 24, 2013, 1:33:39 PM11/24/13
to
Je me suis tromp� de fichier : http://cjoint.com/?CKytHgxTDOp

MichD
---------------------------------------------------------------

MichD

unread,
Nov 24, 2013, 1:52:52 PM11/24/13
to
Enfin le voil� le bon!


http://cjoint.com/?CKytZVRD9EL


MichD
---------------------------------------------------------------

Jacky

unread,
Nov 24, 2013, 2:09:23 PM11/24/13
to
Re...
Avec xl2007 j'ai en colonne F
18?jours
(18+point d'interrogation+jours)
D� certainement � un mauvais retour � la ligne dans la barre de formule
L'as-tu aussi avec xl2010
Correction
http://cjoint.com/?CKyudTpuYXb



--
Salutations
JJ


"MichD" <mich...@hotmail.com> a �crit dans le message de news: l6thu8$ds8$1...@speranza.aioe.org...
> Enfin le voil� le bon!
>
>
> http://cjoint.com/?CKytZVRD9EL
>
>
> MichD
> ---------------------------------------------------------------
>



MichD

unread,
Nov 24, 2013, 2:49:47 PM11/24/13
to

Non, il n'y a pas de point d'interrogation dans la colonne "F",
seulement 18 jours.

MichD
---------------------------------------------------------------

Jacky

unread,
Nov 24, 2013, 3:04:12 PM11/24/13
to
> Non, il n'y a pas de point d'interrogation
c'est pas tr�s grave, en reprenant la formule, cela fonctionne.
Mais.........
Il y a une diff�rence de 1 jour entre la fonction et la formule hormis l'ann�e 2013

--
Salutations
JJ


"MichD" <mich...@hotmail.com> a �crit dans le message de news: l6tl8r$m3s$1...@speranza.aioe.org...

lassau...@gmail.com

unread,
Nov 26, 2013, 8:47:54 AM11/26/13
to
Le lundi 18 novembre 2013 17:15:10 UTC+1, Denys a écrit :
> Bonjour, Si, en A! j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jours ? ou encore en A1 j'incris 400 et en B1 1 an, 1 mois et 5 jours..... tout ça sans égard aux années bissextiles.... Merci beaucoup Denys

Bonjour tous,

Voici pour ma part comment je règlerais ce petit problème :
poser en A1 : 400 (ou tout autre nombre de jours)
poser en XEZ1048497 : =ENT(A1/360)
poser en XEZ1048498 : =ENT(((A1-(B1*360))/30))
poser en XEZ1048499 : =(A1-(B1*360)-(C1*30))
poser en B1 : = XEZ1048497&" an(s) "&XEZ1048498&" mois "&XEZ1048499&" jour(s) "

Cela décomposera en années, mois, jours le chiffre pour une année de 360 j.

Je vous conseille vivement la plage XEZ1048497:XEZ1048499 car c'est une petite plage tranquille, je n'y croise jamais personne et les cellules y sont d'une pureté é-pous-tou-flante.

Enfin bon vous pouvez aussi utiliser la plage surpeuplée C1:E1 (et masquer les colonnes) pour poser les formules ci-dessus. C'est selon votre degré d'exotisme.

Bien cordialement,

L'assaut suisse

lassau...@gmail.com

unread,
Nov 27, 2013, 12:00:53 PM11/27/13
to
Bonjour,

Denys : « Si, en A1 j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jours ? »

Dans le cas présent on part du principe que l’année a 365 jours donc que l’on se base sur un calendrier civil qui comporte 28/29, 30 ou 31 jours par mois (par opposition au calendrier financier qui comporte fixement 30 jour par mois et 360 jours par ans).

Denys : « ou encore en A1 j'inscris 400 et en B1 1 an, 1 mois et 5 jours.... »

Là encore, selon le décomptage proposé, nous nous situons dans une logique calendrier civil», basée sur un nombre de jours de 365 par an (et non 360).

Maintenant si nous nous situons sur un calcul de l’année civil, il est INDIPENSABLE de fixer une DATE DE BASE pour le calcul. Il n’est en effet pas possible de poser un nombre de jours dans un espace indéfini et demander combien cela fait de mois et de jours.

Démonstration :

Prenons l’exemple de 30j :
Positionnons-nous le 1.1.2013
la réponse sera : 0 ans 0 mois 30 jours

Toujours pour 30 jours :
Positionnons-nous maintenant le 1.2.2013 (le mois de février n’a en 2013 que 28 j.)
La réponse sera : 0 ans 1 mois 2 jours

C’est pour contourner ce genre de problèmes et simplifier les choses que le calendrier commercial avec des mois de 30j fixe et des années de 360 jours, a été mis sur pied pour toute la mathématique lié à la gestion financière.

Denys : « tout ça sans égard aux années bissextiles.... »

Maintenant dès l’instant où l’on approche le problème avec un angle « année civile » ce qui semble le cas, il FAUT tenir compte des années bissextiles. Ou on est précis, ou on est carré, l’entre deux n’a pas de sens.

La réponse à la question de Denys avec une approche « année financière » est exposée dans mon précédent post.

Pour répondre à Denys avec une approche « année civile » il y a lieu tout d’abord et comme vu précédemment de fixer la DATE DE BASE du décomptage.

Un deuxième petit problème se situe au niveau du jour 1. Le jour courant (soit la DATE DE BASE) est-il considéré comme le jour 1 ou le jour 0 ?

Parle-t-on de jour accompli (24 h.) ou la date de base en soit est-elle déjà décompter comme 1 jour ?

En effet, si je fais par différence sur XL entre le 01.01.2013 et le 01.01.2013 la réponse sera 0.

Il faut un écart de date (soit passer minuit) pour qu’un jour soit un jour (soit une différence entre le 01.01 et le 02.01).

Logique !

Et pourtant la question de Denys considère en soit le jour 0 comme jour 1 (puisque l’on parle d’un nombre de jours et non d’une différence de date).

Si je prends l’hypothèse que je demande à l’outil que souhaite Denys de calculer 1 j.

La réponse attendue est-elle : 0 a. 0m. 0j. ?

Ou bien : 0 a. 0m. 1j. ?

La deuxième option semble assez normale… c’est donc cette voie que j’ai choisie pour développer le petit outil que vous trouverez ci-joint.

http://cjoint.com/?CKBrPFbBskk

Il fonctionne comme à mon habitude sans une seule ligne de code et s’articule sur ce que j’appelle (à tort surement) le principe des tables dynamiques.

Bien cordialement,

C.
0 new messages