XL 2016 Interception d'une erreur intervenue dans un module lancé depuis un autre classeur qui contient le gestionnaire d'erreurs

steplof

XLDnaute Nouveau
Bonjour,

J'ai une routine d'erreur dans la macro test2 d'un module d'un classeur A.
Sub test2()
10 On erreur GoTo tterreur:
20 Run "ClasseurBl.xlsm!Test3"
30 Exit Sub
tterreur:
40 MsgBox "tterreur: Ligne:" & Erl & " Erreur:" & Err.Number
End Sub

Je teste avec ce code dans classeur B
Sub test3()

100 MsgBox "test3"
110 Range("ZZZZ1").Select
120 Range("A1).Clearcontents
End Sub

Le programme s'interrompt ligne 120 (c'est l'objet du test) mais sans aller jusqu'au gestionnaire d'erreur, j'ai l'affichage de la fenêtre de débogage.

Je ne veux pas que la ligne 120 s'exécute ce qui exclut a priori le On error resume next dans le sub test3,

je voudrais que si une erreur intervient je puisse la traiter avec le gestionnaire d'erreur du classeur A. est ce possible? Si oui comment? je sèche.
Suis-je obligé de reproduire mon gestionnaire d'erreur dans le classeur B?

Merci de vos pistes

Steplof
EXCEL 2016 pour Windows
 

Gégé-45550

XLDnaute Accro
Bonjour, la ligne 120
VB:
120 Range("A1).Clearcontents
contient une erreur de syntaxe (il manque des guillemets entre "1" et ")"), il est donc normal qu'Excel revienne vers l'éditeur.
Ensuite, une fois cette erreur de syntaxe corrigée, il n'y a aucune raison pour que le fichier B renvoie vers le gestionnaire d'erreur de test2 (qui teste les erreurs survenues dans la Sub test2, laquelle est fermée après l'ouverture du classeur B), sauf à l'appeler dans test3.
Cordialement,
 
Dernière édition:

steplof

XLDnaute Nouveau
Bonjour, merci de vous être intéressé à mon problème.
Toutefois, le problème n'est pas d'ordre syntaxique, l'erreur que vous m'indiquez n'aurait pas passé le stade de la compilation, mais d'ordre informatique.
Mon problème que vous évoquez brièvement dans votre réponse est justement
"Est-il possible et comment de renvoyer une erreur rencontrée dans test 3 vers le gestionnaire d'erreur de test2 qui n'est situé ni dans le même module ni dans le même classeur que test3?"
L'erreur volontaire de test3 qui passe le compilateur mais provoque une erreur d'exécution est Range ("ZZZZ1").select car cette colonne n'existe pas dans ma version d'Excel.

Pour l'instant je n'ai pas trouvé mieux qu'un 2e gestionnaire d'erreurs dans test 3

Stéplof
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Le plus simple c'est d'écrire la procédure sous forme de Function, renvoyant l'Err
Généralement on renvoie plutôt un Boolean à True si l'exécution s'est bien passée.
J'ai tendance à ajouter OK derrière le nom de la procédure tel qu'il serait s'il elle était restée sous forme de Sub.
Comme ça on peut écrire If Run("ClasseurBl.xlsm!Test3OK") Then
 
Dernière édition:

steplof

XLDnaute Nouveau
Merci à tous et particulièrement à Dranreb pour les pistes évoquées,
Je pense comprendre l'idée même si je suis proche de mes limites du moment, n'étant pas à l'aise avec l'utilisation des fonctions . La piste proposée m'aide à en comprendre l'utilité, je verrai de me familiariser avec sa mise en œuvre pour des projets futurs.

Steplof
 

Discussions similaires

Réponses
13
Affichages
1 K

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 679
dernier inscrit
Yupanki