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.