Format pour saisir la date
Bonsoir
Une textbox, dans un formulaire, est destinée à recueillir la date saisie au clavier dans ce style : "27/12/2020".
Pour limiter la saisie, je souhaiterais que les barres de fraction soient déjà présentes et que l'on puisse vérifier que ce qui a été saisi correspond bien à une date
(avec IsDate, ça devrait le faire) .
Comment créer ce format "(../../....") destiné à recevoir les chiffres ?
Merci
Bonjour,
Un peu de lecture ...
ric
...merci... j'y trouverai sans aucun doute la réponse que je cherche...j'ai fait des recherches mais mon critère de recherche etait vraisemblablement mal exprimé. Bonne soirée
Bonjour,
Il ne fallait regarder que le bout concernant la date dans un textbox ....
Si le textbox concerné se nomme : "Textbox1" > Fais un test ...
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&, D$, M$, A, T$, mask, C2, D2: mask = "__/__/____"
'pour ceux qui n'ont pas le pavé numerique conversion du keycode du pavé haut du clavier
If KeyCode >= 48 And KeyCode <= 57 Then KeyCode = KeyCode + 48
'c'est parti on démarre le controle!!
With TxtB
Xl = .SelLength: If Xl = 0 Then Xl = 1 'Xl= la longeur de texte selectionné
.Value = IIf(.Value = "", mask, .Value): If KeyCode = 8 And Xl > 1 Then KeyCode = 46
T = .Value: .SelStart = IIf(T = mask, 0, .SelStart): X = .SelStart:
Select Case KeyCode
Case 96 To 105 'pavé numerique haut et bas (Attention!!!pas besoins de bloquer la touche MAJ!!!!!!!!le code se charge de convertir)
If X = 10 Then KeyCode = 0: Exit Sub
If X = 2 Or X = 5 Then X = X + 1
Mid(T, X + 1, Xl) = Chr(KeyCode - 48) & Mid(mask, X + 2, Xl - 1)
X = X + 1: Xl = 0: If X = 2 Or X = 5 Then X = X + 1
'le plus gros tu traitement se passe avec controle de validité de date en fait!!!
If Val(T) > 12 Or Val(Mid(T, 1, 1)) > 1 Then X = 0: Xl = 2: Mid(T, 1, 2) = Mid(mask, 1, 2): Beep
If Val(Mid(T, 4, 2)) > 31 Or Val(Mid(T, 4, 1)) > 3 Then Mid(T, 4.2) = Mid(mask, 4, 2): X = 3: Xl = 2: Beep
D = Mid(T, 4, 2): M = Mid(T, 1, 2): A = Mid(T, 7, 4)
If IsDate(D & "/" & M) And Not IsDate(D & "/" & M & "/2000") Then Mid(T, 4, 2) = Mid(mask, 4, 2): X = 3: Xl = 2: Beep: KeyCode = 0
If X = 10 And Not IsDate(T) Then Mid(T, 7, 10) = Mid(mask, 7, 10): X = 6: Xl = 4: Beep
Case 8:
If X = 0 Then KeyCode = 0:: .Value = "": Exit Sub Else Mid(T, X, 1) = Mid(mask, X, 1): X = X - 1: Xl = 0
If T = mask Then T = ""
Case 46:
If X = 10 Then Exit Sub Else Mid(T, X + 1, Xl) = Mid(mask, X + 1, Xl): X = X: Xl = 0: If X = 2 Or X = 5 Then X = X + 1
If T = mask Then T = ""
Case Else: KeyCode = 0 ' a pour effet d'inhiber toutes les autre touches
End Select
.Value = T 'restitution
.SelStart = X: .SelLength = Xl: KeyCode = 0
End With
End Sub
ric