'**********************************************************************************
' __ ___ ___ . ___ _____ ___ ___
'|__| /\ | | | | | | / | | | | | | | | |\ |
'| /__\ | |--- | | |/\ | | | | | | | | | \ |
'| / \ | | \ | |___ | \ | |___| |___| |__ |___| | \|
'
'***********************************************************************************
'*****************************************************************
'Collection textbox formaté version 2022 simplifiée
' version 6.0
'date version :05/09/2022
' << LE DATEBOX >>
'*****************************************************************
Option Explicit
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
DateBoxMasK TextBox1, KeyCode, False ' le mask de saisie sera invisible
End Sub
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
DateBoxMasK TextBox2, KeyCode ' le mask de saisie sera visible
End Sub
Private Sub DateBoxMasK(ByVal tbx As Object, ByVal KeyCode As MSForms.ReturnInteger, Optional MaskVisible As Boolean = True)
Dim V$, K&, Mask$, X&, Pos&, An&
Mask = "__/__/____"
With tbx
V = .Value & Mid(Mask, Len(.Value) + 1) 'on prend la valeur actuelle du textbox
Pos = .SelStart + 1:
Select Case KeyCode
Case 96 To 105, 48 To 57
If Pos = 3 Or Pos = 6 Then Pos = Pos + 1
K = KeyCode:
If K >= 96 Then K = K - 48:
If Pos > 10 Then KeyCode = 0: Exit Sub
Mid(V, Pos, 1) = Chr(K)
If Pos = 2 Or Pos = 5 Then Pos = Pos + 1
'*******Contrôle de la validité de la date*********
If Val(V) > 31 Or Val(Mid(V, 1, 1)) > 3 Then V = Mask: Pos = 0
If Val(Mid(V, 4, 1)) > 1 Or Val(Mid(V, 4, 2)) > 12 Then Mid(V, 4, 2) = Mid(Mask, 4, 2): Pos = 3
If Mid(V, 7, 4) Like "####" Then An = Mid(V, 7, 4) Else An = "2004"
If Mid(V, 1, 5) Like "##/##" Then If Not IsDate(Mid(V, 1, 6) & An) Then Mid(V, 4) = Mid(Mask, 4): Pos = 3
'****fin de Contrôle de la validité de la date*****
Case 8:
If Pos = 7 Or Pos = 4 Then Pos = Pos - 1
If Pos > 1 Then Mid(V, Pos - 1, 1) = Mid(Mask, Pos - 1, 1)
Pos = Application.Max(0, Pos - 2)
Case Else: KeyCode = 0 'toutes les autres touches sont automatiquement annulées
End Select
KeyCode = 0
If V = Mask Then V = ""
If V <> "" And Not MaskVisible Then V = Split(V, Mid(Mask, 1, 1))(0)
.Value = V
.SelStart = Application.Min(10, Pos)
End With
End Sub