Arrêter l'exécution d'une fonction [VB] - VB/VBA/VBS - Programmation
Marsh Posté le 12-07-2006 à 11:01:31
ReplyMarsh Posté le 12-07-2006 à 11:04:25
zeOffspring a écrit : c'est à dire ? |
le .cancel ne s'appliquant pas finalement à ce dont je pensais, essaie avec un application.quit ^^
Marsh Posté le 12-07-2006 à 11:14:32
wé mais j'ai pas envie que ça ferme mon application en fait
cette feuille est une feuille enfant dans une MDI et je ne veux pas qu'en cliquant sur "Annuler" que ça ferme
quoi que ce soit, seulement que l'exéuction de la procédure stoppe...
Marsh Posté le 12-07-2006 à 11:14:58
Tant que l'action liée au boton "lancer" n'est pas terminée, l'événement sur le bouton "annuler" n'est pas pris en compte sauf si tu arrives à faire excécuter ton "lancer" en tache de fond.
Marsh Posté le 12-07-2006 à 11:26:09
Paul Hood a écrit : Tant que l'action liée au boton "lancer" n'est pas terminée, l'événement sur le bouton "annuler" n'est pas pris en compte sauf si tu arrives à faire excécuter ton "lancer" en tache de fond. |
wahou c'est la merde ça
y'a pas moyen de faire ce que je veux avec les évènements ? je connais pas trop ça
si quelqu'un peut m'en parler, u're welcome
Marsh Posté le 12-07-2006 à 12:57:42
Il y a la possiblité de mettre l'instruction DoEvents dans ton traitement (surtout si c'est une boucle), qui permet de gérer l'événement de clic sur le bouton Annuler (en principe).
Après il te suffit d'avoir un test If sur une variable booléenne dans ton traitement et de l'initialiser sur clic de Annuler. Ça c'est la théorie et ça ne marche pas toujours comme ça devrait.
Une autre possibilité bien plus complexe (hasardeuse ?) serait de gérer du multithreading en vb (1 thread pour le traitement, un autre pour l'événement annuler), mais je ne m'avancerais pas plus à ce sujet.
Marsh Posté le 12-07-2006 à 15:07:26
tegu a écrit : Il y a la possiblité de mettre l'instruction DoEvents dans ton traitement (surtout si c'est une boucle), qui permet de gérer l'événement de clic sur le bouton Annuler (en principe). |
ouais du multi thread j'y ai pensé mais pareil je n'y connais pas grand chose...
si quelqu'un veut nous en parler un peu plus ici ça pourrait le faire
sinon j'ai implémenté ce que tu as dit, ça donne ça et ça ne fonctionne pas. Ai-je oublié quelque chose ?
Merci
Citation : Dim annuler As Boolean |
Marsh Posté le 12-07-2006 à 15:11:28
zeOffspring a écrit : |
tu ne passeras jamais dans ta boucle si tu mets annuler à false dans ta sub... ca ne pourra pas fonctionner
Marsh Posté le 12-07-2006 à 15:16:08
Si ton traitement n'inclut pas de boucle, il ne fera le test du booléen qu'une fois. Alors le résultat est aléatoire suivant si tu annules tôt ou tard.
Cela dépend aussi de la lenteur du reste de ton traitement.
Il faut aussi envisager de mettre plusieurs DoEvents à des endroits stratégiques, suivant la nature de ton code.
En gros DoEvents rend la main au process de gestion des messages de l'OS. Et si dans sa pile de messages en attente il voit un événement du type clic sur un bouton, alors il le traite plutôt que de continuer de suite son traitement. Mais si aucun message n'est en attente, il revient à la suite du traitement en cours (après le DoEvents).
Marsh Posté le 12-07-2006 à 15:31:56
alors... j'ai enlevé le annuler = false de la sub et j'ai fait ça :
(déso pour la tonne de code)
Code :
|
Marsh Posté le 12-07-2006 à 15:35:58
ReplyMarsh Posté le 12-07-2006 à 15:38:25
jpcheck a écrit : est-ce que ca a au moins le mérite de tourner ?? |
of course dude
seulement l'annulation ne fonctionne pas
tu me prends pour qui ?
Marsh Posté le 12-07-2006 à 15:44:49
Déjà sur le principe il faudrait mettre le DoEvents avant le test If annuler...
Marsh Posté le 12-07-2006 à 15:50:19
tegu a écrit : Déjà sur le principe il faudrait mettre le DoEvents avant le test If annuler... |
en fait c ce que je demande depuis le début
c la première fois que je m'en sers
sinon ça va ?
Marsh Posté le 12-07-2006 à 16:04:49
http://frederic.sigonneau.free.fr/ [...] 7_2000.txt
Un site très interessant et notamment pour le timer.
Ca permet d'éxecuter un code toutes les xx secondes. Si ton bouton est appuyer par exemple.
Marsh Posté le 12-07-2006 à 16:47:49
Paul Hood a écrit : http://frederic.sigonneau.free.fr/ [...] 7_2000.txt |
hum hum et sinon ?
Marsh Posté le 13-07-2006 à 08:39:22
Bonjour à tous, notament à l'auteur de ce topic qui a l'air de galérer . J'ai un peu d'expérience en multithreading sous VB.NET si ça peu t'aider... Pose des questions j'y répondrai avec plaisir
Marsh Posté le 13-07-2006 à 15:12:11
les gens roots a écrit : Bonjour à tous, notament à l'auteur de ce topic qui a l'air de galérer . J'ai un peu d'expérience en multithreading sous VB.NET si ça peu t'aider... Pose des questions j'y répondrai avec plaisir |
salut
et en VB tout court ?
En fait je sais meme pas comment implémenter ça, je n'y connais vraiment rien
Marsh Posté le 13-07-2006 à 15:56:12
J'avoue que je ne sais même pas déclarer un Thread en VB ^^. J'ai juste vu quelques bouts de code sur ce langage qui n'utilisaient pas de system de Thread. Donc j'ai bien peur de ne pas pouvoir t'aider en VB
=(. Désolé
Marsh Posté le 12-07-2006 à 10:50:19
Salut
J'ai une feuille avec un bouton "Lancer" et une bouton "Annuler"
Le bouton "Lancer" effectue de nombreuses choses : ouvre Word, fait du traitement dedans, écrit sur le disque, envoie des mails, des fax et des SMS...
Suivant les paramètres, cette exécution peut être longue, très longue.
L'utilisateur peut aussi se rendre compte d'une erreur et peut vouloir stopper l'exécution de la procédure.
Le bouton "Annuler" sert à ça mais je ne sais pas quoi mettre dedans....
Comment stopper l'exécution d'une fonction à partir d'une autre ?
Je suis clair au moins ??
Merci d'avance les gars