Calcul nombre année/mois/jours entre deux dates en VBA ou requête

lmc71

XLDnaute Occasionnel
Bonjour le forum
Je suis à la recherche d'une formule dans une requête ou d'un code en vba qui me permettrait de calculer le nombre d'années, de mois et de jours entre deux dates d'une table.
Je connais bien la fonction Diffdate, mais je la trouve lourde ou alors je l'utilise mal . Je m'explique : si jour1 de la Date1 et > à jour2 de la Date2 alors 1er calcul : ou si jour1 = Jour2 2ème calcul ou si jour1 < jour2 / 3ème calcul / si Mois1 > Mois2 4ème calcul ou Mois1 = Mois2 5ème calcul ou mois1 < mois 2 / 6ème calcul la formule s’alourdit énormément.

en matière de code j'ai trouvé ceci qui ne calcule que les années. Comme je suis nul en VBA je n'ai pas pu ou pas su le modifier pour qu'il calcul également les mois et les jours.

Function CalculAge(ByVal Dat1 As Date, ByVal Dat2 As Date) As Integer
If Month(Dat2) > Month(Dat1) Then
CalculAge = DateDiff("yyyy", Dat1, Dat2)
ElseIf Month(Dat2) = Month(Dat1) Then
If Day(Dat2) >= Day(Dat1) Then
CalculAge = DateDiff("yyyy", Dat1, Dat2)
Else
CalculAge = DateDiff("yyyy", Dat1, Dat2) - 1
End If
Else
CalculAge = DateDiff("yyyy", Dat1, Dat2) - 1
End If
End Function

Je voudrais utiliser soit la formule soit le code dans une requête.
Je ne suis pas arrivé à trouver mon bonheur alors si quelqu'un à un lien me donnant la solution, je suis preneur et vous en remercie d'avance.
Cordialement à toute l'équipe et particulièrement à Modeste
 

Dranreb

XLDnaute Barbatruc
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonsoir.
Voyez si cette fonction vous conviendrait, passez lui la différence entre deux dates/heure :
VB:
Function DuréeEnClair(ByVal DuRest As Double) As String
Dim U As Long, DuUnit As Double, NbUnit As Long, K As Long, Trad As String
For U = 1 To 6
   DuUnit = Choose(U, 365.2425, 30.436875, 7, 1, 1 / 24, 1 / 1440)
   NbUnit = Int(DuRest / DuUnit)
   If NbUnit > 0 Or K > 0 Then K = K + 1: If K > 2 Then Exit Function
   If NbUnit > 0 Then
      Trad = NbUnit & " " & Choose(U, "an", "mois", "sem.", "jour", "h.", "min")
      If NbUnit * Choose(U, 1, 0, 0, 1, 0, 0) > 1 Then Trad = Trad & "s"
      If K = 2 Then DuréeEnClair = DuréeEnClair & " et "
      DuréeEnClair = DuréeEnClair & Trad: End If
   DuRest = DuRest - DuUnit * NbUnit: Next U
End Function
 
Dernière édition:

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonsoir Dranreb
Merci de ta réponse rapide
Je ne connais rien, ou pas grand chose en VBA.
J'ai joins un bout de fichier où j'ai placé ton code.
Je t'explique mon fichier : Une table nommée Essai avec deux champs DateInitial et DateMod. - Deux Requêtes : La nommée Durée est celle où j'ai effectué deux calculs entre les dates de DateInitial et Date mod avec formule vraifaux....
la nommée Durée VBA est celle où je veux me servir de ton code. Dans cette Rq (requête) j'ai utilisé un champ avec la formule suivante : Essai VBA: DuréeEnClair([DateInitial];[DateMod]). La Rq ne fonctionne pas, car je ne sais pas où placer dans ton code DateInitial et DateMod.
Si tu peux voir sur ce bout de fichier.

Qu'est-ce-que tu atends par : "passez lui la différence entre deux dates/heure :"

Je travaille sur access 2007

Cordialement
 

Pièces jointes

  • Essai Date.zip
    38.4 KB · Affichages: 169
  • Essai Date.zip
    38.4 KB · Affichages: 128
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Non c'est :
VB:
TextAge = DuréeEnClair([DateMod] - [DateInitial])
avec TexteAge déclaré As String et les expressions entre crochets droits supposant être des expressions Date pouvant aussi comporter des heures. Je suis inculte en Access.
 

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonjour Dranreb
Bonjour le Forum
Si toi tu es inculte en Access alors qu'est-ce que je suis en VBA :rolleyes:.
J'ai texté ta formule et elle fonctionne.
Pourrais-tu regardé le fichier joint car ton code ne renvoie pas le résultat excompté.

Si tu regardes le tableau ci-dessous tu remarqueras les erreurs dans le résultat :

DateInitial DateMod Essai VBA
01/11/2015|02/11/2015|1 jour
06/10/2015|01/11/2015 |3 sem. et 5 jours
03/05/2015|01/11/2015|5 mois et 4 sem.
06/06/2014|01/11/2015 |1 an et 4 mois
01/11/2015|03/12/2015|1 mois


Seules les deux premières lignes renvoient un résultat juste.

De plus si tu ajoutes un jour- mois ou plus dans la DateMod, le calcul ne se fait pas systématiquement ou erroné.
Date changée
DateInitial DateMod Essai VBA
01/11/2015|04/12/2015|1 mois
normalement = 1 mois et 3 jours
DateInitial DateMod Essai VBA
01/11/2015|02/12/2015|1 mois
normalement = 1 mois et 1 jours

De quoi cela peut provenir.

Merci de ton travail.

Ne soit pas Modeste tu es un As.
Cordialement
 

Pièces jointes

  • Essai Date.zip
    39 KB · Affichages: 127
  • Essai Date.zip
    39 KB · Affichages: 135
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonjour.

C'est voulu, que quand l'ancienneté s'accroit, sa précision diminue parce qu'en général ça ne présente pas d'intérêt de l'indiquer plus précisément. À partir d'un mois, c'est à la semaine près, plus au jour. Mais ce serait possible de changer ça.
 

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonjour Dranreb
Tu me soulages en me disant que c'est voulu.
Comme tu me dis que c'est possible de changer,si cela n'est pas trop ennuyeux pour toi, effectue le changement de façon que le résultat représente année (éventuellement au pluriel), mois et jours (éventuellement aux pluriel) 1 an(s), 1 mois et 1 jour(s).
Ce n'est pas professionnel, mais néanmoins précis.
Je t'en remercie d'avance.
Cordialement
 

Dranreb

XLDnaute Barbatruc
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Pour avoir le nombre d'années prend la partie entière de la durée divisée par 365,2425 (nombre de jours moyen d'une année). Calcule la durée restante en jours en retranchant de la durée initiale le nombre d'années trouvé remultiplié par 365.2425. Pour avoir le nombre de mois prends la partie entière de la durée restante divisée par 30,436875 (nombre de jours moyen d'un mois). Le nombre de jours s'obtient en retranchant de la durée restante ce nombre de mois remultiplié par 30,436875.
 

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Re Dranred
Je suis arrivé à créer les formules pour les calculs. Ce n'a pas été évident et je pense que c'est plus encombrant qu'une VBA.
Je te remercie pour ton travail et tes conseils.
Cordialement à tous
 

Modeste geedee

XLDnaute Barbatruc

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonsoir Modeste geedee

Je suppose que TotalJours est à définir dans un code VBA. Je ne sais pas du tout construire une VBA.
De plus je remarque que tu commences tes formules par le signe =. Est-que ce ne serait pas des formules pour EXCEL, car le mot ENT n'est pas reconnu dans une requête d'ACCESS.
Si tu as la formule équivalente pour ACCESS 2007, je suis preneur.
Je te remercie pour ton travail.
Cordialement
 

Modeste geedee

XLDnaute Barbatruc
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonsour®
je n'ai pas ACCESS installé sur mon PC
mais de mémoire les instructions sont très semblables :

TotalJours=DateRécente-DateAncienne
Var_an =ENT(TotalJours / 365,2425)
Var_Mois= ENT(MOD(TotalJours/(365,2425/12) ; 12))
Var_JR =ENT(MOD(TotalJours ; 365,2425/12)

possible que sous ACCESS les fonctions ci-dessus s'écrivent ainsi :
Var_an =INT(TotalJours / 365,2425)
Var_Mois= INT((TotalJours/(365,2425/12) MOD 12))
Var_JR = INT(TotalJours MOD (365.2425/12))

Je ne sais pas du tout construire une VBA.
dans ce cas commencer par là !!!
Les meilleurs cours et tutoriels Access
:rolleyes:
 

lmc71

XLDnaute Occasionnel
Re : Calcul nombre année/mois/jours entre deux dates en VBA ou requête

Bonsoir Modeste
Et oui comme tu le dis, il faut commencer par le commencement, mais malheureusement pour moi, je ne suis pas né avec un PC entre les jambes. Donc en un mot, il est un peu tard pour apprendre et retenir des mots barbares.
Je sais une chose néanmoins que j'ai apprise, c'est que le VBA n'accepte pas les " Très semblables ", c'est peut-être pour cela que j'ai laissé tomber. J'ai acheté deux livres qui traitent la programmateur de code VBA tant sur ACCESS que sur EXCEL, mais trop dur à digérer.
Je sais comprendre un code et j'arrive à le modifier, mais pas de le construire car souvent il faut faire appeler à X ou Y codage pour que tout fonctionne.
Je te remercie néanmoins pour tes explications, travail et liens.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
315 111
Messages
2 116 339
Membres
112 719
dernier inscrit
hajartouil