Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Convertir nombre entier en années, mois, jour

35 réponses
Avatar
Denys
Bonjour,

Si, en A! j'inscris 370, comment avoir en B1 comme r=E9sultat 1 an et 5 jou=
rs ?
ou encore en A1 j'incris 400 et en B1 1 an, 1 mois et 5 jours..... tout =E7=
a sans =E9gard aux ann=E9es bissextiles....

Merci beaucoup

Denys

10 réponses

1 2 3 4
Avatar
Jacky
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" a écrit dans le message de news:

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
Avatar
Denys
Bonjour Jacky,

Merci beaucoup....

Denys
Avatar
MichD
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 :


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
Avatar
MichD
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
---------------------------------------------------------------
Avatar
MichD
M. Jacky essaie d'en passer une petite vite!!!
;-))


MichD
---------------------------------------------------------------
Avatar
MichD
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
---------------------------------------------------------------
Avatar
MichD
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$

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
---------------------------------------------------------------
Avatar
Jacky
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" a écrit dans le message de news: 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
---------------------------------------------------------------

Avatar
MichD
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
---------------------------------------------------------------
Avatar
Jacky
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 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" a écrit dans le message de news: l6enk7$jr$
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
---------------------------------------------------------------

1 2 3 4