Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interruption Macro

2 réponses
Avatar
Alf
Bonjour =C3=A0 tous,
Excel 2007

Je voudrais interrompre l=E2=80=99ex=C3=A9cution d'une macro par "Esc".
J'utilise le code suivant:
'--------------------------------
On Error GoTo Fin
Application.EnableCancelKey =3D xlErrorHandler

'code

Fin:
If Err.Number =3D 18 Then
MsgBox "Fin", vbCritical, "Calcul"
Else
MsgBox "Erreur " & Err.Description, vbCritical, "Calcul"
End If
'----------------------------------------

=C3=87a marche bien quand je suis dans mon classeur initial.
Quand mon code ouvre et ex=C3=A9cute des macros dans d'autres classeurs, en=
tapant sur "Esc", le calcul s'arr=C3=AAte mais il s=E2=80=99arr=C3=AAte en=
mode Debug. Je me retrouve dans le code de la macro du classeur qui s=E2=
=80=99ex=C3=A9cute...

Comment s=E2=80=99arr=C3=AAter proprement ?
Avec un message, par exemple "Fin"

Merci pour votre aide
Alf

2 réponses

Avatar
Michd
Bonjour,
Cette gestion d'erreur s'applique à une procédure seulement.
Si cette procédure appelle une autre procédure dans un autre classeur, cette
procédure aussi doit avoir une gestion d'erreur dans le même genre que
celle-ci avec la commande "Exit sub" dans la section "Fin" de la gestion
d'erreur de cette autre procédure. Par conséquent, la procédure appelée
s'arrêtera et la procédure du fichier source se poursuivra à la ligne
suivante.
Je te donne un exemple, c'est plus explicite. Tu peux mettre ce code dans le
même module pour observer le déroulement de l'action.
'------------------------------------------------------------
Sub test()
Dim GestionErreur As String
Dim Erreur As Boolean
On Error GoTo GestionErreur
'le code à exécuter
'Appel de la procédure
Call Procédure_Appelée(Erreur)
'que veux-tu qui se passe, si l'autre
'procédure à été arrêté volontairement
If Erreur = True Then Exit Sub
'le reste du code
GestionErreur:
'ta gestion d'erreur
End Sub
'------------------------------------------------------------
Sub Procédure_Appelée(Erreur As Boolean)
Dim GestionErreur As String
On Error GoTo GestionErreur
'Erreur volontaire
Range("A1").Interior.Color = "toto"
GestionErreur:
'ta gestion d'erreur
Erreur = True
Exit Sub
End Sub
'------------------------------------------------------------
MichD
Avatar
Michd
Bonjour,
Tu as ces 2 lignes de code :
Celle-ci pour gérer l'erreur lorsque tu appuies sur ESC
Application.EnableCancelKey = xlErrorHandler
Celle-ci pour empêcher l'usager d'intervenir dans le déroulement de la
procédure en cliquant sur ESC.
Avant d'ouvrir un fichier par VBA, utilise cette ligne de code
Application.EnableCancelKey = xlDisabled
et après l'ouverture remet Application.EnableCancelKey = xlErrorHandler
Je n'ai pas testé, mais je ne vois pas beaucoup d'autres alternatives!
MichD