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"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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
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!
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