Formule sans datedif

dhiouf

XLDnaute Occasionnel
Bonjour à toute et à tous,

J’ai 3 formules pour calculer le nombre en années, mois et jours exacte entre deux dates. Mon problème je n’arrive pas à les rendre en code VBA.

Formule pour calculer les années : B1=ENT((datefin – datedébut +2)/365.25)

Code VBA :
Dim datefin As Date, datedébut As Date
datefin = textbox1.text
datedébut = textbox2.text
textbox3.text =INT((datefin – datedébut + 2)/365.25) ‘çà marche

Formule différence en mois, une fois les années soustraites :
B2=ENT(MOD(datefin – datedébut+2;365.25)/(365.25/12))

Code VBA : ?

Formule différence en jours, une fois les années et les mois soustraits :
B3=ENT(MOD((datefin-datedébut+2);(365.25/12)))

Code VBA : ?

Avez-vous une idée
Merci d’avance.
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Formule sans datedif

moyenne en jour (365 + 365 + 365 + année bisextile de 366)/4 = 365.25
en fait l'année bisextile c'est tous les 4 ans, sauf tous les 100 ans, mais quand même tous les 400 ans.
Cela rend compte d'une durée de l'année de 365.2425. La réalité quand à la durée réelle de l'anné est une autre paire de manche: ça dépend ce qu'on appelle exactement une année, mais ça c'est de l'astromomie de haut niveau.
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Formule sans datedif

-DateDif() gère les années bissextiles. Elle donne un résultat exact.

-Ce code n'est qu'une approximation. Il donne 1 an et 2 jours alors qu'il devrait donner 1 an et 0 jours

x = #1/1/2000#
y = #1/1/2001#
an = Int((y - x + 2) / 365.25)
mois = Int((y - x + 2 - an * 365.25) / (365.25 / 12))
jours = Int((y - x + 2) - an * 365.25 - mois * (365.25 / 12))

JB
 

dhiouf

XLDnaute Occasionnel
Re : Formule sans datedif

-DateDif() gère les années bissextiles. Elle donne un résultat exact.

-Ce code n'est qu'une approximation. Il donne 1 an et 2 jours alors qu'il devrait donner 1 an et 0 jours

x = #1/1/2000#
y = #1/1/2001#
an = Int((y - x + 2) / 365.25)
mois = Int((y - x + 2 - an * 365.25) / (365.25 / 12))
jours = Int((y - x + 2) - an * 365.25 - mois * (365.25 / 12))

JB

Bonjour à tous,

Pour calculer l'âge d'une personne Datedif() donne un résultat exact, mais pour calculer la durée du travail d'année, mois, jour calendaire Datedif() donne un résultat moins d'un jour à 2 jours.
exemple1: soit un homme a commencer son travail du 1/1/2011 au 15/04/2011 (3 mois calendaire et 15 jours)
résultat avec datedif() 3 mois 14 jours.
exemple2: pour établir un relevé de carrière pour un salarié du 27/11/1993 au 26/09/2011(17 ans 10 mois 0 jour)
résultat avec datedif() 17 ans 9 mois 30 jours.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Formule sans datedif

Re

A mon sens il ne s'agit que de s'entendre sur le fait que le dernier jour doit etre inclus ou non
Pour ton temps de travail ou ton relevé de carriere la solution semble etre de changer une des 2 bornes:
soit la veille du debut
soit le lendemain de la fin

J'ai par ailleurs exhumé une vieille fonction (probablement ecrite sous Excel97) donnant l'age en fonction de la date de naissance et d'une date determinée
Tu pourrais l'utiliser en lieu et place de Datediff
 

Pièces jointes

  • pour_dhiouf.xls
    36 KB · Affichages: 82

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Formule sans datedif

Bonjour,

Pour accéder à Datedif() en VBA, il suffit d'utiliser Evaluate()

age= [datedif(A1,today(),"y")]

ou

age = Evaluate("datedif(A1,today(),""y"")")


age = [datedif(A1,today(),"y")] & "ans " & [datedif(A1,today(),"ym")] & "Mois " & [datedif(A1,today(),"md")] & "jours"



JB
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Formule sans datedif

Re

Juste pour avoir le dernier mot (lol !!!)

Excel 2010 possede la fonction Datediff dont l'exemple est cité ci-dessous

Code:
DateDiff, fonction, exemple
 
Cet exemple utilise la fonction DateDiff pour afficher le nombre de jours entre une date donnée et la date d'aujourd'hui.
Dim TheDate As Date    ' Déclare les variables.Dim 
MsgTheDate = InputBox("Entrez une date")
Msg = "Jours à compter d'aujourd'hui: " & DateDiff("j",Now,TheDate)
MsgBox Msg
 
Dernière édition:

dhiouf

XLDnaute Occasionnel
Re : Formule sans datedif

Re

A mon sens il ne s'agit que de s'entendre sur le fait que le dernier jour doit etre inclus ou non
Pour ton temps de travail ou ton relevé de carriere la solution semble etre de changer une des 2 bornes:
soit la veille du debut
soit le lendemain de la fin

J'ai par ailleurs exhumé une vieille fonction (probablement ecrite sous Excel97) donnant l'age en fonction de la date de naissance et d'une date determinée
Tu pourrais l'utiliser en lieu et place de Datediff

Bonjour,

Merci beaucoup pour le fichier joint, mais une petite erreur au niveau de la colonne temps de travail (du 27/mois/année au 31/12/année) donne nba et nbm et 5 jours par contre c'est nba et nbm et 4 jours.
exemple du (27/11/1993 au 31/12/2011) donne 18 ans 1 mois 5 jours mais la logique c'est 18 ans 1 mois 4 jours.
 

pierrejean

XLDnaute Barbatruc
Re : Formule sans datedif

Re
Peux-tu etre plus explicite a propos de 'la logique' ???
Pour moi:
Un bebe nait le 27/11/1993 a 8h00 du matin
au meme moment son ouvrier de pere se met au travail
le 27/11/1994 a 8h00 le bebe aura un an et son pere aura aussi travaillé 1an
Si son pere termine sa journée il aura travaillé 1an et 1 jour
On peut choisir cette option pour le calcul de la retraite
Dans ce cas il faut bien admettre que pour le calcul de la retraite il faut considerer le lendemain du jour d'arret pour le calcul
Par consequent du 27/11/1993 au 31/12/2011 il faudra calculer du 27/11/1993 au 01/01/2012 ce qui donne bien 18 ans 1 mois et 5 jours
Et dis-nous:
Qu'en est-il de tes fameuses formules exposées au debut de ce fil ???
 

dhiouf

XLDnaute Occasionnel
Re : Formule sans datedif

Re
Peux-tu etre plus explicite a propos de 'la logique' ???
Pour moi:
Un bebe nait le 27/11/1993 a 8h00 du matin
au meme moment son ouvrier de pere se met au travail
le 27/11/1994 a 8h00 le bebe aura un an et son pere aura aussi travaillé 1an
Si son pere termine sa journée il aura travaillé 1an et 1 jour
On peut choisir cette option pour le calcul de la retraite
Dans ce cas il faut bien admettre que pour le calcul de la retraite il faut considerer le lendemain du jour d'arret pour le calcul
Par consequent du 27/11/1993 au 31/12/2011 il faudra calculer du 27/11/1993 au 01/01/2012 ce qui donne bien 18 ans 1 mois et 5 jours
Et dis-nous:
Qu'en est-il de tes fameuses formules exposées au debut de ce fil ???

OK j'ai bien compris, Merci beaucoup pour tes réponses et mille merci pour la fonction dans ton fichier joint très excellente.
 

Discussions similaires

Réponses
4
Affichages
422

Statistiques des forums

Discussions
312 496
Messages
2 088 979
Membres
103 996
dernier inscrit
KB4175