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 subEdit 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
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,
Merci