Arrêt d'une procédure par un bouton Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
j
jujel
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 11 avril 2013
Version d'Excel : 2010

Message par jujel » 4 juillet 2013, 16:17

Bonjour le forum,

je me posais une question un peu bête sans doute, mais je souhaiterais pouvoir arrêter une procédure par un clic sur un bouton qui est affecté lui-même à une macro.

Je m'explique: imaginons qu'on ait le code suivant:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub Bidon()

While ArreterlaCapturedéfinitivement() = False
Call Sleep(10000)
Cells(1,1)="A"
Wend

End Sub
Cette procédure ne marche pas car ArreterlaCapturedéfinitivement n'est pas une fonction ou variable. C'est la sub que je souhaiterais affecter à un bouton et qui m'arrêterais du coup ma boucle while qui est infinie sinon.

Sauriez vous donc me dire ou m'aider comment faire pour Arrêter une Sub grâce à l'appui sur un bouton affecté à ma macro ArreterlaCapturedéfinitivement?

Merci d'avance et bonne soirée à vous tous.
Jujel
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'152
Appréciations reçues : 351
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 4 juillet 2013, 17:23

Bonjour,

En mettant ton bouton dans une boite de dialogue non modale peut-être.
A voir si ça te va.

eric
Classeur3.xls
(29 Kio) Téléchargé 283 fois
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'726
Appréciations reçues : 4
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 4 juillet 2013, 18:01

Bonjour

Une autre façon
jujel Arreter macro V001.xlsm
(17.07 Kio) Téléchargé 435 fois
Image
j
jujel
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 11 avril 2013
Version d'Excel : 2010

Message par jujel » 5 juillet 2013, 08:16

Merci à vous deux pour vos solutions, les deux me vont et je pourrais les adapter assez aisément. Je vous remercie beaucoup!
Le seul problème que je rencontre se situe au niveau de l'attente dans ma macro: si je met 10 secondes par exemple, excel se met à ramer et je ne peux pas appuyer sur le bouton pour stopper la macro ou alors cela réagit 3 plombes plus tard.

Est-ce caractéristique des timer (attente)? ou tout simplement de mon pc? Y a t il une meilleure solution? J'ai également essayé avec Apllication.Wait et cela me donne le même résultat que l'appel de Sleep.

En tout cas merci encore pour les deux solutions Banzai64 et Eriiic!
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'152
Appréciations reçues : 351
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 5 juillet 2013, 09:48

Bonjour,

Regarde plutôt du coté de OnTime.
L'échéance doit mettre ta variable à true
Le bouton doit en plus faire OnTime avec Schedule:=False pour l'annuler
Tu as un exemple complet dans l'aide de OnTime.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
j
jujel
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 11 avril 2013
Version d'Excel : 2010

Message par jujel » 5 juillet 2013, 11:13

Merci Eriiic, ca a l'air d'être une bonne solution pour se diriger. Par contre si je fais cela par exemple:
Sub Hyperterminal()

continue = True
UserForm1.Show vbModeless
While continue
UserForm1.Label1 = "Les tests tournent"
Application.OnTime Now + TimeValue("00:03:00"), "CoupeCompareEtRelanceLaCapture"
DoEvents
Wend
UserForm1.Hide
MsgBox "C'est fini"

End Sub
Comme tu l'as fait avec le userform. Je constate que la sub CoupeCompareEtRelanceLaCapture s'exécute sans arrêt une fois les premières 3 minutes passées. Il n'y a pas les 3 minutes qui s'écoulent en fait entre chaque appel à cette sub. Est-ce normal?
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'152
Appréciations reçues : 351
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 5 juillet 2013, 12:10

bonjour,

Il ne faut pas mettre pas mettre ton ontime dans la boucle, tu le relances tout le temps.
Tu le lances 1 fois, ton programme tourne, et c'est soit l'échéance du ontime, soit le bouton qui te font sortir de la boucle.
Pour le relancer ça doit être une autre action (ou un autre ontime avec sa procédure) qui appelle Hyperterminal()

Et tu dois mettre Now + TimeValue("00:03:00") dans une variable date. Tu dois lui passer l'heure d'arrêt prévue en paramètre lorsque tu annules le ontime avec Schedule:=False. J'ai l'impression que tu as zappé cette partie, c'est à faire sinon il va se déclencher de façon intempestive alors que tu as relancé pour une nouvelle tempo.

eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
j
jujel
Jeune membre
Jeune membre
Messages : 38
Inscrit le : 11 avril 2013
Version d'Excel : 2010

Message par jujel » 5 juillet 2013, 13:32

Effectivement, j'avais pas compris que le Now était le moment du lancement de la procédure, du coup difficile d'y toucher. J'ai réussi à regler mon problème c'est bon. Merci pour tes conseils avisés Eriiic, c'est super :D !

Merci pour tout, je n'aurais pas réussi sans votre aide à toi et Banzai64.
Bonne journée!
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message