Vianneyp
Messages postés82Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 2010
-
9 avril 2007 à 14:42
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 2007
-
13 avril 2007 à 08:25
D'abord bonjour tout le monde.
Voila,j'ai besoin de chronométrerun laps de temps en deux actions.
J'ai d'abord utiliser un Timer mais a cause d'un probléme de memoire,c'est -dans mon cas-impossible.
J'ai donc stocker l'heure de depart et l'heure de fin dans deux variable "Debut" et "Fin".
Ensuite je soustrai secondes et secondes,minutes et minutes puis enfin,heures et heures.
Ex : debut a 20:40:52 et fin a 20:46:12.
20 - 20 = 00
46 - 40 = 06
52 - 12 = 40
L'action a donc durée 6 mins et 40 secs.
Cepandant,pour des raisons que j'ignore il arrive que le resultat soit faux alors que la plupart du temps,cela marche a merveille.
J'aimerai donc que vous jetiez un coup d' oeil a ma procédure :
Avec par exemple secA étant destiné aux secondes a la fin et minD,aux minutes au debut.
Et Td pour temps initial et Tf pour le temps a l'arrivé.Td comme Tf sont de la forme HH:MM:SS
secA = Right(Tf, 2)
'soit dans notre exemple secA = 12
secD = Right(Td, 2)
'secD = 52
secJ = CInt(secA) - CInt(secD)
'secJ = 52 - 12
minD = Right(Td, 5)
'minD = 40:52
minD = Left(minD, 2)
'minD = 40,bon vous avez compris...
minA = Right(Tf, 5)
minA = Left(minA, 2)
minJ = CInt(minA) - CInt(minD)
heuA = Left(Tp, 2)
heuD = Left(Form1.Start.Caption, 2)
heuJ = CInt(heuA) - CInt(heuD)
Temps écoulé = (heuJ + "h " + minJ + "min et " + secJ + "sec")
Je ne sait donc pas si cela vient du code ci-dessus mais je me retrouve par moment avec des resultats comme 00:01:-47
Voyai vous un truc qui cloche ?Merci d'avance de votre aide
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 14:53
Déjà (et je tiens à ce stade que tu y réfléchisse un peu tout seul)
Regarde ce que tu as écrit :
Ex : debut a 20:40:52 et fin a 20:46:12.
20 - 20 = 00
46 - 40 = 06
52 - 12 = 40
Regarde le noir gras et le rouge gras : il n'y a rien, là, qui te choque ?
moi, vois-tu, je vois que les secobdes de fin sont 12 -52 = -
40 et pas + 40
J'en déduis qu'il va me falloir oter 40 secondes des 6 minutes et que, donc, j'obtiendrai 5 minutes et 20 secondes.
J'en déduis également qu'il me faut faire le même raisonnement, éventuellement, entre les minutes (qui pourraient être négatives) et les heures !
Vas-y d'abord seul (pas difficile) et reviens avec un code d'essai commenté si tu n'y parviens pas ...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 14:58
J'ajoute qu'une heure de début et une heure de fin sans dates ne veulent absolument rien dire !
Imagine un peu que ton heure de début soit aujourd'hui à 23 h 59:01 et que ton heure de fin soit demain à 00 h. 00:00 !!!!
avec ton "truc"; tu obtiendrais -23 heures -59 ninutes et - 1 seconde !!!!! (ya pas photo)
Vianneyp
Messages postés82Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 2010 9 avril 2007 à 15:36
Effectivement...il y a un petit probléme lol
Bon c'est vrai que dans des cas comme :
15:25:25 et 16:30:45 ca pose probléme.
C'est pour sa que dans mon exemple j'ai inversé le 52 et le 12 sans meme y faire attention.
J'ai donc ajouté la ligne suivante : if secJ < 0 then secJ = -1 * jecJ ,ect...
Avec l'exemple du dessus on obtiendrai :
16 - 15 = 1
25 - 30 = -5 qui devient donc 5
25 - 45 = -20 qui deviendra lui aussi 20.
Maintenant ca fonctionne !
Mais reste le probléme des dates que je n'avais meme pas envisagé (décidement).
Je trouverai bien en moyen en isolent le jour de Date$.
Merci encore de ton aide
Vous n’avez pas trouvé la réponse que vous recherchez ?
Vianneyp
Messages postés82Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 2010 9 avril 2007 à 19:37
Bon,aprés m'etre pris la tete pour rien pendant 2h,je me rend compte que tout cela ne rime absolument a rien...
Prenez par exemple 15:50:00 et 17:45:00.
Avec ma "methode" on trouverai 02:05:00 ce qui est completement faux...
J'ai,a tord,voulu traiter independament heures,minutes et secondes...
On devrai obtenir 1h et 55 mins.
Alors voila je m'en remet a vous,auriez vous une idée d'algo. pour obtenir la difference de temps entre deux heures données ?
Tout convertir en seconde bien sur mais ca me semble assez "fastidieux" non ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 20:27
Oui ?
1) Une autre fois alors :
Les heures sans date ne signifient absolument rien lorsque l'on veut calculer valablement une durée écoulée entre deux mesures
2) une méthode simple : calcule la différence en secondes par datediff puis transforme ce nombre de secondes en heures, minutes et secondes.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 9 avril 2007 à 21:12
Hé ?
Cà y est ?
Je viens de m'amuser avec une autre, si c'est dans le même mois ...
Celle-là a la marque jmf (elle est donc rigolote)
Private Sub Command3_Click()
datedebut = "01/01/2001 10:22:43"
datefin = "02/01/2001 10:23:44"
couic = DateAdd("s", DateDiff("s", datedebut, datefin), "01/01/0001")
MsgBox Day(couic) - 1 & " jours " & Format(couic, "hh:mm:ss")
End Sub
Vianneyp
Messages postés82Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 2010 10 avril 2007 à 19:46
Ben,merci a tout les deux,d'abord jmfmarques tes deux methodes fonctionnes .
Sinon voici une version corrigé de la miene :
nouvelle exemple : 23:40:20 et 02:20:40
secA = Right(Tf, 2)
'secA = 40
secD = Right(Td, 2)
'secD = 20
secJ = CInt(secA) - CInt(secD)
'secJ = 40 - 20 = 20
minD = Right(Td, 5)
'minD = 40:20
minD = Left(minD, 2)
'minD = 40
minA = Right(Tf, 5)
'minA =20:40
minA = Left(minA, 2)
'minA =20
minJ = CInt(minA) - CInt(minD)
'minJ = 20 - 40 = -20
heuA = Left(Tf, 2)
'heuA = 02
heuD = Left(Td, 2)
'heuD = 23
heuJ = (24 - heuD) + heuA
heuJ = (24 - 23) + 02
heuJ = 03
If secJ < 0 then 'faux
secJ = 60 - secJ
minJ = minJ - 1
End if
If minJ < 0 then 'vrai
minJ = 60 + minJ'minJ 60 + (-20) 40
heuJ = heuJ - 1'heuJ 03 - 1 02
End if
Temps écoulé = (heuJ + "h " + minJ + "min et " + secJ + "sec")
On a donc : 02:40:20
En fait,il y a dans ma form un composant qui est continuellement redessiné et de ce fait,un Timer n'arrive pas a suivre,j'ai remarquer qu'il prenai énormément de retard alors voila pourquoi j'aivait besoin de comparer deux heures.
Bonne soirée
Vianneyp
Messages postés82Date d'inscriptionjeudi 6 juillet 2006StatutMembreDernière intervention 6 janvier 2010 11 avril 2007 à 21:02
Bon,désolé de revenir a la charge mais je doit vraiment être nul...
Mon algo ne marchait toujours pas dans tout les cas (eh oui,il suffit d'un contre exemple...)
Alors,bien décider a terminer mon propore petit bout de code (D'ailleurs jmfmarques,ta seconde methode ne marche pas dans tout les cas non plus.) j'en suis arrivé a ceci :
Form1.Start.Caption est un label dans lequels est stocké l'heure de départ.
heuJ = 0
secA = Right(Tf, 2)
secD = Right(Td, 2)
secJ = CInt(secA) - CInt(secD)
minD = Right(Td, 5)
minD = Left(minD, 2)
minA = Right(Tf, 5)
minA = Left(minA, 2)
minJ = CInt(minA) - CInt(minD)
heuA = Left(Tf, 2)
heuD = Left(Td, 2)
Do While (heuD <> heuA)
If heuA = 1 Then
heuA = 24
Else heuA heuA heuA - 1
End If
heuJ = heuJ + 1
Loop
If secJ < 0 Then
secJ = 60 + secJ
minJ = minJ - 1
End If
If minJ < 0 Then
minJ = 60 + minJ
heuJ = heuJ - 1
End If
C'est un peu plus long mais on n'utilise ni modulo,ni conversions,ni instructions specifiques et il n'y a pas de notion de jours ni de mois.
(En partant du principe que le temps d'arrivé n'exedera jammais le lendemain,meme heure.De toute facon ce que je foit mesuré prend,au plus 3 ou 4 h.)
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 13 avril 2007 à 08:25
Je pense que la premiere étape serait que tu refasses le calcul a la main. Car je pense a un pb de méthodologie. La méthode de jmf est toute simple (d'ailleurs tu ne dis pas ou, quand, comment elle foire) mais je vois que tu as a coeur de finir ta facon ce qui est tout a ton honneur.
Prend plusieurs heures au hasard et fais les calculs. Cela est du niveau CM1 (je m'en souviens meme). La seul difficulté est de refaire cela en VB (si difficulté il y a). La, j'ai la fleme de lire ton code car il y a des heuD, heuJ, heuA et je sais pas a quoi cela correspond.
Reprend donc avec un exemple simple sur un autre projet avec 6 champs:
H_Debut, M_Debut, S_Debut et H_Fin, M_Fin, S_Fin
Refais ton algo et si tu as encore des difficulté on reverra cela ensemble.