Arrêt d'une procédure par un bouton

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

Bonjour,

En mettant ton bouton dans une boite de dialogue non modale peut-être.

A voir si ça te va.

eric

373classeur3.zip (9.08 Ko)

Bonjour

Une autre façon

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!

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

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?

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

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 !

Merci pour tout, je n'aurais pas réussi sans votre aide à toi et Banzai64.

Bonne journée!

Rechercher des sujets similaires à "arret procedure bouton"