tiens Baboutz c'est kado
j'ai enlevé les tests dates intermédiaires (comme le tiens) je laisse juste le test date en len(10)
on a donc que 3 nombres a taper (comme le tiens)
mais ce coup si je vais même un peu plus loin je te propose le mask invisible (non inscrit )
le résultat est exactement le même que le tiens sauf que je ne peux pas avoir un segment jour ou mois a trois chiffres
et je gère toujours les touches suppr et del
pour ton info (car je crois que tu n'a pas saisie toute les utilités du masque de saisie) il sert justement a ce que ce genre d'erreur n'arrive pas ;et cela en rédaction et en réédition
il n'est pas que là pour l'aide visuelle et faire joli
et bien entendu seul le format FR passera
'********************************************************************
'COLLECTION TEXTBOX FORMATE EPISODE 1 EXERCICE 1 *
' UN DATEBOX avec masque de saisie invisible format FR *
'Avec préfixe année *
'en version simplifié a but école *
'auteur patricktoulon sur exceldownload et excel pratique *
'version 3.7 *
' *
'le moteur séparé de l'event pour utilisation multi textbox *
'********************************************************************
Option Explicit
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
CtrL_KeyDown TextBox1, KeyCode
End Sub
Private Sub CtrL_KeyDown(ByVal TxtB As MSForms.TextBox, ByVal KeyCode As MSForms.ReturnInteger)
Dim X&, Xl&, T$, mask, tt, f: mask = " / /20 "
If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48
With TxtB
Xl = .SelLength: If Xl = 0 Then Xl = 1: tt = mask: Mid(tt, 1, Len(Trim(.Value))) = Trim(.Value)
T = tt: .SelStart = IIf(T = mask, 0, .SelStart): X = .SelStart:
Select Case KeyCode
Case 96 To 105
If X = 10 Then KeyCode = 0: Exit Sub
If X = 2 Then X = X + 1 Else If X = 5 Then X = X + 3
Mid(T, X + 1, Xl) = Chr(KeyCode - 48) & Mid(mask, X + 2, Xl - 1): X = X + 1
If X = 2 Then X = X + 1 Else If X = 5 Then X = X + 3
Case 8: KeyCode = IIf(X = 0, 0, 8): T = Left(T, X - IIf(X > 0, 1, 0))
Case 46: T = Mid(T, 1, X)
Case Else: KeyCode = 0 ' a pour effet d'inhiber toutes les autre touches
End Select
f = InStr(1, T, " "): f = IIf(f = 0, 10, f): T = Trim(Mid(T, 1, f))
If Len(T) = 10 Then If Not IsDate(T) Or Val(Mid(T, 4, 2)) > 12 Then X = 0: T = "": MsgBox "Date non valide " Else Xl = 0
.Value = T 'restitution
.SelStart = X: .SelLength = Xl: KeyCode = 0
End With
End Sub
est ce cela que tu appelle "user friendly"
LOL