Usf: date et datedif pour trouver des ages
Bonjour
Dans ma procédure lst_Licencies ci dessous, je souhaiterais créer des ages:
le 1er = age en annee+nbre de jours
le 2e : age en annee
Je récupère des infos de txt_box que je dois alors convertir pour pouvoir calculer les âges
J'utilise les variables VAr1 et var2 pour les calculs
1er Age = ex 23,183
les txt box de l'USf sont
Txt_DatenaissAth : il peut avoir la réponse "????" ou un nombre compris entre 1900 et 2013
Txt_DateCompet : peut être ??/??/???? ou ???? ou ""
Résultat = Txt_AgeanAth doit avoir un résultat de ?? ou un nombre décimal à 3 chiffres après la virgule
2e Age: ex 23
les txt box de l'USf sont
Txt_AnneenaissAth : il peut avoir la réponse "????" ou un nombre compris entre 1900 et 2013
Txt_DateCompet : peut être ??/??/???? ou ???? ou ""
Résultat = Txt_AgejourAth doit avoir un résultat de ?? ou un nombre entier
Je bloque sur les formules.
Quelqu'un pourrait-il m'aider?
merci
Cordialement
Etoile
Private Sub lst_Licencie_Click()
'Affichage du txt_CodeAth dans le tableau liste de la feuille Perf
Dim Ligne As Long
Dim var1 As Single
Dim var2 As Integer
Dim Categactu As String
' Affichage du Licencié sélectionné
Ligne = Me.lst_Licencie.ListIndex + 4
With WsLicencies 'dans feuille "Licenciés"
'n° enregistrement de la Perf
Me.Txt_CodeAth = .Range("L" & Ligne)
Me.Txt_DatenaissAth = .Range("D" & Ligne)
Me.Txt_AnneenaissAth = .Range("F" & Ligne)
'Calcul de l'âge en annee+jour (00,000jours)
'var= difference en
If Me.Txt_DatenaissAth = "??/??/????" Or Me.Txt_AnneenaissAth = "" Or Not IsDate(Me.Txt_AnneenaissAth) Then
Me.Txt_AgejourAth.Value = "??"
Else
'var1 = datedif(Me.Txt_DatenaissAth, Me.Txt_DateCompet, y)+ (datedif(Me.Txt_DatenaissAth, Me.Txt_DateCompet, yd)*0.001
'var1 = quelle formule ?
'Me.Txt_AgeanAth = var1
End If
'Calcul Age en annee entre Annee(datecompet) et Anneenaissance)
If Me.Txt_AnneenaissAth = "????" Or Me.Txt_AnneenaissAth = "" Then
Me.Txt_AgeanAth.Value = "??"
Else
'Erreur d'exécution 13 : incompatibilité de type !!!!
var2 = (CInt(Year(CDate(Me.Txt_DateCompet.Value))) - CInt(Me.Txt_AnneenaissAth.Value))
Me.Txt_AgeanAth = var2
End If
Me.Txt_NumlicenceAth = .Range("F" & Ligne)
Me.Txt_SexeAth = .Range("G" & Ligne)
End With
'Calcul de la catégorie actuelle deu licencié lors de la perf/mise à jour de la catég
'categactu= index/equiv (age dans tableau feuille paramètres)
'Me.Txt_CategActu =
End SubBonjour,
Un début de réponse avec 2 fonctions personnalisées (à tester pour tes besoins)
La première donne le nombre d'années entre 2 dates. La seconde, le nombre de jours entre 2 dates, sans les années.
Soit pour une personne née le 7 mai 1962, 51 ans et 246 jours (à concaténer en 56,246 par exemple).
A adapter dans ton suivant tes hypothèses.
Cdlt
Option Explicit
Public Function nb_Années(d1 As Date, d2 As Date) As Long
' DateDiff arrondit le résultat.
' Si on cherche le nombre d'années entre deux dates et que ces dates ne
' sont séparées que de 11 mois, il renverra 1 an.
' Pour éviter cela, après avoir récupéré le nombre,
' on teste si la (Date1 + Nombre) > Date2, c'est qu'il y a eu un arrondi.
' Dans ce cas, on enlève 1.
nb_Années = DateDiff("yyyy", d1, d2)
If DateAdd("yyyy", nb_Années, d1) > d2 Then nb_Années = nb_Années - 1
End Function
Public Function nb_Jours(d1 As Date, d2 As Date) As Long
' 365.25 jours en moyenne avec années bissextiles.
nb_Jours = DateDiff("d", d1, d2)
nb_Jours = nb_Jours - 365.25 * Int(nb_Jours / 365.25)
End FunctionSalut
Merci pour ton post.
Ma demande était mal formulée, c'est plus sur la mise en place des variables dans vba que les formules que je bloque
J'avais également ces réponses qui permettent sans passer par "/365.25)
On a les ages et les jours de la dernières années
Merci pour ton aide
Etoile
G H I
date1 25/ 05/2013 25/05/1990
date2 08/01 /2014 08/01/2014
année en (an)= 0 23
DATEDIF($H$1;$H$2;"y") DATEDIF($I$1;$I$2;"y")
année en an-jour 228 228
DATEDIF($H$1;$H$2;"yd")
soit = 0,228 23,228
ou (format perso) 0an,228 jours 23an,228 jours
Re,
Et tu n'es pas toujours clair
'Datedif" est une fonction de feuille de calcul.
Avec VBA tu dois utiliser la fonction 'DateDiff'
Ce sont 2 fonctions différentes. (voir aide VBA sur 'Datediff').
Cdlt
BonjourJean-Eric, Le Forum
Ce qui était bien avec datedif sous excel, c'était que
je récupérais le nombre de jours de la dernière année grâce au format "yd".
et le nombre d'années avec le format "y"
Avec Datediff, je ne l'ai pas trouvé le "yd", ce qui ne veut pas dire que cela n'existe pas.
Bizarre quand même que Microsoft ne l'ai pas conçu!
je mets le fichier en pj , le problème est dans USf Performance de la feuille perf, procedure Calcul_Ages_Ath
Mais par exemple si
date naissance = 01/01/1990
date compétition = 23/12/2000
Age= 10,356 (10ans et 356jours)
Cordialement
Etoile