Calcul de temps sous VBA

touwhite

XLDnaute Nouveau
Bonjour tout le monde,
J'ai un souci avec un calcul de durée.
A l'aide d'une distance et d'une vitesse moyenne, j'obtiens la durée du trajet en seconde.
Lorsque je veux le passer en format HH:MM:SS, il apparait des soucis du genre 4:-18:-30
Auriez vous une idée du problème? ou une amélioration que je pourrais ajouter?
Merci



Public Sub Estimationtemps()

'Calcul du temps moyen du trajet en fonction du mode de déplacement choisit

Dim Distance As Double
Dim Vitessemoyenne As Single
Dim Tempsec As Double
Dim Heure As Long
Dim Minute As Long
Dim Seconde As Long

Tempsec = Round((Distance / Vitessemoyenne) * 3600, 0)
Heure = Tempsec / 3600
Minute = (Tempsec - Heure * 3600) / 60
Seconde = Tempsec - Heure * 3600 - Minute * 60


Range("D5") = Heure & ":" & Minute & ":" & Seconde


End Sub
 

pierrejean

XLDnaute Barbatruc
Re : Calcul de temps sous VBA

Bonjour touwhite

Supposant la vitesse exprimée dans l'unité de la distance/heure
exemple distance en km:100
vitesse 60 km/h

VB:
Public Sub Estimationtemps()
'Calcul du temps moyen du trajet en fonction du mode de déplacement choisit
Dim Distance As Double
Dim Vitessemoyenne As Single
Distance = 105
Vitessemoyenne = 60
Range("D5") = Format((Distance / Vitessemoyenne) / 24, "hh:mm:ss")
End Sub
 

Papou-net

XLDnaute Barbatruc
Re : Calcul de temps sous VBA

Bonsoir touwhite, pierrejean, ROGER2327,

RE thouwhite,

Et si tu écrivais tout simplement :

Code:
Public Sub Calculetemps()
Dim Tempsec As Double
  
Tempsec = Range("A1") / Range("A2")
Range("D5") = Format(1 / 24 * Tempsec, "hh:mm:ss")

End Sub

Dans le système de datation d'Excel, la journée de 24h correspond à 1. Il suffit donc de diviser 1 par 24 et de multiplier par le temps en secondes, la mise au format date faisant le reste.

Espérant avoir été utile.

Cordialement.
 

touwhite

XLDnaute Nouveau
Re : Calcul de temps sous VBA

Bonsoir Papou-net.
Cela à l'air de marcher, dans ma cellule D5, je récupere bien l'horaire.
Seulement, lorsque je récupere cette cellule pour l'integrer dans ma textbox, cela se transforme en nombre type "1,000056887..."
Formule ; Range("D5")=TextBox2
 

Papou-net

XLDnaute Barbatruc
Re : Calcul de temps sous VBA

C'et toujours le problème de mise au format de la valeur.

Modifies donc ton code comme ceci :

Code:
Private Sub CommandButton1_Click()

Dim Deplacement As String
  Dim Vitessemoyenne As Single
    Deplacement = ComboBox1.Value
        Select Case Deplacement
                Case "A pied"
                    Vitessemoyenne = 6
                Case "Voiture"
                    Vitessemoyenne = 65
        End Select
Range("A2") = Vitessemoyenne

Call Module1.Calculetemps
TextBox2 = Format(Range("D5"), "hh:mm:ss")
End Sub

Cordialement.

PS : après relecture de ce fil, je tiens à rendre justice à pierrejean, qui sous une forme un peu différente, avait donné la même solution. Je le prie de bien vouloir m'en excuser, je n'avais pas bien détaillé son message.
 

touwhite

XLDnaute Nouveau
Re : Calcul de temps sous VBA

Comme tu le dit Pierrejean avait la même solution.
Celle ci est bien plus simple et plus rapide à mettre en oeuvre que la mienne, pour sa je vous en remercie.
Seulement j'en arrive au même problème:
pour une distance de 52Km avec vitessemoyenne de 6: "9H -20mn 0s" au lieu des 8h40 ....
 

Papou-net

XLDnaute Barbatruc
Re : Calcul de temps sous VBA

Seulement j'en arrive au même problème:
pour une distance de 52Km avec vitessemoyenne de 6: "9H -20mn 0s" au lieu des 8h40 ....

RE :

Il doit y avoir une raison, mais je ne vois pas car chez moi ça donne bien 08:40:00, comme l'atteste la copie de ton fichier ci-jointe.

Cordialement.
 

Pièces jointes

  • touwhite.xlsm
    16.9 KB · Affichages: 130

ROGER2327

XLDnaute Barbatruc
Re : Calcul de temps sous VBA

Bonjour à tous
Les solutions déjà proposées sont fonctionnelles.
Si toutefois vous voulez vraiment obtenir une chaîne de caractères conforme au format que vous avez défini, et non un nombre exploitable dans des calculs, essayez ceci :
VB:
Public Sub Calculetemps()
  Range("D5") = Format((Range("A1") / Range("A2")) / 24, "h"" h ""m"" mn ""s"" s""")
End Sub
ROGER2327
#5144


Lundi 2 Clinamen 138 (Saints Hiboux, maîtres-chanteurs, SQ)
4 Germinal An CCXIX
2011-W12-4T00:24:18Z
 

Discussions similaires

Réponses
7
Affichages
405

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 977
dernier inscrit
Hermet