Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1446 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] interuption de traitement dans une boucle ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] interuption de traitement dans une boucle ...

n°307536
Hepil
Posté le 12-02-2003 à 15:09:39  profilanswer
 

dans une boucle "Do until ..." par exemple,
 
je souhaite interrompre le traitent si j'appuis sur la touche espace ...
 
comment faire ?

mood
Publicité
Posté le 12-02-2003 à 15:09:39  profilanswer
 

n°307542
xgirouette
electron libre
Posté le 12-02-2003 à 15:13:59  profilanswer
 

en vb, ca m'arrive d'utiliser dans des boucles for :exit for
 
for i = 0 to XX
 
    if condition then
       exit for
    end if
 
next
 
je pense que ca doit exister avec le do until
 
edit : Exit Do  ca marche aussi


Message édité par xgirouette le 12-02-2003 à 15:14:49
n°307545
MagicBuzz
Posté le 12-02-2003 à 15:15:22  profilanswer
 

Déjà, vire ton until, beurk.
 
 

public test as boolean
 
sub tasub()
  [...]
  do while test
    [...]
    do events
  loop
  [...]
end sub
 
sub form_onkeypress(event truc muche machin chose)
  if keyscii = chais_pu_combien then
    test = false
  end if
end sud


Message édité par MagicBuzz le 12-02-2003 à 15:15:35
n°307564
cvb
Posté le 12-02-2003 à 15:23:11  profilanswer
 

En utilisant une API windows, qui détecte les touches. Pour le coup tu n'as pas le choix. Dés que cette API va détecter la valeur taper tu va affeter "1" à une variable que l'on va apeller "b". Donc b = 1 dés que la touche espace est tapé.
 
Ensuite tu incorpore dans la boucle, la variable b. Toutefois fais attention à ce que le traitement de ton API soit dans la boucle et pas allieur, sinon ca ne fonctionnera pas...c''est assez compliqué à faire..
 
tu trouveras sur ce liens l'API donc je te parle :  
http://docvb.free.fr/api.php

n°307568
cvb
Posté le 12-02-2003 à 15:26:05  profilanswer
 

Xgirouette a écrit :

en vb, ca m'arrive d'utiliser dans des boucles for :exit for
 
for i = 0 to XX
 
    if condition then
       exit for
    end if
 
next
 
je pense que ca doit exister avec le do until
 
edit : Exit Do  ca marche aussi
 


 
c'est pas le boucle for, next qu'il utilise mais
 

Code :
  1. do while
  2. loop


 
on ne peut pas en sortir comme en veux de ses choses là, c'est justement pour ca que son truc est assez compliqué et fais apels à des connaissances. Des connaisssances sur les API windows, et sur le traitement des clavier. Car pour sortir d'une chose pareil,il faut respecter la condition de départ. Il faudra donc qu'il incorpore cette détection dans la boucle...je lui souhate du bonheur, il a pas fini...

n°307573
Hepil
Posté le 12-02-2003 à 15:29:06  profilanswer
 

MagicBuzz a écrit :

Déjà, vire ton until, beurk.
 
 

public test as boolean
 
sub tasub()
  [...]
  do while test
    [...]
    do events
  loop
  [...]
end sub
 
sub form_onkeypress(event truc muche machin chose)
  if keyscii = chais_pu_combien then
    test = false
  end if
end sud




 
oui c'est cela que je veux
mais form_onkeypress() existe sous VBA d'access 97 ?

n°307575
cvb
Posté le 12-02-2003 à 15:29:38  profilanswer
 

Hepil a écrit :


 
oui c'est cela que je veux
mais form_onkeypress() existe sous VBA d'access 97 ?


 
oui !

n°307579
Hepil
Posté le 12-02-2003 à 15:30:18  profilanswer
 

Xgirouette a écrit :

en vb, ca m'arrive d'utiliser dans des boucles for :exit for
 
for i = 0 to XX
 
    if condition then
       exit for
    end if
 
next
 
je pense que ca doit exister avec le do until
 
edit : Exit Do  ca marche aussi
 


 
interrrompre (=PAUSE) ne veut pas dire arrêter (=STOP) le traitement :D

n°307581
Hepil
Posté le 12-02-2003 à 15:31:05  profilanswer
 


 
ok je vais tester cela
 
merci à tous

n°307615
Hepil
Posté le 12-02-2003 à 15:58:38  profilanswer
 

il y a un blême là
 
mon appli est lancée par un formulaire
 
ensuite le code est dans un module
ce code est un ensemble de boucle dont je veux interrompre le traitement de tps à autre
 
si je mets DoEvents dans la boucle dont je veux interrompre le traitement, il faut qu'une procédure prenne la main à ce moment là
celle-ci serait intitulée "MaForm_OnkeyPress()" ?
il faut logiquement placer cette procédure dans le code du formulaire et non dans le module !
d'où le problème !
En interrompant la boucle dans le module (Mod1), va t-on rentrer dans la procédure qui est dans le formulaire ?
 
 
 

mood
Publicité
Posté le 12-02-2003 à 15:58:38  profilanswer
 

n°307623
cvb
Posté le 12-02-2003 à 16:03:25  profilanswer
 

Hepil a écrit :

il y a un blême là
 
mon appli est lancée par un formulaire
 
ensuite le code est dans un module
ce code est un ensemble de boucle dont je veux interrompre le traitement de tps à autre
 
si je mets DoEvents dans la boucle dont je veux interrompre le traitement, il faut qu'une procédure prenne la main à ce moment là
celle-ci serait intitulée "MaForm_OnkeyPress()" ?
il faut logiquement placer cette procédure dans le code du formulaire et non dans le module !
d'où le problème !
En interrompant la boucle dans le module (Mod1), va t-on rentrer dans la procédure qui est dans le formulaire ?
 
 
 
 


 
Doevents  c'est pour laisser le temps au système, de terminer l'action qu'il à commencé, ce n'est en rien un arrêt ou une sorti de ta boucle.
 
Effectivement aprés doevents tu peux mettre  non pas une procédure mais une fonction. Cette fonction te renverra 0 ou 1, si la touche espace est utilisé. Dans ce cas, las tu arrêtes ton programme.

n°307630
MagicBuzz
Posté le 12-02-2003 à 16:12:44  profilanswer
 

Plus exactement, VB est mono-process et mono-thread.
 
Donc quand tu es dans une boucle seul le code s'éxécute, tu ne peux plus rien faire. La preuve, la fenêtre freeze.
 
doevents est une instruction qui met en pause quelques instants le programme afin de contrôler qu'aucun autre thread n'à de traîtement à faire, notamment la gestion des évènements.
 
Donc toujours mettre des doevents dans les longues boucles principalement, afin de pouvoir trapper les actions utilisateur.
 
Quand tu utilises Winsock dans un programme VB, tu passes ton temps à mettre des doevents partout afin de ne pas perdre de trames sur le réseau. C'est le mot clé magique.
 
Il est très peu consomateur en ressources, n'hésite donc pas à le mettre dans une boucle.

n°307634
MagicBuzz
Posté le 12-02-2003 à 16:14:44  profilanswer
 

cvb > non, faut vraiment utiliser les évènements VB. Ca avec ton système, si l'utilisateur ne fait que frapper la touche, et que "doevents" ne se déclenche pas à ce moment, jamais tu ne va rien détecter.
 
keypress permet de récupérer un évènement même plusieurs secondes après qu'il se soit produit (par contre, si l'utilisateur appuie sur une autre touche en attendant, on perd la touche anciennement appuyée, mais c'est déjà ça)

n°309105
Hepil
Posté le 14-02-2003 à 09:53:54  profilanswer
 

suite du blême :  
quand je sorts de la boucle, je peux me retrouver dans l'une ou l'autre des listeBox activées consécutivement dans mon application  
dois-je gérer "l'interruption" par une touche pour chacune des listeBox par le code_évenementiel s'y rapportant ou y a t-il une autre solution plus mieux ?
 
 
 
 
 
 
 
l'évènement OnKeyPress

n°309878
MagicBuzz
Posté le 14-02-2003 à 19:03:16  profilanswer
 

t'es obligé de faire en bouble.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] interuption de traitement dans une boucle ...

 

Sujets relatifs
[JS] Cocher une checkbox générée à partir d'une boucle PHP (réparé)[C] contrôle if dans une boucle ... ?
[VBA] Je veux un exemple de macro sur MS PROJECT[VBA] Créer un raccourci sur le bureau
VBA Excel : probleme avec Workbook_OpenDDE VBA et Lotus notes
comment on fait une boucle ?[VBA - Word] Insertion automatique du nom de fichier
(VBA et Access) Empecher l'affichage d'une fenetre d'importation[PHP] Image PNG generé en boucle, ca ne marche pas
Plus de sujets relatifs à : [VBA] interuption de traitement dans une boucle ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR