Convertir nombre entier en années, mois, jour
Le
Denys

Bonjour,
Si, en A! j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jou=
rs ?
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
Si, en A! j'inscris 370, comment avoir en B1 comme résultat 1 an et 5 jou=
rs ?
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
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"
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
Merci beaucoup....
Denys
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 :
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
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
---------------------------------------------------------------
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
---------------------------------------------------------------
'---------------------------------------------
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$
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
---------------------------------------------------------------
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"
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
---------------------------------------------------------------
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 NbJour22-304 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"