Expliquer une procédure de date

Bonsoir.
J 'ai récupéré cette procédure et je voulais l'utiliser pour saisir une date dans un formulaire... mais je n' y arrive pas..et ne la comprends pas.

Quelqu'un aurait-il l'amabilité et le temps de l'expliquer pour que je puisse éventuellement l'adapter...je vous en serais reconnaissant.

Private Sub textbox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
dim i as string, ind as long,x as string
i=chr(keyascii):keyascii=0
ind=instr(1,textbox,"_")
if ind<>0 then:x=textbox.text:mid(x,ind,1)=textbox.text=x
ind=instr(1,textbox,"-"'
'vérification de la validité
if left(textbox,2)>31 then textbox="--/--/----"
if mid(textbox,4,2)>12 then textbox=left(textbox,3)&"--/----"
if not left(textbox,6)like "-" then
if not isdate(left(textbox,6)&"2020) then txtbox="--/--/---"
'positiion du curseur
ind=instr(1,textbox,"-")
textbox.selstart(if(ind>*<>0, ind-1, len(textbox))
end sub

Edit modo : Merci de mettre le code entre balises grâce au bouton </>

Salut jpmalb,

à part passer son temps à ce petit jeu, le plus facile pour toi serait de renseigner le format désiré dans un Label près de ta TextBox et de laisser l'utilisateur se servir de ses neurones pour écrire une date valide...
Tu peux toujours tester cette validité en sortie de TextBox, quitte à effacer et recommencer la saisie.

Sinon, un clic sur la feuille ouvre l'USF.
Je fais un peu joujou, tu verras..

Private Sub txt1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'
If Me.txt1.Text = "" Then Exit Sub
If Asc(Right(Me.txt1.Text, 1)) < 48 Or Asc(Right(Me.txt1.Text, 1)) > 57 Then _
    If Len(Me.txt1.Text) > 0 Then Me.txt1.Text = Left(Me.txt1.Text, Len(Me.txt1.Text) - 1)
'
If KeyCode = 8 Then
    Select Case Right(Me.txt1.Text, 1)
        Case "/"
            iIdx = 2
        Case Else
            iIdx = 1
    End Select
    Me.txt1.Text = Left(Me.txt1.Text, Len(Me.txt1.Text) - iIdx)
End If
'
Select Case Len(Me.txt1.Text)
    Case 2
        Me.txt1.Text = IIf(Val(Me.txt1.Text) > 31, "", Me.txt1.Text & "/")
    Case 5
        Me.txt1.Text = Me.txt1.Text & "/"
        If Val(Mid(Me.txt1.Text, 4, 2)) > 12 Then
            Me.txt1.Text = Left(Me.txt1.Text, 3)
        Else
            iIdx = Choose(Val(Mid(Me.txt1.Text, 4, 2)), 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
            If Val(Left(Me.txt1.Text, 2)) > iIdx Then Me.txt1.Text = Left(Me.txt1.Text, 3)
        End If
    Case 10
        Me.txt1.Text = IIf(IsDate(Me.txt1.Text), Replace(Me.txt1.Text, "/", "-"), Left(Me.txt1.Text, 6))
End Select
'
End Sub
14jpmalb.xlsm (19.95 Ko)


Joyeuses Fêtes !

A+

merci pour ta réponse et ta suggestion...
Bien vu la démonstration .. trop fort..

Bonne année
@+

Pour Curulis57

Ta procédure de saisie de date fonctionne bien sur les jours et les mois et lorsque l'année est saisie, les "/" se transforment en "-" pour indiquer la validité de la saisie.

Sans vouloir trop abuser, lorsque l'on rentre l'année, n'y aurait-il pas moyen de limiter e le nombre de saisies à 4 caractères pour éviter que par inadvertance, on rentre 05-01-20211... ?

Merci

Rechercher des sujets similaires à "expliquer procedure date"