Arrêter temporairement une routine VBA

Le
Fredo P.
Bonjour,
Il y a t'il un autre moyen d'arrêter une routine temporairement quand la
solution touche ESC ne fonctionne pas avec XL2007 et W8.1?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JièL
Le #26455958
Le 16/12/2017 à 09:09, Fredo P. a écrit :
Bonjour,
Il y a t'il un autre moyen d'arrêter une routine temporairement quand la
solution touche ESC ne fonctionne pas avec XL2007 et W8.1?

Ctrl+Pause
Mais quand ça part en vrille dans une boucle infinie trop rapide y'a pas
grand chose qui fonctionne.
--
JièL Peau zé
Fredo P.
Le #26455960
Merci jiel,
je viens de penser à une autre solution, est ce qu'il est possible
d'enregistrer le classeur pendant qu'il travaille en dehors de l'interface
Excel?
"JièL" a écrit dans le message de groupe de discussion :
5a34e2c3$0$3318$
Le 16/12/2017 à 09:09, Fredo P. a écrit :
Bonjour,
Il y a t'il un autre moyen d'arrêter une routine temporairement quand la
solution touche ESC ne fonctionne pas avec XL2007 et W8.1?

Ctrl+Pause
Mais quand ça part en vrille dans une boucle infinie trop rapide y'a pas
grand chose qui fonctionne.
--
JièL Peau zé
JièL
Le #26455963
Le 16/12/2017 à 10:31, Fredo P. a écrit :
Merci jiel,
je viens de penser à une autre solution, est ce qu'il est possible
d'enregistrer le classeur pendant qu'il travaille en dehors de
l'interface Excel?

Pas à ma connaissance...
Si Excel utilise le classeur il le "bloque", ce qui me parait logique vu
que si il ne le faisait pas ça permettrait des modifications et qui
gagnerait quand Excel enregistrerait ?
--
JièL
Michd
Le #26455979
Bonjour,
Tu n'es pas très précis. Qu'est-ce que tu veux faire? Arrêter une macro 2
minutes et qu'elle reprenne automatiquement son déroulement à partir d'où
elle s'est arrêtée? Sortir d'une boucle sans fin? Ou autre?
Voici un exemple pour arrêter quand on le veut une procédure en appuyant
seulement une fois sur la touche ESC.
Cette procédure est une boucle sans fin. Tu peux l'arrêter en appuyant par
la touche ESC.
La gestion d'erreur n'est pas obligatoire et cela va fonction sans problème!
L'essentiel c'est cette ligne de code en début de procédure :
Application.EnableCancelKey = xlDisabled 'ou xlInterrupt, xlErrorHandler
Selon la valeur que l'on attribue à Application.EnableCancelKey on peut ou
non sortir d'une procédure quand on le décide :
xlDisabled -> Rend impossible l'arrêt d'une macro
xlInterrupt -> Arrêt de la macro par la touche ESC
xlErrorHandler -> Lors de l'appui sur la touche ESC, la procédure va à la
GestionErreur.
La ligne Resume next si besoin permet après l'affichage du message dans la
section "GestionErreur:" de reprendre l'exécution de la macro à la ligne
suivante, celle qui a provoqué l'arrêt.
'--------------------------------------------------------
Sub test()
Dim GestionErreur As String
On Error GoTo GestionErreur
Application.EnableCancelKey = xlErrorHandler
Do While fichier = ""
Loop
Exit Sub
GestionErreur:
MsgBox Err.Number & ", " & Err.Description
Resume Nest
End Sub
'--------------------------------------------------------
Si tu veux sortir d'une boucle sans fin, tu inscris cette ligne de code dans
la boucle :
Doevents
Si tu désires arrêter une macro à un endroit précis pour un temps déterminé
précis, il y a ceci :
Pendant l'exécution de la boucle, tu peux enregistrer le fichier où ce que
tu veux durant le délai que tu as fixé au début de la boucle.
'------------------------------------------
Sub Test1()
Dim T As Double
Dim Delai As Long
Delai = 3 'secondes
T = Timer + Delai
Do While T > Timer
DoEvents
Loop
End Sub
'------------------------------------------
MichD
Fredo P.
Le #26456479
Bonjour à tous,
Excusez le retard, plus on approche les fêtes plus on est à la ramasse.
Il arrive fréquemment que mon processeur y soit aussi à la ramasse, une
routine qui n'en fini pas, que la touche ESC ne produit aucune réaction,
qu'il n'y a plus qu'une seule solution pour en sortir sans conserver le
travail effectué: CTRl+Alt+Suppr.
Merci pour ces conseils, je mettre en pratique un Application.xlInterrupt
ou xlErrorHandler et te rendrai compte au prochain pb équivalent.
"Michd" a écrit dans le message de groupe de discussion :
p1329v$1ejj$
Bonjour,
Tu n'es pas très précis. Qu'est-ce que tu veux faire? Arrêter une macro 2
minutes et qu'elle reprenne automatiquement son déroulement à partir d'où
elle s'est arrêtée? Sortir d'une boucle sans fin? Ou autre?
Voici un exemple pour arrêter quand on le veut une procédure en appuyant
seulement une fois sur la touche ESC.
Cette procédure est une boucle sans fin. Tu peux l'arrêter en appuyant par
la touche ESC.
La gestion d'erreur n'est pas obligatoire et cela va fonction sans problème!
L'essentiel c'est cette ligne de code en début de procédure :
Application.EnableCancelKey = xlDisabled 'ou xlInterrupt, xlErrorHandler
Selon la valeur que l'on attribue à Application.EnableCancelKey on peut ou
non sortir d'une procédure quand on le décide :
xlDisabled -> Rend impossible l'arrêt d'une macro
xlInterrupt -> Arrêt de la macro par la touche ESC
xlErrorHandler -> Lors de l'appui sur la touche ESC, la procédure va à la
GestionErreur.
La ligne Resume next si besoin permet après l'affichage du message dans la
section "GestionErreur:" de reprendre l'exécution de la macro à la ligne
suivante, celle qui a provoqué l'arrêt.
'--------------------------------------------------------
Sub test()
Dim GestionErreur As String
On Error GoTo GestionErreur
Application.EnableCancelKey = xlErrorHandler
Do While fichier = ""
Loop
Exit Sub
GestionErreur:
MsgBox Err.Number & ", " & Err.Description
Resume Nest
End Sub
'--------------------------------------------------------
Si tu veux sortir d'une boucle sans fin, tu inscris cette ligne de code dans
la boucle :
Doevents
Si tu désires arrêter une macro à un endroit précis pour un temps déterminé
précis, il y a ceci :
Pendant l'exécution de la boucle, tu peux enregistrer le fichier où ce que
tu veux durant le délai que tu as fixé au début de la boucle.
'------------------------------------------
Sub Test1()
Dim T As Double
Dim Delai As Long
Delai = 3 'secondes
T = Timer + Delai
Do While T > Timer
DoEvents
Loop
End Sub
'------------------------------------------
MichD
Publicité
Poster une réponse
Anonyme