Heure de début et fin dans textbox
Bonjour à tous,
J'ai dans un userform 2 textbox pour des heures de début et fin.
Je voudrais contrôler la saisie de l'heure de fin, pour qu'elle soit tjs > à l'heure de début
Le code actuellement dans ces 2 textbox permet à l'utilsateur d'être en numérique et format heure
ci-joint:
'Heure de début
Private Sub TextBox4_Change()
Dim H
H = TextBox4.Value
Select Case Len(H)
Case 1
If Not IsNumeric(H) Then H = ""
Case 2
If H Like "#:" Then
H = 0 & H
ElseIf Not IsNumeric(H) Then
H = ""
ElseIf CInt(H) > 23 Then
H = ""
Else
H = H & ":"
End If
Case 3
Case 4
If Not IsNumeric(Right(H, 1)) Then H = Left(H, 3)
Case 5
If Not IsNumeric(Right(H, 2)) Then
H = Left(H, 3)
ElseIf CInt(Right(H, 2)) > 59 Then
H = Left(H, 3)
End If
Case Else
H = ""
End Select
TextBox4.Value = H
End Sub
'Heure de fin
Private Sub TextBox5_Change()
Dim H
H = TextBox5.Value
Select Case Len(H)
Case 1
If Not IsNumeric(H) Then H = ""
Case 2
If H Like "#:" Then
H = 0 & H
ElseIf Not IsNumeric(H) Then
H = ""
ElseIf CInt(H) > 23 Then
H = ""
Else
H = H & ":"
End If
Case 3
Case 4
If Not IsNumeric(Right(H, 1)) Then H = Left(H, 3)
Case 5
If Not IsNumeric(Right(H, 2)) Then
H = Left(H, 3)
ElseIf CInt(Right(H, 2)) > 59 Then
H = Left(H, 3)
End If
Case Else
H = ""
End Select
TextBox5.Value = H
cordialement,
bouddha62
Bonjour,
Avec DateDiff() :
Sub Test()
Dim H1 As Date
Dim H2 As Date
H1 = CDate("10:25:00")
H2 = CDate("09:30:00")
'déduit la première à la seconde (H1 - H2)
If DateDiff("s", H1, H2) < 0 Then MsgBox "Pas bon du tout !" Else MsgBox "Nickel !"
End Sub
merci à toi de me répondre aussi rapidement, mais peux tu me dire ou placer ce code et peux tu me l'expliquer.
merci à toi
Re,
Je verrai plus le contrôle de validité sur Exit() plutôt que sur Change() :
'Heure de début
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox4.Text = "" Then Exit Sub
If Valider(TextBox4.Text) = False Then
MsgBox "L'heure doit être entrée au format 'hh:mm:ss' !"
Cancel = True
Exit Sub
End If
'les 2 textbox doivent être renseigné et si on arrive là, c'est qu'ils ont
'passés les testes de validité !
If TextBox4.Text <> "" And TextBox5.Text <> "" Then
If DateDiff("s", CDate(TextBox4.Text), CDate(TextBox5.Text)) < 0 Then
MsgBox "L'heure de fin doit être supérieure à l'heure de début !"
Cancel = True
End If
End If
End Sub
'Heure de fin
Private Sub TextBox5_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox5.Text = "" Then Exit Sub
If Valider(TextBox5.Text) = False Then
MsgBox "L'heure doit être entrée au format 'hh:mm:ss' !"
Cancel = True
Exit Sub
End If
'les 2 textbox doivent être renseigné et si on arrive là, c'est qu'ils ont
'passés les testes de validité !
If TextBox4.Text <> "" And TextBox5.Text <> "" Then
If DateDiff("s", CDate(TextBox4.Text), CDate(TextBox5.Text)) < 0 Then
MsgBox "L'heure de fin doit être supérieure à l'heure de début !"
Cancel = True
End If
End If
End Sub
Function Valider(H As Variant) As Boolean
If Mid(H, 3, 1) <> ":" Then Valider = False: Exit Function
If Mid(H, 6, 1) <> ":" Then Valider = False: Exit Function
If Not IsNumeric(Left(H, 2)) Then Valider = False: Exit Function
If CInt(Left(H, 2)) > 23 Then Valider = False: Exit Function
If Not IsNumeric(Mid(H, 4, 2)) Then Valider = False: Exit Function
If CInt(Mid(H, 4, 2)) > 59 Then Valider = False: Exit Function
If Not IsNumeric(Right(H, 2)) Then Valider = False: Exit Function
If CInt(Right(H, 2)) > 59 Then Valider = False: Exit Function
Valider = True
End Function