Bonjour
Et tu ne peux pas éviter les erreur avec des tests en amont? C'est à dire traiter le cas où l'erreur apparait?
Le On Error, devra être laissé en dernier recours
Cordialement.
J'utilise toujours le point comme séparateur décimal dans mes tests.
Bonjour Hymced, Mercatog, bonjour le forum,
Peut-être comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
À plus,
Thauthème
Je suis Charlie
Bonjour tu peu aussi mettre ton traitement d'erreur dans une fonciton
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Sub MaMacro if Not AfficheTout then msgBox "1° Erreur" (...) if Not AfficheTout then msgBox "2° Erreur" End Sub Function AfficheTout as boolean On error GoTo UneErreur ActiveSheet.ShowAllData AfficheTout = true exit function UneErreur: AfficheTout = false end sub
Merci à vous deux pour vos réponses ultra rapides ! j'ai opté pour la méthode 1 plus simple, mais c'est qd même bon à savoir pour la méthode 2
Bonjour,
J'ai été confronté à ce problème il y a qq temps.
En fait On Error GoTo 0 désactive l'interception des erreurs.
En utilisation 'normale' ça ne se voit pas car elle est réinitialisée en sortie de procédure.
Tu peux utiliser utiliser On Error Goto -1 qui lui le réactive. Documenté uniquement pour VB mais correct également en VBA.
eric
Salut,
Il faut faire gaffe avec On Error Goto -1 car il ramène à l'étiquette précédente en cas d'erreur, donc il peut y avoir création d'une boucle infini au même titre qu'avec Resume qui lui ramène sur la dernière ligne qui à généré l'erreur.
Dans les 2 cas (Goto -1 et Resume), il vaut mieux être au courant.
Bonjour,
Tu peux développer ?Il faut faire gaffe avec On Error Goto -1 car il ramène à l'étiquette précédente en cas d'erreur
Pour moi On Error Goto -1 n'emmène nulle part, tout comme On Error Goto 0.
-1 et 0 ne sont pas des étiquettes, ce sont juste des syntaxes particulières de On Error Goto
eric
EDIT:
Le code n°1 créé une boucle infini.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Sub ErrorHandlingBoucleInfini() Dim a As Double On Error GoTo Etiquette1 a = 5 / 0 MsgBox "Il n'y a pas d'erreur" Etiquette1: ' Si erreur => Renvoie sur l'étiquette n°1 (étiquette précédente dû au On Error GoTo Etiquette1 toujours actif) On Error GoTo -1 a = 5 / 0 End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Sub ErrorHandling() Dim a As Double On Error GoTo Etiquette1 a = 5 / 0 MsgBox "Il n'y a pas d'erreur" Etiquette1: On Error GoTo Etiquette2 On Error GoTo -1 a = 5 / 0 Etiquette2: End Sub
Dernière modification par Invité ; 30/08/2014 à 23h04.
Bonjour,
jolie démonstration de boucle sans fin causée par On Error Goto -1 …
C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)
Je n'ai pas dû assez détailler.
Il faut quand même distinguer les erreurs 'normales' et attendues à ne pas traiter, de celles à traiter.
Si tu as une boucle avec des erreurs 'normales' que tu ne veux pas traiter On Error Goto 0 désactive le gestionnaire d'erreur et tu plantes sur l'erreur suivante. On Error Goto -1 ne le désactive pas et tes boucles se terminent.
C'est dans ce cadre qu'il est intéressant.
Je ne vois pas trop l'intérêt ni dans quel cas l'utiliser dans le traitement de l'erreur.
Tout est réinitialisé avec le End Sub, et Resume et Resume Next réinitialisent aussi le gestionnaire d'erreur.
eric
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager