OVH Cloud OVH Cloud

Arret calcul en cours 02

5 réponses
Avatar
Alfred
Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche (par
ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous moments
en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al

5 réponses

Avatar
Pascal Engelmajer
Salut,
ce calcul contient-il une boucle (do... loop, for...next) ?

--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"Alfred" a écrit dans le message de news:

Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche
(par

ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous
moments

en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al




Avatar
michdenis
Bonjour Alfred,

Voici le principe :

à divers endroit de ta macro où le temps de calcul peut être très long, comme dans une boucle, tu insères cette ligne de
commande : "DoEvents"
suivi d'une ligne qui teste la valeur arret ...

Voici un exemple que tu peux coller dans un module standard que tu attaches à 2 boutons de commande de la barre d'outils
"Formulaire"

'Dans le haut du module, déclaration d'une variable
Dim Arret As Boolean

'----------------------
Sub ArrêterMacro()
Arret = True
End Sub
'----------------------

Sub MaBoucle()
Arret = False
For a = 1 To 100000000
DoEvents
If Arret = True Then Exit For
b = a 'ce n'est qu'un exemple...
Next
MsgBox "fini"

End Sub
'----------------------


Salutations!





"Alfred" a écrit dans le message de news:
Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche (par
ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous moments
en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al
Avatar
Pascal Engelmajer
Salut,
chez moi la touche escape arrête la procédure si elle à une boucle...
Sub boucle()
i = 1
For i = 1 To 1000
i = 100
Next i
End Sub
cette boucle est stoppée par ESC

D'autre part rien ne dit que ce calcul est lancé d'un userform...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:

Bonjour Alfred,

Voici le principe :

à divers endroit de ta macro où le temps de calcul peut être très long,
comme dans une boucle, tu insères cette ligne de

commande : "DoEvents"
suivi d'une ligne qui teste la valeur arret ...

Voici un exemple que tu peux coller dans un module standard que tu
attaches à 2 boutons de commande de la barre d'outils

"Formulaire"

'Dans le haut du module, déclaration d'une variable
Dim Arret As Boolean

'----------------------
Sub ArrêterMacro()
Arret = True
End Sub
'----------------------

Sub MaBoucle()
Arret = False
For a = 1 To 100000000
DoEvents
If Arret = True Then Exit For
b = a 'ce n'est qu'un exemple...
Next
MsgBox "fini"

End Sub
'----------------------


Salutations!





"Alfred" a écrit dans le message de
news:

Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche
(par

ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous
moments

en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al





Avatar
michdenis
Bonjour Pascal,

En supposant que cette propriété n'est pas défini de cette façon au départ de la macro, je suis d'accord avec toi, et ne
prétend pas le contraire.

Application.EnableCancelKey = xlInterrupt

Même si ESC peut arrêter une macro, tu conviendras qu'il y a des façons plus élégantes de terminer une procédure par une
boîte de dialogue vous demandant de "Debugger" la procédure !!!

" D'autre part rien ne dit que ce calcul est lancé d'un userform"

Des boutons de commandes peuvent être placé dans une feuille, ou dans une barre d'outils de l'application. Lorsque l'on
veut contrôler un environnement, il est préférable de se donner les outils pour le faire sinon c'est l'application qui
va prendre la relève.


Salutations!


"Pascal Engelmajer" a écrit dans le message de
news:O97Vc%
Salut,
chez moi la touche escape arrête la procédure si elle à une boucle...
Sub boucle()
i = 1
For i = 1 To 1000
i = 100
Next i
End Sub
cette boucle est stoppée par ESC

D'autre part rien ne dit que ce calcul est lancé d'un userform...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:

Bonjour Alfred,

Voici le principe :

à divers endroit de ta macro où le temps de calcul peut être très long,
comme dans une boucle, tu insères cette ligne de

commande : "DoEvents"
suivi d'une ligne qui teste la valeur arret ...

Voici un exemple que tu peux coller dans un module standard que tu
attaches à 2 boutons de commande de la barre d'outils

"Formulaire"

'Dans le haut du module, déclaration d'une variable
Dim Arret As Boolean

'----------------------
Sub ArrêterMacro()
Arret = True
End Sub
'----------------------

Sub MaBoucle()
Arret = False
For a = 1 To 100000000
DoEvents
If Arret = True Then Exit For
b = a 'ce n'est qu'un exemple...
Next
MsgBox "fini"

End Sub
'----------------------


Salutations!





"Alfred" a écrit dans le message de
news:

Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche
(par

ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous
moments

en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al





Avatar
Pascal Engelmajer
Salut Michdenis,
je sui entièrement de ton avis,
pour faire compliqué et pompeux :

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)
As Integer
Const VK_ESCAPE = 27 'echap.
Sub boucle()
Application.EnableCancelKey = xlDisabled
i = 1
For i = 1 To 1000
i = 100
If GetKeyState(VK_ESCAPE) = -127 Then
MsgBox "Fin provoquée par l'utilisateur", vbCritical, "Calcul"
Application.EnableCancelKey = xlInterrupt
Exit Sub
End If
Next i
Application.EnableCancelKey = xlInterrupt
End Sub

pour faire simple

Sub boucle2()
Application.EnableCancelKey = xlErrorHandler
i = 1
For i = 1 To 1000
On Error GoTo fin
i = 100
Next i
On Error GoTo 0
Application.EnableCancelKey = xlInterrupt
fin:
If Err.Number = 18 Then
MsgBox "Fin provoquée par l'utilisateur", vbCritical, "Calcul"
Else
MsgBox "Erreur " & Err.Description, vbCritical, "Calcul"
End If
Application.EnableCancelKey = xlInterrupt
End Sub


--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
http://www.ilyapa.net/baseExcel
"michdenis" a écrit dans le message de news:

Bonjour Pascal,

En supposant que cette propriété n'est pas défini de cette façon au départ
de la macro, je suis d'accord avec toi, et ne

prétend pas le contraire.

Application.EnableCancelKey = xlInterrupt

Même si ESC peut arrêter une macro, tu conviendras qu'il y a des façons
plus élégantes de terminer une procédure par une

boîte de dialogue vous demandant de "Debugger" la procédure !!!

" D'autre part rien ne dit que ce calcul est lancé d'un userform"

Des boutons de commandes peuvent être placé dans une feuille, ou dans une
barre d'outils de l'application. Lorsque l'on

veut contrôler un environnement, il est préférable de se donner les outils
pour le faire sinon c'est l'application qui

va prendre la relève.


Salutations!


"Pascal Engelmajer" a écrit dans le
message de

news:O97Vc%
Salut,
chez moi la touche escape arrête la procédure si elle à une boucle...
Sub boucle()
i = 1
For i = 1 To 1000
i = 100
Next i
End Sub
cette boucle est stoppée par ESC

D'autre part rien ne dit que ce calcul est lancé d'un userform...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:

Bonjour Alfred,

Voici le principe :

à divers endroit de ta macro où le temps de calcul peut être très long,
comme dans une boucle, tu insères cette ligne de

commande : "DoEvents"
suivi d'une ligne qui teste la valeur arret ...

Voici un exemple que tu peux coller dans un module standard que tu
attaches à 2 boutons de commande de la barre d'outils

"Formulaire"

'Dans le haut du module, déclaration d'une variable
Dim Arret As Boolean

'----------------------
Sub ArrêterMacro()
Arret = True
End Sub
'----------------------

Sub MaBoucle()
Arret = False
For a = 1 To 100000000
DoEvents
If Arret = True Then Exit For
b = a 'ce n'est qu'un exemple...
Next
MsgBox "fini"

End Sub
'----------------------


Salutations!





"Alfred" a écrit dans le message de
news:

Bonjour,

Merci à Philippe R pour sa réponse mais çà ne marche pas.....
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche
(par

ex ESC)

-------------------------
J'ai lancé un calcul dans une macro et je voudrais l'arrêter à tous
moments

en pressant la touche ESC.
Pouvez-vous m'aider ?

Merci à tous
Al