calcul de date

  • Initiateur de la discussion In Vino Veritas
  • Date de début
I

In Vino Veritas

Guest
voilà mon souci :

Dans un userform, je veux rentrer dans un textbox1 une date, un textbox2 avec une autre date ( du jour par exemple).
Dans des labels 1, 2, 3 je voudrais qu'il s'affiche la différence entre ces deux dates. bref, je voudrais un truc qui me fasse un calcul d'age ou d'ancienneté en jours, mois, années.
Je suis allé fouiner sur les excellents sites des spécialistes en date du forum, mais il doit y avoir un truc simple et je ne m'en sors pas....

merci de votre aide
 
M

Monique

Guest
Bonjour,

Pas de userform ni textbox1 (ni 2, d'ailleurs) ni labels.
Seulement un condensé sur les calculs d'âge ou d'ancienneté.
Au choix : fonction DATEDIF, fonction DATE(ANNEE();MOIS();JOUR())
Années, mois et jours séparés avec la fonction JOUR360()
 

Pièces jointes

  • age.zip
    5.7 KB · Affichages: 50
Dernière modification par un modérateur:
@

@+Thierry

Guest
Bonsoir,

tiens j'allais m'y mettre, mais tu as été plus rapide que moi Gérard :)

Moi de mon coté, j'essayais d'appliquer justement la function de Laurent Longre en VBA trouvée sur la même page dont Monique parle dans ses formules.

Function AGE(Date1 As Date, Date2 As Date) As String
Dim Elt As Long, D1 As Long, D2 As Long
D1 = Int(Date1): D2 = Int(Date2)
Elt = Evaluate("DATEDIF(" & D1 & "," & D2 & ",""y""")
AGE = Elt & IIf(Elt > 1, " ans, ", " an,") & _
Evaluate("DATEDIF(" & D1 & "," & D2 & ",""ym""") & " mois, "
Elt = Evaluate("DATEDIF(" & D1 & "," & D2 & ",""md""")
AGE = AGE & Elt & IIf(Elt > 1, " jours", " jour")
End Function

Mais au stade ou j'en étais, c'était le split sur trois Functions (becoz 3 Labels) :

Function AGEY(Date1 As Date, Date2 As Date) As String
Dim Elt As Long, D1 As Long, D2 As Long
D1 = Int(Date1): D2 = Int(Date2)
Elt = Evaluate("DATEDIF(" & D1 & "," & D2 & ",""y""")
AGEY = Elt & IIf(Elt > 1, " ans ", " an")
End Function
Function AGEM(Date1 As Date, Date2 As Date) As String
Dim Elt As Long, D1 As Long, D2 As Long
D1 = Int(Date1): D2 = Int(Date2)
Elt = Evaluate("DATEDIF(" & D1 & "," & D2 & ",""ym""")
AGEM = Elt & " Mois "
End Function
Function AGEJ(Date1 As Date, Date2 As Date) As String
Dim Elt As Long, D1 As Long, D2 As Long
D1 = Int(Date1): D2 = Int(Date2)
Elt = Evaluate("DATEDIF(" & D1 & "," & D2 & ",""md""")
AGEJ = Elt & IIf(Elt > 1, " Jours ", " Jour")
End Function

J'avais une erreur d'incompatibilité de type pour retourner ces trois functions dans des label... (prise de tête !! et vu que tu es arrivé à la rescousse je laisse béton, j'ai un autre truc à finir, lol)

Par contre j'avais fait un test pour la textbox de saisie de date en utilisant
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) ' (de Frédérique Sigonneau)
Dim ArrD
If TextBox2 = "" Then Exit Sub
ArrD = Split(TextBox2.Text, _
Application.International(xlDateSeparator))
If UBound(ArrD) <> 2 Then GoTo Fin
If Not IsDate(TextBox2.Value) Then GoTo Fin
LesCalculs
Exit Sub
Fin:
TextBox2 = ""
TextBox2.SetFocus
MsgBox "date arrivée non valide"
End Sub
Qui éviterait le plantage si on rentre n'importe quoi à la place de la Date....

Par contre si je tape 19/01/2003 j'ai un retour "-1 An(s), 11 Mois, 30 Jour(s)" ce serait pas mieux de dire "basta!!! la date doit être inférieure !!" lol

mais beau travail quand même
@+Thierry
 

Statistiques des forums

Discussions
314 651
Messages
2 111 553
Membres
111 199
dernier inscrit
mavoungou regis