On error goto

ninou58

XLDnaute Occasionnel
Re bonjour,
Petit souci, est-il possible avec un on error goto de stopper tout simplement la macro.
erreur:
Exit sub
mais ca arrête seulement ce module alors que moi je veux que ca arrête complètement de tourner.

Est ce possible?

Merci d'avance
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Je suppose que tu as une macro qui en déclenche une autre at que si la 2ème plante tu veux arreter la première

Alors tu peux passer par une variable boolean

Public TestErreur as Boolean

Sub macro1()
......
macro2
if testerreur=true then exit sub
.....
end sub


sub macro2()
....
on error goto fin
......
exit sub
fin:
testerreur=true
end sub


Edition : OUps pas vu Michel Bonne journée

Message édité par: Pascal76, à: 12/04/2006 14:29
 

ninou58

XLDnaute Occasionnel
Re,
décidemment...
Disons que ne pas générer d'erreur est assez difficile surtout quand on a une base de donnée derrière, ce ne sont pas toutes les requêtes qui passe.

Le end fonctionne bien donc je vais utiliser cela.
Nous, on nous apprend a beaucoup utiliser le on error goto
Bonne journée
 

ninou58

XLDnaute Occasionnel
Re,

Disons que c'est jamais facile de prévoir toutes les erreurs, mais on peut toujours essayer, d'ailleurs personne aurait une idée pour éviter en cas de bug que l'utilisateur se retrouve dans la fenêtre VBA? Qu'il puisse reprendre de début sans aller dans le code sinon ils vont êtres perdus la.


Merci
 

ERIC S

XLDnaute Barbatruc
re

je me suis mal exprimé:

il y aura effectivement toujours des erreurs mais il est souhaitable pour des choses comme essayer d'ouvrir un fichier alors qu'on a rien sélectionné de générer un message plutôt que d'attendre que l'application envoie une erreur

A+

au fait une question : quelle est la portée du 'on error' (la prochaine instruction , le module, le projet..)
 

michel_m

XLDnaute Accro
Re au fil

Tout à fait d'accord avec José: un programme doit ête avant tout pensé pour faciliter la maintenance.C'est quand tu n'entend pas parler de ton prog qu'il est réussi!

pour revenir à la question de Ninou, il y a 'end' mais la solution proposée par Pascal est souvent la + efficace

Par contre, le goto ne doit être utilisé que pour la gestion des erreurs: actuellement sur le forum, les 'goto' (ainsi que les select-selection)fleurissent à mort chez de nouveaux contributeurs qu'il y ait eu avant ou pas une solution plus élaborée: la qualité du forum baisse par ces newbies attirés surtout par le score compteur (ah! passer barbatruc, le rêve)...
Bon après midi à tous

Michel_M
 

ninou58

XLDnaute Occasionnel
Re,
Pascal peux tu m'expliquer comment on fait pour le mot de passe?

Sinon soucis, après un pas à pas, en faite il n'y a aucun souci dans mon code, mais il passe quand même dans le
erreur:
MsgBox ('Une erreur s'est produise, veuillez recommencer'), vbCritical
Call CacherFeuille('Recup')
End

Je m'inquiétais que plus ne fonctionne.
Je met le on error goto tout au début de ma boucle, a l'interieur.
puis le erreur: je le met a la fin juste avant le end sub.

Merci
 

PascalXLD

XLDnaute Barbatruc
Modérateur
RE

Pour la portée du on error voici ce que dit l'aide

Un gestionnaire d'erreurs est 'validé' lorsqu'il a été désigné par une instruction On Error ; le gestionnaire d'erreurs 'actif' est un gestionnaire validé qui traite une erreur. Si une erreur se produit alors qu'un gestionnaire d'erreurs est actif (c'est-à-dire entre la ligne où survient une erreur et une instruction Resume, Exit Sub, Exit Function ou Exit Property), le gestionnaire d'erreurs de la procédure en cours ne peut gérer l'erreur. Le contrôle revient à la procédure appelante. Si la procédure appelante possède un gestionnaire d'erreurs validé, il est activé afin de gérer l'erreur. Si le gestionnaire d'erreurs de la procédure appelante est également actif, le contrôle est restitué aux procédures appelantes antérieures jusqu'à ce qu'un gestionnaire d'erreurs validé mais inactif soit trouvé. Si aucun gestionnaire d'erreurs validé et inactif n'est trouvé, l'erreur est fatale à l'emplacement où elle s'est produite. Chaque fois que le gestionnaire d'erreurs repasse le contrôle à une procédure appelante, cette procédure devient la procédure en cours. Lorsqu'une erreur est gérée par un gestionnaire d'erreurs dans n'importe quelle procédure, l'exécution reprend dans la procédure en cours à l'emplacement désigné par l'instruction Resume.


Bonne lecture ;)
 

ninou58

XLDnaute Occasionnel
Re,
en effet avec le exit sub, je pense que cela va fonctionner, depuis le temps que je cherchais pourquoi!

Sinon pour la protection
Si je fais que cocher la case ca va faire quoi?
Moi je voudrais c'est que s'il y a un bug, que l'utilisateur ne puisse pas aller dans le code, mais il faudrait qu'il puisse continuer, faire un end. C'est possible?

C'est mon avant dernier jour, c'est pour ça que la je suis un peu folle.

:silly: :)
Merci
 

Discussions similaires

Réponses
6
Affichages
209
Réponses
2
Affichages
204

Statistiques des forums

Discussions
312 836
Messages
2 092 656
Membres
105 479
dernier inscrit
chaussadas.renaud