OVH Cloud OVH Cloud

Arret calcul en cours 03

1 réponse
Avatar
Alfred
Bonjour,

Je vous remercie pour toutes ces réponses.

En fait, je lance le calcul par l'intermédiaire d'un bouton (qui lance un
procédure) sur une UserForm.
Le problème est que je n'arrive plus à avoir la main après le lancement du
calcul...
Comment faut-il faire pour reprendre la main ?
Quelle est celle de vos méthodes qui convient le mieux ?

---------------------------------
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche (par
ex ESC)

Merci pour votre aide
Al

1 réponse

Avatar
Pascal Engelmajer
Salut,
on ne sait toujours rien sur l'essentiel : dans quel contrôle de structure
est le calcul ?
do...loop, while...wend, for...next ?
dans un userform les trois méthodes sont possibles
1= méthode Micheldenis============================= un bouton (btnStop) "Cesser le calcul" dans l'userform qui commute un
drapeau (flFin) déclaré public dans un module.
standard
Pour stopper le calcul il faut cliquer sur le bouton...
Option Explicit
Public flFin as Boolean

dans le module de code de l'userform
Private Sub btnStop_Click()
flFin=True
End Sub

dans la procédure de calcul (où quelle soit)
Sub boucle1()
'début du calcul
For i = 1 To 1000 'simule un calcul infini
DoEvents 'indispensable
If flFin Then 'teste l'état du drapeau flFin
flFin úlse 'réinitialise flFin
MsgBox "Fin provoquée par l'utilisateur", vbCritical,
"Calcul"
Exit Sub 'teste l'état du drapeau flFin
end if
On Error GoTo fin
i = 100
Next i
'fin du calcul
End sub
'2 === avec appel à GetKeyState Lib "user32" ======================== Pour stopper le calcul il faut maintenir la touche ESC
dans un module standard
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long)
As Integer
Const VK_ESCAPE = 27 'echap.

dans la procédure de calcul (où quelle soit)
Sub boucle2()
Application.EnableCancelKey = xlDisabled ' empêche le passage en mode
debug
'début du calcul
For i = 1 To 1000 'simule un calcul infini
i = 100
DoEvents
If GetKeyState(VK_ESCAPE) = -127 Then
MsgBox "Fin provoquée par l'utilisateur", vbCritical, "Calcul"
Application.EnableCancelKey = xlInterrupt 'réinitialise le mode
debug
Exit Sub
End If
Next i

'fin du calcul
Application.EnableCancelKey = xlInterrupt 'réinitialise le mode debug
End Sub

3 === en utilisant Application.EnableCancelKey = xlErrorHandler
============= Pour stopper le calcul il faut combiner CTRL + BREAK.
Sub boucle3()
'début du calcul
Application.EnableCancelKey = xlErrorHandler 'passe en mode récupération
de l'erreur
For i = 1 To 1000 'simule un calcul infini
DoEvents
On Error GoTo fin
i = 100
Next i
On Error GoTo 0
Application.EnableCancelKey = xlInterrupt 'réinitialise le mode debug
'fin du calcul
Exit Sub
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
sous réserve d'autres moyens...
--
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
"Alfred" a écrit dans le message de news:

Bonjour,

Je vous remercie pour toutes ces réponses.

En fait, je lance le calcul par l'intermédiaire d'un bouton (qui lance un
procédure) sur une UserForm.
Le problème est que je n'arrive plus à avoir la main après le lancement du
calcul...
Comment faut-il faire pour reprendre la main ?
Quelle est celle de vos méthodes qui convient le mieux ?

---------------------------------
Il s'agit d'arrêter un long calcul itératif en appuyant sur une touche
(par

ex ESC)

Merci pour votre aide
Al