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 Sub

Bonjour,

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 Function

Salut

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

Rechercher des sujets similaires à "usf date datedif trouver ages"