OVH Cloud OVH Cloud

Erreurs sous VBA Excel

6 réponses
Avatar
Kamel
Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel que
soit appelée une procédure spécifiée au cas où surviendrait une erreur.
Quelque chose du type On Error Goto ... mais qui soit global à toute
l'application pour ne pas réecrire la syntaxe dans chacune des procédures
....

Merci
Kamel

6 réponses

Avatar
LSteph
Bonsoir Kamel,

c'est selon ce à quoi l'on renvoie
essaie ceci testerreur:

'*******
Sub testerreur()
On Error GoTo this
provoquerreur
Exit Sub
this:
encasderreur
End Sub
'***
Sub provoquerreur()
it.Open
End Sub
'***
Sub encasderreur()
MsgBox "routine erreur"
End Sub
'******

'lSteph


"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel
que soit appelée une procédure spécifiée au cas où surviendrait une
erreur. Quelque chose du type On Error Goto ... mais qui soit global à
toute l'application pour ne pas réecrire la syntaxe dans chacune des
procédures ....

Merci
Kamel



Avatar
LSteph
...après appeler la même sub est possible
tout dépend de la portée
avec call ou
application.run
et le cas échéant le nom de projet + de la macro
application.run "perso.xls!routinerreur"

Mais dans un projet les différents cas à prévoir nécessitent
la plupart du temps leur propre gestion d'erreur bien spécifique.

a+

lSteph

"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel
que soit appelée une procédure spécifiée au cas où surviendrait une
erreur. Quelque chose du type On Error Goto ... mais qui soit global à
toute l'application pour ne pas réecrire la syntaxe dans chacune des
procédures ....

Merci
Kamel



Avatar
Kamel
Merci Steph,

En fait pour expliciter un peu plus mon soucis:
J'ai développé une dll com en C++ et j'utilise ces objets dans mon code VBA.
Ce que je veux c'est "catcher" les erreurs éventuelles dans le code C++ et
les afficher par une messagebox dans le VBA. Pour le moment dans chaque
procédure je mets un "On Error Goto ..." et j'instancie un objet ComError
qui contient la description de l'erreur ... Dans ce cas la procédure qui
gère l'erreur est simple car elle ne fait qu'afficher la description dans
mon objet ComError.

J'aimerais savoir s'il n'y a pas une solution plus simple ...

Kamel

"LSteph" a écrit dans le message de news:
uzD5$
...après appeler la même sub est possible
tout dépend de la portée
avec call ou
application.run
et le cas échéant le nom de projet + de la macro
application.run "perso.xls!routinerreur"

Mais dans un projet les différents cas à prévoir nécessitent
la plupart du temps leur propre gestion d'erreur bien spécifique.

a+

lSteph

"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel
que soit appelée une procédure spécifiée au cas où surviendrait une
erreur. Quelque chose du type On Error Goto ... mais qui soit global à
toute l'application pour ne pas réecrire la syntaxe dans chacune des
procédures ....

Merci
Kamel







Avatar
LSteph
Bonjour,

Err ou Err.number te permet de récupèrer le code erreur,
selon l'exemple simple que je t'ai proposé tu peux utiliser une sub qui
canalise l'exécution des différentes sub dans ton projet et
renvoie systématiquement à ta routine de gestion d'erreur le cas échéant.



le principe est simple:

Sub test()
on error goto errhandler
call codequiprovoqerreur
exit sub
errhandler:
call gestionerreur
end sub

Sub gestionerreur()
Select case ...

(Après rien ne t'empêche d'appeler ce que tu veux gèrer en C++, mais cela
ici me dépasse.....)

a+

lSteph


"Kamel" a écrit dans le message de news:

Merci Steph,

En fait pour expliciter un peu plus mon soucis:
J'ai développé une dll com en C++ et j'utilise ces objets dans mon code
VBA. Ce que je veux c'est "catcher" les erreurs éventuelles dans le code
C++ et les afficher par une messagebox dans le VBA. Pour le moment dans
chaque procédure je mets un "On Error Goto ..." et j'instancie un objet
ComError qui contient la description de l'erreur ... Dans ce cas la
procédure qui gère l'erreur est simple car elle ne fait qu'afficher la
description dans mon objet ComError.

J'aimerais savoir s'il n'y a pas une solution plus simple ...

Kamel

"LSteph" a écrit dans le message de news:
uzD5$
...après appeler la même sub est possible
tout dépend de la portée
avec call ou
application.run
et le cas échéant le nom de projet + de la macro
application.run "perso.xls!routinerreur"

Mais dans un projet les différents cas à prévoir nécessitent
la plupart du temps leur propre gestion d'erreur bien spécifique.

a+

lSteph

"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel
que soit appelée une procédure spécifiée au cas où surviendrait une
erreur. Quelque chose du type On Error Goto ... mais qui soit global à
toute l'application pour ne pas réecrire la syntaxe dans chacune des
procédures ....

Merci
Kamel











Avatar
Kamel
Ok merci mais sais tu comment renseigner l'objet Err en C++ car j'ai essayé
de l'utilisé mais la description est un message du style "erreur inconnue
...." ... ?


"LSteph" a écrit dans le message de news:

Bonjour,

Err ou Err.number te permet de récupèrer le code erreur,
selon l'exemple simple que je t'ai proposé tu peux utiliser une sub qui
canalise l'exécution des différentes sub dans ton projet et
renvoie systématiquement à ta routine de gestion d'erreur le cas échéant.



le principe est simple:

Sub test()
on error goto errhandler
call codequiprovoqerreur
exit sub
errhandler:
call gestionerreur
end sub

Sub gestionerreur()
Select case ...

(Après rien ne t'empêche d'appeler ce que tu veux gèrer en C++, mais
cela ici me dépasse.....)

a+

lSteph


"Kamel" a écrit dans le message de news:

Merci Steph,

En fait pour expliciter un peu plus mon soucis:
J'ai développé une dll com en C++ et j'utilise ces objets dans mon code
VBA. Ce que je veux c'est "catcher" les erreurs éventuelles dans le code
C++ et les afficher par une messagebox dans le VBA. Pour le moment dans
chaque procédure je mets un "On Error Goto ..." et j'instancie un objet
ComError qui contient la description de l'erreur ... Dans ce cas la
procédure qui gère l'erreur est simple car elle ne fait qu'afficher la
description dans mon objet ComError.

J'aimerais savoir s'il n'y a pas une solution plus simple ...

Kamel

"LSteph" a écrit dans le message de news:
uzD5$
...après appeler la même sub est possible
tout dépend de la portée
avec call ou
application.run
et le cas échéant le nom de projet + de la macro
application.run "perso.xls!routinerreur"

Mais dans un projet les différents cas à prévoir nécessitent
la plupart du temps leur propre gestion d'erreur bien spécifique.

a+

lSteph

"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous Excel
que soit appelée une procédure spécifiée au cas où surviendrait une
erreur. Quelque chose du type On Error Goto ... mais qui soit global à
toute l'application pour ne pas réecrire la syntaxe dans chacune des
procédures ....

Merci
Kamel















Avatar
LSteph
Pas vraiment , déjà assez de mal à comprendre VBA et autres...mais pas C++
alors des pistes :

http://search.microsoft.com/search/results.aspx?st=b&naˆ&View=fr-fr&qu=erreur+vba+en+C%2b%2b
http://support.microsoft.com/default.aspx?scid=kb;fr;186063

A+

lSteph
"Kamel" a écrit dans le message de news:
%231nY$
Ok merci mais sais tu comment renseigner l'objet Err en C++ car j'ai
essayé de l'utilisé mais la description est un message du style "erreur
inconnue ...." ... ?


"LSteph" a écrit dans le message de news:

Bonjour,

Err ou Err.number te permet de récupèrer le code erreur,
selon l'exemple simple que je t'ai proposé tu peux utiliser une sub qui
canalise l'exécution des différentes sub dans ton projet et
renvoie systématiquement à ta routine de gestion d'erreur le cas échéant.



le principe est simple:

Sub test()
on error goto errhandler
call codequiprovoqerreur
exit sub
errhandler:
call gestionerreur
end sub

Sub gestionerreur()
Select case ...

(Après rien ne t'empêche d'appeler ce que tu veux gèrer en C++, mais
cela ici me dépasse.....)

a+

lSteph


"Kamel" a écrit dans le message de news:

Merci Steph,

En fait pour expliciter un peu plus mon soucis:
J'ai développé une dll com en C++ et j'utilise ces objets dans mon code
VBA. Ce que je veux c'est "catcher" les erreurs éventuelles dans le code
C++ et les afficher par une messagebox dans le VBA. Pour le moment dans
chaque procédure je mets un "On Error Goto ..." et j'instancie un objet
ComError qui contient la description de l'erreur ... Dans ce cas la
procédure qui gère l'erreur est simple car elle ne fait qu'afficher la
description dans mon objet ComError.

J'aimerais savoir s'il n'y a pas une solution plus simple ...

Kamel

"LSteph" a écrit dans le message de news:
uzD5$
...après appeler la même sub est possible
tout dépend de la portée
avec call ou
application.run
et le cas échéant le nom de projet + de la macro
application.run "perso.xls!routinerreur"

Mais dans un projet les différents cas à prévoir nécessitent
la plupart du temps leur propre gestion d'erreur bien spécifique.

a+

lSteph

"Kamel" a écrit dans le message de news:

Bonjour à tous,

J'aimerais savoir s'il est possible dans un programme en VBA sous
Excel que soit appelée une procédure spécifiée au cas où surviendrait
une erreur. Quelque chose du type On Error Goto ... mais qui soit
global à toute l'application pour ne pas réecrire la syntaxe dans
chacune des procédures ....

Merci
Kamel