Calcul de l'age dans un formulaire en fonction du numéro NIR

Bonjour,

Je suis nouveau sur le forum et je galère avec vba.

Je suis bénévole dans une association et je travaille sur un fichier excel qui est documenté via un formulaire. Dans ce formulaire j'enregistre entre autre le Numéro SS (NIR), les personnes utilisatrices du fichier me demande d'indiquer au niveau du formulaire l'age de la personne que j'enregistre, actuellement je le fais via l'enregistrement du formulaire dans la feuille excel . Mais la, dans le formulaire, je coince, j'ai créé un textbox ou j'arrive à extraire l'année et le mois (fonction Mid) sous format "5508" mais impossible de convertir en date, ni de calculer l'age.

Si nécessaire via un bouton de commande mais je préfèrerais une fonction automatisée

Si l'un d'entre vous peut se pencher sur le problème je le remercie d'avance.

Christian

Bonjour et bienvenue sur le forum

Il sera difficile de t'aider si tu ne joins pas ton fichier...

Bye

Bonjour et merci de ce retour rapide

J'ai des données plutôt confidentielles et il faudrait que je fasse le ménage avant.

Je veux éviter de diffuser

Christian

Bonjour,

regarde cette fonction : =DATE(année;mois;jour)

Et pour l'âge, avec ta date en A1 et =Aujourdhui() en B1, ça sera :
=DATEDIF(A1;B1;"y")
eric

Merci du retour,

Il s'agit du formulaire donc code en vba et la je seche le voici ci dessous

Private Sub TextBox3_Change()

'completer le NIR sous format SS, sélection H/F et erreur de saisie 1er caractère
Dim NIR As String
NIR = TextBox3.Value

If Len(NIR) = 13 Then
TextBox3 = Format(TextBox3, "0 00 00 00 000 000")
End If

If Mid(NIR, 1, 1) = 1 Then
TextBox4.Value = "Homme"
TextBox4.ForeColor = RGB(0, 0, 255)
ElseIf Mid(NIR, 1, 1) = 2 Then
TextBox4.Value = "Femme"
TextBox4.ForeColor = RGB(0, 0, 255)
Else
TextBox4.Value = "NIR doit débuter par 1 ou 2"
TextBox4.ForeColor = RGB(255, 0, 0)
End If

If Len(NIR) = 13 Then
TextBox8.Value = 97 - Round((NIR / 97 - Int(NIR / 97)) * 97, 0)
End If
TextBox9.Value = Mid(TextBox3, 2, 4)
TextBox9.ForeColor = RGB(0, 0, 255)
End Sub

Voila mon code qui fonctionne mais en TextBox9 il me faut l'age et non pas comme aujourd'hui YYMM

Merci

Bonsoir Brandtner, Le Forum,

Voici ci-dessous un code pour distinguer l'âge.

En considérant que l'association n' a pas de jeunes membres (-25 ans).

Sub Age()
Dim YYMMJJ, Age As String, An, Mois As Integer
'Note: Mid(TextBox3, 2, 4) te donne 5508 selon ton exemple
'Et donc Mid(TextBox3, 2, 2) te donnera 55 tandis que Mid(TextBox3,4,2) donnera 08
YYMMJJ = "19" & Mid(TextBox3, 2, 2) & "/" & Mid(TextBox3, 4, 2) & "/01"
' Pour test YYMMJJ = "1955/12/01"
'Age brut en année
An = Year(Now()) - Year(YYMMJJ)
'Age net. Correction mois
Mois = Month(Now()) - Month(YYMMJJ)
Age = IIf(Mois > 0, An & " ans, " & Mois & " mois", An - 1 & " ans, " & 12 + Mois & " mois")
End Sub

Et que ne connaissant pas le jour de naissance. On considère alors le 1ier jour du mois.

Bonjour Xcellus,

Je n'arrive pas à entrer votre code dans mon fichier par contre j'ai plutot bien avancé sur mon code mais j'ai une erreur sur Textbox10 voir ci dessous

Private Sub TextBox3_Change()

'completer le NIR sous format SS, sélection H/F et erreur de saisie 1er carractère

Dim NIR As String

NIR = TextBox3.Value

If Len(NIR) = 13 Then

TextBox3 = Format(TextBox3, "0 00 00 00 000 000")

End If

If Mid(NIR, 1, 1) = 1 Then

TextBox4.Value = "Homme"

TextBox4.ForeColor = RGB(0, 0, 255)

ElseIf Mid(NIR, 1, 1) = 2 Then

TextBox4.Value = "Femme"

TextBox4.ForeColor = RGB(0, 0, 255)

Else

TextBox4.Value = "NIR doit débuter par 1 ou 2"

TextBox4.ForeColor = RGB(255, 0, 0)

End If

If Len(NIR) = 13 Then

TextBox8.Value = 97 - Round((NIR / 97 - Int(NIR / 97)) * 97, 0)

End If

TextBox9.Value = Mid(NIR, 2, 4)

TextBox9 = Format(TextBox9, "00/00")

TextBox9.ForeColor = RGB(0, 0, 255)

TextBox11.Value = TextBox9

TextBox11 = Format(TextBox9, "mmmm yyyy")

TextBox10.Value = DateDiff("yyyy", TextBox11, Now)

TextBox10 = Format(TextBox10, "000")

Merci de votre retour

Christian

Bonjour Christian,

Il aurait été plus simple de réaliser un mini-formulaire comprenant les différents Textbox avec le code associé.

Quoi qu'il en soit en retour voici une correction de ta dernière proposition.

Public NIR As String
Private Sub TextBox3_Change()
'completer le NIR sous format SS, sélection H/F et erreur de saisie 1er carractère
NIR = TextBox3.Value
If Len(NIR) = 13 Then
TextBox3 = Format(TextBox3, "0 00 00 00 000 000")
TextBox4.SetFocus
End If
End Sub
Private Sub TextBox4_Enter()
' Vérification Homme ou Femme
If Mid(NIR, 1, 1) = 1 Then
TextBox4.Value = "Homme"
TextBox4.ForeColor = RGB(0, 0, 255)

ElseIf Mid(NIR, 1, 1) = 2 Then

TextBox4.Value = "Femme"
TextBox4.ForeColor = RGB(0, 0, 255)

Else
TextBox4.Value = "NIR doit débuter par 1 ou 2"
TextBox4.ForeColor = RGB(255, 0, 0)
End If
'Contrôle du Numéro (avec espaces)
If Len(NIR) = 18 Then
TextBox8.Value = 97 - Round((NIR / 97 - Int(NIR / 97)) * 97, 0)
End If
'Valorisations des TextBox9 à 11
TextBox9.Value = Mid(NIR, 3, 2) & Mid(NIR, 6, 2)

TextBox9 = Format(TextBox9, "00/00")

TextBox9.ForeColor = RGB(0, 0, 255)

TextBox11.Value = TextBox9

TextBox11 = Format(TextBox9, "mmmm yyyy")

TextBox10.Value = DateDiff("yyyy", TextBox11, Now())

TextBox10 = Format(TextBox10, "00")

End Sub

Note: Les différents traitements en TextBox4 ne sont effectués que si le NIR a la longueur nécessaire.

Tant que c'est en dessous de 13 caractères cela n'est pas effectué.

Ce qui évite à chaque fois que le NIR est changé de lancer des traitements inappropriés.

Ensuite, vu que tu transformes le format du NIR en ajoutant des espaces. Il faut en tenir compte dans le code.

La longueur du NIR n'est plus le même. Et les différents positions du mois et de l'année en pâtissent.

Bonsoir,

Cela ne fonctionne pas, j'ai toujours une erreur d'éxécution 13 "incompatibilté de type"

tout le reste du code fonctionne j'ai meme réussi à afficher la DDN en TextBox11 avec le format d/mmmm/yyyy (donc meme format que "now")

sur les dernières lignes ca bloque

TextBox10.Value = DateDiff("yyyy", TextBox11, Now())

TextBox10 = Format(TextBox10, "00")

Si quelqu'un à une idée

Merci

Bonjour le fil, bonjour Christian et

Une petite présentation ICI serait la bienvenue

Si vous ne l'avez pas encore fait, je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER]
qui vous aidera dans vos demandes et réponses sur ce forum

ATTENTION ! Pour vos post, merci de mettre vos codes entre balises avec le bouton

image

Merci de votre participation

Cordialement

A nouveau, et bonjour BrunoM45,

Le code fourni fonctionne correctement.

Voir le fichier ci-dessous réalisé vite-fait.

25testchristian.xlsm (19.24 Ko)

Comme indiqué dans mon dernier message.

Si tu fournis pas un exemple de ton propre formulaire. Comment voir ton erreur? quelle message d'erreur?

Il se peut que ton textbox10 est vide. Vérifie en plaçant un Stop après la ligne ci-dessous. Et regarde la valeur du TextBox en passant la souris dessus.

TextBox10 = Format(TextBox10, "00")

Stop

Bonjour et merci pour vos réponses,

j'ai bien vu que ca fonctionne sur votre fichier mais je coince toujours au même endroit

Je joins le fichier. Je me suis formé tout seul donc j'ai de grosses lacunes et je vous remercie beaucoup pour votre aide

Bonjour Christian,

Tout d'abord évite de mettre un fichier comportant un mot de passe sur ton projet VBA.

Cela oblige à le cracker pour pouvoir te répondre.

Sur mon message d'hier 15h27 j'ai débuté le code par une variable public (NIR).

Ce que tu n'as pas reproduit dans ton fichier.

Donc dans le code du Formulaire commence ainsi.

Public NIR As String

Private Sub Workbook_Open()
Formulaire.Show

Worksheets("Liste des vaccinés").Select

End Sub

Ensuite enlève la ligne du Dim pour le TextBox3. Ou met cette ligne en commentaire.

Private Sub TextBox3_Change()
'Dim NIR As String
'completer le NIR sous format SS, sélection H/F et erreur de saisie 1er carractère
NIR = TextBox3.Value

Enfin il faut modifier dans l'Enregistrer_Click(). La référence à la TextBox9 (à placer en commentaire ou ôter) puisque c'est la TextBox10 qui est nécessaire.

ActiveCell.Offset(0, 11).Value = TextBox7.Value
ActiveCell.Offset(0, 12).Value = Commune.Value
ActiveCell.Offset(0, 13).Value = TextBox10.Value
'ActiveCell.Offset(0, 13).Value = TextBox9.Value

'If TextBox9.Value < 20 Then
'ActiveCell.Offset(0, 13).Value = 21 - TextBox9.Value
'End If
ActiveCell.Offset(0, 14).Value = Covid.Value

Les lignes IF textBox9. value <20 then ... jusqu'à End if sont aussi à modifier selon le besoin.

Je les ai mises en commentaires pour tester.

Bonsoir X Cellus,

Ca marche nickel avec les modifications j'ai juste un problème complémentaire des que je mets un NIR avec une date en dessous de 1950 (1 49 06 12 111 111) il me mets en 2049 au lieu de 1949.

Désolé pour le dérangement

Christian

Bonjour à tous

A noter que tout fichier identifiant des personnes par le NIR doit impérativement être déclaré à la CNIL

Bonsoir,

Ce fichier a uniquement un but statistique, aucun nom, ni adresse, n'est lié ou associé

A nouveau,

Si tu n'as pas dans le renseignement de tes NIR, Sœur André (Lucille Randon) et/ou Marcel Meys

La correction dans le code du Textbox4_Enter(), proposée ci-dessous devrait suffire.

TextBox9.ForeColor = RGB(0, 0, 255)

If Left(Catégorie.Value, 4) = "plus" Then Décen = "19"
If Left(Catégorie.Value, 2) = "12" Then Décen = "20"
'TextBox11.Value = TextBox9 Pas nécessaire
'TextBox11 = Format(TextBox9, "mmmm yyyy") A ôter
TextBox11 = Format(Décen & TextBox9, "mmmm yyyy")
TextBox10.Value = DateDiff("yyyy", TextBox11, Now())

Ne pas oublier de bien renseigner la catégorie avant d'inscrire le NIR

Bonjour,

Avec quelques modifications complémentaires j'y suis arrivé, un petit souci pour les 18 - 21 ans pour qui la date de naissance était en 1900.

Mais j'ai trouvé une astuce pour corriger.

Je remercie particulièrement X Cellus pour son temps perdu à corriger mes lacunes

Merci à tous

Rechercher des sujets similaires à "calcul age formulaire fonction numero nir"