Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 8 'empêche l'utilisation de toute autre touche que {0, 1, 2, 3, 4, 5, 6, 7, 8 et 9}
End Sub
Private Sub CommandButton1_Click()
Dim X As Byte 'déclare la variable X
Dim D As Date 'déclare la variable D
X = CByte(TextBox1.Value) 'définit la variable D
D = DateSerial(Year(Date), Month(Date) + 1, 0) 'définit le dernier jour du mois
On Error Resume Next 'gestion des erreurs (en cas dérreur passe à la ligne suivante)
D = CDate(X & "/" & Month(Date) & "/" & Year(Date)) 'définit la date D (génère une erreur si date invalide [31 févier] par exemple)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "Date invalide ! Vous devez taper une valeur entre 1 et " & Day(D) 'message
With Me.TextBox1 'prend en compte la TextBox1
.SelStart = 0 'début de la sélection
.SelLength = Len(.Value) 'longueur de la sélection
.SetFocus 'place le curseur
End With 'fin de la prise en compte de la TextBox1
Exit Sub 'sort de la procédure
End If 'fin de la condition
D = DateSerial(Year(Date), Month(Date), X) 'redéfinit la date D
ActiveCell.Value = D 'place la date formatée dans la cellule active
Unload Me 'vide et ferme l'Userform
End Sub