XL 2013 Calcul age dans userforme

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Domstras

XLDnaute Nouveau
Bonjour,

Pourrais-je avoir votre aide merci

J’ai un feuille de carnet d’adresse remplis par un userforme (Ajout_Contact) avec un textbox (TextBox6) date de naissance, je voudrais avoir l’âge qui s’affiche dans un textbox (TextBox7) âges et qu’il soit transféré en même temps que tous les autre a l’appuis du bouton ajouter (Bt_Ajouter)

J’ai cette formule mais je n’arrive pas à l’adapter dans user forme.

= DATEDIF(C4;aujourdhui(),”Y”)

MERCI A TOUS
 
Bonjour Domstras, et bienvenu sur XLD,
N'oubliez pas qu'un TextBox délivre un texte et non un nombre.
Une possibilité :
VB:
UserForm1.TextBox7 = Format((Date - CDate(UserForm1.TextBox6)) / 365.25, "0")
"Cdate" convertit un texte en date.
A modifier si vous voulez utiliser Datedif.
 
Re,
J'ai juste répondu à votre question :
je voudrais avoir l’âge qui s’affiche dans un textbox (TextBox7)
Je rempli TextBox7 avec l'âge calculé à partir de la date de naissance en TextBox6.
Il vous suffit d'introduire ce code dans le code de votre userform.

Sans fichier test représentatif, difficile de faire mieux, ma boule de cristal est en panne. 🙂
 
et bah dans ce cas. la proposition de Sylvanu est plutot claire non??
ok.. il ne te tient pas la main pour te donner TOUT le code, mais puisque que tu as déjà écrit du vba.. tu devrais pouvoir t'en sortir....
dans l'évènement _afterupdate de ton textbox 6, tu inscrits la ligne de code de sylvanu.. et voila...

sinon, moi j'aime bien utiliser cette fonction qui retourne l'age
VB:
Function Age(d1 As Date, Optional d2) As String

If IsMissing(d2) Then d2 = Now()

Dim A&, m&, s&, j&
    If (d1 > 60) * (d1 <= d2) Then
        Do While DateSerial(Year(d1) + A + 1, Month(d1), Day(d1)) < d2: A = A + 1: Loop
        Do While DateSerial(Year(d1) + A, Month(d1) + m + 1, Day(d1)) < d2: m = m + 1: Loop
        Do While DateSerial(Year(d1) + A, Month(d1) + m, Day(d1) + (s + 1) * 7) < d2: s = s + 1: Loop
        Do While DateSerial(Year(d1) + A, Month(d1) + m, Day(d1) + s * 7 + j + 1) < d2: j = j + 1: Loop
        Age = IIf(A, A & " an" & IIf(A > 1, "s", "") & " ", "") & IIf(m, m & " mois ", "") & IIf(s, s & " semaine" & IIf(s > 1, "s", "") & " ", "") & IIf(j Or (A + m + j = 0), j & " jour" & IIf(j > 1, "s", ""), "")
    End If
End Function

et évidemment.. il faut aussi l'appeler dans l'évènement after update..
 
Bonjour à tous 🙂,

Votre tableau est bancal :
La partie du haut est un tableau structuré (ce qui est plutôt bien 👍 ). La partie basse (qui contient sans doute les ajouts via le Userform sans tenir compte du fait que la tableau est un TS) ne sont pas dans le tableau structuré.

C'est à mon avis un non sens de mettre l'âge en "dur". Cela signifie que le contact aura pour l'éternité toujours le même âge. Il vaut mieux mettre une formule dans le TS (tableau structuré) qui met l'âge automatiquement à jour.
Formule en J3 pour le TS :
VB:
=SI(ESTNUM([@[Date_Naissance]]);ANNEE(AUJOURDHUI())-ANNEE([@[Date_Naissance]])-1*(DATE(ANNEE(AUJOURDHUI());MOIS(I3);JOUR([@[Date_Naissance]]))>AUJOURDHUI());"")

Formule en J14 pour la plage ordinaire (qui ne devrait pas exister -> anomalie !) :
VB:
=SI(ESTNUM(I14);ANNEE(AUJOURDHUI())-ANNEE(I14)-1*(DATE(ANNEE(AUJOURDHUI());MOIS(I14);JOUR(I14))>AUJOURDHUI());"")
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
1 K
Retour