Une autre proposition, avec
- - contrôle des données entrées
- - prise en compte des heures après minuit
J'ai repris aussi la possibilité que prévoit Xmenpl que je salue de remplacer les :
par .
pour faciliter la saisie
Private Sub cmd_OK_Click()
If invalid(txt_matin_depart.Text) Or invalid(txt_matin_fin.Text) Or invalid(txt_apresmidi_depart.Text) Or invalid(txt_apresmidi_fin.Text) Then
MsgBox "Valeur incorrecte !"
Exit Sub
End If
If txt_apresmidi_depart.Text <> "" And txt_matin_fin.Text <> "" Then
If horaire(txt_apresmidi_depart.Text) < horaire(txt_matin_fin.Text) Then
MsgBox "Chevauchement d'horaires !"
Exit Sub
End If
End If
If txt_matin_depart.Text <> "" And txt_matin_fin.Text <> "" Then
matin = (horaire(txt_matin_fin.Text) - horaire(txt_matin_depart.Text))
If matin < 0 Then matin = matin + 1
End If
If txt_apresmidi_depart.Text <> "" And txt_apresmidi_fin.Text <> "" Then
apm = (horaire(txt_apresmidi_fin.Text) - horaire(txt_apresmidi_depart.Text))
If apm < 0 Then apm = apm + 1
End If
Selection = matin + apm
UserForm1.Hide
End Sub
Function horaire(valeur As String) As Double
horaire = Val(Split(Replace(valeur, ".", ":") & ":0", ":")(0)) / 24 + _
Val(Split(Replace(valeur, ".", ":") & ":0", ":")(1)) / 24 / 60
End Function
Function invalid(valeur As String) As Boolean
Set obj = CreateObject("vbscript.regexp")
obj.Pattern = "([\d.:])+"
invalid = (obj.Execute(valeur).Count = 0) And (valeur <> "")
End Function