J'ai exactement le même problème, j'ai été obligé de mettre deux On Error Resume Next sur mes .ShowAllData successifs, à défaut de pouvoir créer un errorHandler qui fonctionne 2 fois consécutives.
Version imprimable
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
Bonjour Hymced, Mercatog, bonjour le forum,
Peut-être comme ça :
Code:If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
Bonjour tu peu aussi mettre ton traitement d'erreur dans une fonciton
Code:
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 ?Citation:
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:
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:
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
Bonjour,
jolie démonstration de boucle sans fin causée par On Error Goto -1 … :plusser:
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