OVH Cloud OVH Cloud

Calcul de DUREES dans un UserForm

3 réponses
Avatar
Jean Pierre Belfort
Bonsoir,

Je fais un calcul de durées dans un UserForm selon le principe suivant :

TB1 + TB2 = TB3 exemple 0:15 + 29:15 = 29:30

Et donc maitre JB (et je pèse mes mots) m'a conseillé le code suivant,
Mais j'obtiens des erreurs de saisie lorsque je dépasse 23:59
Comment donner aux TB un format de DUREE ?
Merci
JPB

Private Sub TB1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB1) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB1_Change()
CalculDurée
End Sub

Private Sub TB2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB2) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB2_Change()
CalculDurée
End Sub

Sub CalculDurée()
If IsDate(TB1) And IsDate(TB2) Then
TB3 = Format(((CDate(TB1)) * 24 * 60 _
+ CDate(TB2) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub

3 réponses

Avatar
isabelle
bonjour Jean Pierre,

essai avec ce format : "[h]:mm"

isabelle

Bonsoir,

Je fais un calcul de durées dans un UserForm selon le principe suivant :

TB1 + TB2 = TB3 exemple 0:15 + 29:15 = 29:30

Et donc maitre JB (et je pèse mes mots) m'a conseillé le code suivant,
Mais j'obtiens des erreurs de saisie lorsque je dépasse 23:59
Comment donner aux TB un format de DUREE ?
Merci
JPB

Private Sub TB1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB1) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB1_Change()
CalculDurée
End Sub

Private Sub TB2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB2) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB2_Change()
CalculDurée
End Sub

Sub CalculDurée()
If IsDate(TB1) And IsDate(TB2) Then
TB3 = Format(((CDate(TB1)) * 24 * 60 _
+ CDate(TB2) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub


Avatar
Jean Pierre Belfort
J'ai essayé [h]:mm, mais ca ne marche pas, ca "cache" l'heure
J'ai aussi essayé :
Sub CalculDurée()
If IsDate(TB1) And IsDate(TB2) Then
TB3 = Format(((CDate(TB1)) *100 * 60 _
+ CDate(TB2) * 100 * 60) / (100 * 60), "hh:mm")
End If
End Sub
Mais ca ne marche pas non plu

Que faire Isabelle?
JPB

Avatar
JB
Bonjour,

-heures:minutes seulement
-Pas testé totalement

http://cjoint.com/?iwjneDFeaI

Private Sub TextBox1_BeforeUpdate(ByVal Cancel As
MSForms.ReturnBoolean)
If Not estTemps(Me.TextBox1) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub TextBox1_Change()
Calcul
End Sub

Private Sub TextBox2_BeforeUpdate(ByVal Cancel As
MSForms.ReturnBoolean)
If Not estTemps(Me.TextBox2) Then
MsgBox "Erreur saisie!"
Cancel = True
End If
End Sub

Private Sub TextBox2_Change()
Calcul
End Sub

Sub Calcul()
If estTemps(Me.TextBox1) And estTemps(Me.TextBox2) Then
' Me.TextBox3 = Format(((ConvHeure(Me.TextBox1)) * 24 * 60 +
ConvHeure(Me.TextBox2) * 24 * 60) / (24 * 60), "hh:mm")
Me.TextBox3 = AfficheHeure(((ConvHeure(Me.TextBox1)) * 24 * 60 +
ConvHeure(Me.TextBox2) * 24 * 60) / (24 * 60))
End If
End Sub

Function AfficheHeure(temps)
h = Int(temps * 24)
m = Format(Int((temps - (h / 24)) * 60 * 24 + 0.00000001), "00")
AfficheHeure = h & ":" & m
End Function

Function estTemps(t)
p = InStr(t, ":")
m = Mid(t, p + 1)
If p > 0 And Len(m) > 0 Then estTemps = True Else estTemps = False
End Function

Function ConvHeure(t)
p = InStr(t, ":")
ConvHeure = Val(Left(t, p - 1)) / 24 + Val(Mid(t, p + 1)) / (24 * 60)
End Function

JB

Bonsoir,

Je fais un calcul de durées dans un UserForm selon le principe suivant :

TB1 + TB2 = TB3 exemple 0:15 + 29:15 = 29:30

Et donc maitre JB (et je pèse mes mots) m'a conseillé le code suivant,
Mais j'obtiens des erreurs de saisie lorsque je dépasse 23:59
Comment donner aux TB un format de DUREE ?
Merci
JPB

Private Sub TB1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB1) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB1_Change()
CalculDurée
End Sub

Private Sub TB2_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If Not IsDate(TB2) Then
Msg = MsgBox("Saisie incorecte !", vbOKOnly, "Production")
Cancel = True
End If
End Sub

Private Sub TB2_Change()
CalculDurée
End Sub

Sub CalculDurée()
If IsDate(TB1) And IsDate(TB2) Then
TB3 = Format(((CDate(TB1)) * 24 * 60 _
+ CDate(TB2) * 24 * 60) / (24 * 60), "hh:mm")
End If
End Sub