[Résolu] Afficher le temps qui s'écoule pendant un traitement

Afficher le temps qui s'écoule pendant un traitement [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 07-06-2007 à 13:14:05    

Voici mon problème :
dans une application en VB6, je voudrais afficher quelquechose de ce genre pendant le traitement d'une tâche assez longue (20 minutes) : "temps écoulé : __:__:__" avec évidemment le temps écoulé depuis le début qui s'affiche et progresse au fur et à mesure.
je pensais faire ça :  
- avoir une variable Debut qui enregistre l'heure de début de la tâche
- avoir un timer qui toutes les secondes affiche le résultat de (Now - Debut) dans le message "temps écoulé"
 
mais j'ai un peu de mal avec le timer, parce qu'il faudrait qu'il fonctionne en boucle pendant que cette tâche de 20 minutes s'effectue....est-ce possible ? ou s'il y a un autre moyen de faire ce que je souhaite, je prends aussi....
merci d'avance  :sarcastic:


Message édité par belsuncette le 08-06-2007 à 10:35:44
Reply

Marsh Posté le 07-06-2007 à 13:14:05   

Reply

Marsh Posté le 07-06-2007 à 13:38:55    

tu fais une deuxième macro que tu lances en même temps que ta tache,  
je sais pas si c'es tfaisable mais du genre macro evenementielle, s'il detecte l'appel de ta macro de calcul alors il lance la macro chrono.
 


Message édité par merenptah44 le 07-06-2007 à 13:48:58

---------------
Un pur groupe de musique à connaitre avant tout le monde :http://perso.numericable.fr/~bebrault/hollymess (site down pour le moment)
Reply

Marsh Posté le 07-06-2007 à 13:46:39    

Je connais les macros en excel, mais pas en VB ?  
Sinon pour l'instant je tente une solution un peu brute : j'ai une barre de progression dans la tâche, aussi, donc j'actualise le temps écoulé en même temps que j'incrémente la barre de progression ; je suis en train de voir si ça actualise assez souvent pour paraître se faire toutes les secondes....
Solution de secours, mais si y'a mieux, je prends toujours !
Merci merenptah

Reply

Marsh Posté le 07-06-2007 à 13:50:10    

à priori du devrais trouver ton bonheur ici (suaf que c'est du vba, alors je sais pas, je connais pas VB tout seul...):  
http://www.developpez.net/forums/s [...] hronometre
(désolé pour la pub extérieure)


Message édité par merenptah44 le 07-06-2007 à 13:50:34

---------------
Un pur groupe de musique à connaitre avant tout le monde :http://perso.numericable.fr/~bebrault/hollymess (site down pour le moment)
Reply

Marsh Posté le 07-06-2007 à 14:03:52    

je veins d'essayer le code sur le lien que j'ai filé, je suis pas sure que ça fais ce que tu voudrais car comme c'est dans un userform, on peut pas utiliser ce qui se passe derrière.
De plus, il affiche le temps que lorsqu'on clique sur arrivée (mais bonça c modifiable assez facileemnt, lecode est assez simple)
la recherche continue,  
essaye à mon avis de chercher un code horloge plutôt que chronomètre, ça doit se trouver
http://vlohr.free.fr/Forum_VeriTi/forum_1.php?msg=4078
 
désolé pour l'aide un peu pourrie que j'apporte, je ferai mieux de retourner bosser


Message édité par merenptah44 le 07-06-2007 à 14:08:09

---------------
Un pur groupe de musique à connaitre avant tout le monde :http://perso.numericable.fr/~bebrault/hollymess (site down pour le moment)
Reply

Marsh Posté le 07-06-2007 à 14:15:41    

Reply

Marsh Posté le 07-06-2007 à 15:34:07    

Bon...merci pour l'aide mais rien de concluant pour moi (à chaque fois dans les pages proposées j'ai du mal à déterminer si c'est adaptable à ma situation). En tout cas, merci.
J'ai cependant un problème avec ma "solution alternative" : normalement, j'actualise le temps en meme temps que j'incrémente ma progress bar. Si j'exécute le code en pas à pas, ça va, mais si je le lance en exécution normale, le texte n'apparaît pas, même avant toute boucle où j'affiche simplement "temps écoulé " sans valeur :(
Je me dis que ça va trop vite pour être actualisé, peut être ; ou que c'est le PC qui rame trop (déjà la progress bar plante souvent)....
Help ?

Reply

Marsh Posté le 07-06-2007 à 15:37:41    

Oui ça va trop vite pour être actualisé.
Du coup il faut faire un DoEvents dans ta boucle pour permettre le rafraichissement.
Et le DoEvents ralentit pas mal en général...

Reply

Marsh Posté le 07-06-2007 à 15:38:36    

Sans code pas facile de résoudre ton probleme : peut-être via MP ?
sinon un DoEvents à placer judicieusement ?

Reply

Marsh Posté le 07-06-2007 à 15:51:41    

La fonction est assez longue et je ne sais pas si c'est intéressant de tout mettre. Voilà le code qui peine à s'effectuer apparemment :
 
- temps_courant et temps_depart sont de type Date
- Text1 est une TextBox
- rs est la requete (liée à une base access) qui est effectuée, avec des petits traitements supplémentaires dans l'appli VB.
 
/'code
temps_courant = Now - temps_depart
    Text1.Text = "Temps écoulé : " & Format(temps_courant, "hh:mm:ss" )
    ProgressBarPA.Value = ProgressBarPA.Value + 1
    rs.movenext
code,/
 
Sachant que le max de ProgressBarPA est de l'ordre de 13 000...ça prend du temps et je fais ces opérations à chaque movenext.
Ce bout de code est présent à 3 endroits, car la fonction (que je trouve peu optimale mais je ne l'ai pas écrite ;) ) semble parcourir 3 fois le tableau résultat de la requete.
Dis moi si ces éléments te suffisent ?  
Et pour le DoEvents je ne sais pas si j'ai bien compris le principe mais je ne pense pas pouvoir le faire 13000 fois pour laisser le texte s'afficher..? J'imagine que ça ralentirait encore plus le traitement.

Reply

Marsh Posté le 07-06-2007 à 15:51:41   

Reply

Marsh Posté le 07-06-2007 à 15:57:37    

Un test avec un petit nombre de réponses à la requête fonctionne, ça doit donc venir de ça....mais je ne vois pas quoi faire, du coup.

Reply

Marsh Posté le 07-06-2007 à 16:42:38    

ne rafraichir via DoEvents que modulo 1000 par exemple ?

Reply

Marsh Posté le 07-06-2007 à 18:12:36    

Salut,
 
Je vais essayer de te répondre mais ça fait un bout de temps que je touche plus à vb.
 
Normalement, si tu pose un timer sur ta form en le réglant sur 1000, tu le lance en même temps que ta fonction, toutes les secondes, la proc de ton timer doit s'éxécuter.
il faut donc traiter le temps écoulé dans la procédure (timer_ontime ou un truc du genre)
 
en déclarant une variable globale qui conserve l'heure du début, et en récupérant l'heure actuelle, tu n'a plus qu'à faire un datediff pour trouver le temps écoulé.
 
n'oublie pas le doevents dans ta fonction pour pas bloquer le timer et de l'arrêter à la fin de ta fonction.

Reply

Marsh Posté le 07-06-2007 à 19:00:30    

J'essaierai ça - demain car je n'ai pas accès aux sources de chez moi.  
Je ne connais pas grand chose au DoEvents, et MSDN n'a pas été mon amie là-dessus, est-ce que vous pouvez précisez ce que je devrais faire avec la fonction ici ?

Reply

Marsh Posté le 07-06-2007 à 22:30:28    

A la ...


        .....
        ProgressBarPa.Value = ProgressBarPa.Value + 1
        If ProgressBarPa.Value Mod ???? = 0 Then
            Temps_Courant = Now - Temps_Depart
            Text1.Text = "Temps écoulé : " & Format(Temps_Courant, "hh:mm:ss" )
            DoEvents
        End If
        .....


???? à tester  


Message édité par kiki29 le 08-06-2007 à 05:00:56
Reply

Marsh Posté le 07-06-2007 à 22:35:25    

Merci beaucoup, je teste ça demain à l'aube (enfin quand j'embauche quoi :p) et je te dis ce que ça donne.  
Merci de m'aider tous les ans :D

Reply

Marsh Posté le 08-06-2007 à 09:00:04    

Ca marche :) je suis en train de chercher la limite minimum de fonctionnement pour que ça s'actualise le plus souvent possible.....
Merci :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed