Sympa ton code patricktoulon qui garde le signe '€' dans une TextBox !
J'ai essayé avec le code de patricktoulon et mes connaissances de faire un TextBox pour une date FR seulement + masque (j'aime l'idée du masque ahah).
Voici la V1, améliorable je pense :
Private Sub TextBox_Date_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Masque As String, TexteDate As String
Dim PositionCurseur As Byte
TextBox_Date.MaxLength = 10
Masque = "__/__/20__"
If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48 'conversion du keycode du pavé haut du clavier
If TextBox_Date.Value = "" Then TextBox_Date.Value = Masque: TextBox_Date.SelStart
TexteDate = TextBox_Date
PositionCurseur = TextBox_Date.SelStart
Select Case KeyCode
Case 96 To 105 'pavé numerique
plus = IIf(KeyCode < 96, 32, -48)
If InStr(1, TextBox_Date, "_") = 0 Then Exit Sub Else Mid(TexteDate, InStr(1, TexteDate, "_"), 1) = Chr(KeyCode + plus)
TextBox_Date = TexteDate
If PositionCurseur = 1 Then
TextBox_Date.SelStart = PositionCurseur + 2
ElseIf PositionCurseur = 4 Then
TextBox_Date.SelStart = PositionCurseur + 4
Else
TextBox_Date.SelStart = PositionCurseur + 1
End If
If Len(TextBox_Date) = 10 And InStr(1, TextBox_Date, "_") = 0 Then
If IsDateFR(TextBox_Date) = False Then MsgBox "La date n'est pas valide !": TextBox_Date = "": Beep: KeyCode = 0
End If
Case 8
If PositionCurseur = 0 Then Exit Sub
If PositionCurseur <> 0 Then Mid(TexteDate, PositionCurseur, 1) = Mid(Masque, PositionCurseur, 1)
TextBox_Date = TexteDate: TextBox_Date.SelStart = PositionCurseur - 1: KeyCode = 0
If TextBox_Date = Masque Then TextBox_Date = ""
If PositionCurseur = 9 Then TextBox_Date.SelStart = PositionCurseur - 4
If PositionCurseur = 4 Then TextBox_Date.SelStart = PositionCurseur - 2
Case 46 'touche Suppr(supprimer)
If PositionCurseur = 10 Then Exit Sub
Mid(TexteDate, PositionCurseur + 1, 1) = Mid(Masque, PositionCurseur + 1, 1): KeyCode = 0: TextBox_Date = TexteDate: TextBox_Date.SelStart = PositionCurseur 'touche Suppr
Case 37: If PositionCurseur = 0 Then Exit Sub: TextBox_Date.SelStart = PositionCurseur - 1: KeyCode = 0 'touche fleche gauche
Case 39: TextBox_Date.SelStart = PositionCurseur + 1: KeyCode = 0 'touche fleche droite
Case Else: Exit Sub 'touche les autres touches sont exclues
End Select
End Sub
Function IsDateFR(ByVal dat As Variant) As Boolean
'nous voulons avoir que le format "dd/mm/yyyy" (europe)qui soit validé
If IsDate(dat) Then IsDateFR = Format(dat, "dd/mm/yyyy") = dat And Len(dat) = 10
End Function
EDIT : @X Cellus ; @Steelson
Perso j'ai aussi un problème avec le clavier numérique. J'appuie sur shift + je tape mes nombres. Aucun soucis pour les jours, le slash se place bien puis après ça part en sucette, cela ne tape plus les chiffres mais les caractères présents sur les touches des chiffres...