gestion des erreurs

7 réponses
Avatar
daniel
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui fonctionne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n'y a
aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de l'éviter,
je mets, sur la ligne précédente, "on error resume next", ce qui résoud mon
problème, mais si de nouvelles erreurs suivent, par exemple la même ligne de
code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai testé err.clear
ou error = 0 etc..., mais rien n'y fait, la gestion des erreurs ne se fait
plus. Dans l'aide, je n'ai rien trouver pour m'aider. Aussi, j'aurais 2
questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer la suite
du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtout que
la macro se poursuive en continuant à signaler les éventulles erreurs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH

7 réponses

Avatar
Philippe.R
Bonsoir,
Tu peux remplacer on error resume next par un on error goto suite, dans ce
genre :

Sub onyva()
On Error GoTo suiTe
Sheets("feuil1").ShowAllData
suiTe:
MsgBox "L'erreur ShowAllData est gérée"
Sheets(5).Activate
End Sub

si le classeur comporte moins de 5 feuilles une nouvelle erreur sera
signalée
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:O5do$
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui fonctionne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n'y
a aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de
l'éviter, je mets, sur la ligne précédente, "on error resume next", ce qui
résoud mon problème, mais si de nouvelles erreurs suivent, par exemple la
même ligne de code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai
testé err.clear ou error = 0 etc..., mais rien n'y fait, la gestion des
erreurs ne se fait plus. Dans l'aide, je n'ai rien trouver pour m'aider.
Aussi, j'aurais 2 questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer la
suite du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtout que
la macro se poursuive en continuant à signaler les éventulles erreurs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH



Avatar
JB
Bonsoir,

On Error Goto 0

http://boisgontierjacques.free.fr/pages_site/Onerror.htm

JB

On 1 avr, 21:22, "daniel" wrote:
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui fonctio nne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n 'y a
aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de l' éviter,
je mets, sur la ligne précédente, "on error resume next", ce qui ré soud mon
problème, mais si de nouvelles erreurs suivent, par exemple la même l igne de
code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai testé er r.clear
ou error = 0 etc..., mais rien n'y fait, la gestion des erreurs ne se f ait
plus. Dans l'aide, je n'ai rien trouver pour m'aider. Aussi, j'aurais 2
questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer l a suite
du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtou t que
la  macro se poursuive en continuant à signaler les éventulles erre urs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH


Avatar
daniel
Bonsoir,
Merci à vous pour vos réponses, je regarde ça demain au bureau et vous
tiendrais au courant si je m'en sors.... oupas...
Mais, en plus, n'y a t'il pas moyen de faire un test pour savoir s'il y a un
ou des filtres de posé(s) avant la poursuite du code.
Merci encore pour votre disponibilité, c'est vraiment agréable d'avoir des
réponses, en plus, vraiment rapidement.
Excellente soirée et à demain.
Danielh
Avatar
MichDenis
Si tu permets Philippe,

Un petit exemple à exécuter avec la touche F8 pour les fins de
la démonstration...
'-----------------------------------------------
Sub test()

Dim Gestion_Erreur As String
On Error GoTo Gestion_Erreur
'En supposant que chacune de ces feuilles
'sont inexistantes dans le classeur.
Set sh = Worksheets("Feuil5")

Set sh = Worksheets("Feuil6")

Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Err.Clear
'ici on peut ajouter "Resume"
' ceci retourne réexécuter la ligne
'de code problématique.. évidemment ceci
'signifie qu'avant cette ligne nous avons
'mis des lignes de code venant corriger l'erreur !
Resume
'Ou on peut écrire ceci "Resume Next"
'Cela permet la continuation de l'exécution du code
'immédiatement après la ligne de code problème...
'évidemment il faut juger de la pertinence de
'reprendre l'exécution du code le cas échéant.
Resume Next

End Sub
'-----------------------------------------------

Pour utiliser l'expression consacrée "On error resume next" , le
programmeur doit savoir à l'avance le type d'erreur possible
comme ceci semble être dans le cas du demandeur. Cependant, il faut
éviter d'utiliser cette façon de faire si on ignore la ou les erreurs
que le code peut générer en cours d'exécution... on risque de se
retrouver avec de drôles de résultats.





"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de groupe de discussion
: #
Bonsoir,
Tu peux remplacer on error resume next par un on error goto suite, dans ce
genre :

Sub onyva()
On Error GoTo suiTe
Sheets("feuil1").ShowAllData
suiTe:
MsgBox "L'erreur ShowAllData est gérée"
Sheets(5).Activate
End Sub

si le classeur comporte moins de 5 feuilles une nouvelle erreur sera
signalée
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:O5do$
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui fonctionne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n'y
a aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de
l'éviter, je mets, sur la ligne précédente, "on error resume next", ce qui
résoud mon problème, mais si de nouvelles erreurs suivent, par exemple la
même ligne de code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai
testé err.clear ou error = 0 etc..., mais rien n'y fait, la gestion des
erreurs ne se fait plus. Dans l'aide, je n'ai rien trouver pour m'aider.
Aussi, j'aurais 2 questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer la
suite du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtout que
la macro se poursuive en continuant à signaler les éventulles erreurs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH



Avatar
Philippe.R
Bonjour Denis,
Je t'en prie, tu es chez toi ;o))
(Je ne perçoit en tous cas pas en quoi ton intervention peut contredire la
mienne)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"MichDenis" a écrit dans le message de
news:
Si tu permets Philippe,

Un petit exemple à exécuter avec la touche F8 pour les fins de
la démonstration...
'-----------------------------------------------
Sub test()

Dim Gestion_Erreur As String
On Error GoTo Gestion_Erreur
'En supposant que chacune de ces feuilles
'sont inexistantes dans le classeur.
Set sh = Worksheets("Feuil5")

Set sh = Worksheets("Feuil6")

Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Err.Clear
'ici on peut ajouter "Resume"
' ceci retourne réexécuter la ligne
'de code problématique.. évidemment ceci
'signifie qu'avant cette ligne nous avons
'mis des lignes de code venant corriger l'erreur !
Resume
'Ou on peut écrire ceci "Resume Next"
'Cela permet la continuation de l'exécution du code
'immédiatement après la ligne de code problème...
'évidemment il faut juger de la pertinence de
'reprendre l'exécution du code le cas échéant.
Resume Next

End Sub
'-----------------------------------------------

Pour utiliser l'expression consacrée "On error resume next" , le
programmeur doit savoir à l'avance le type d'erreur possible
comme ceci semble être dans le cas du demandeur. Cependant, il faut
éviter d'utiliser cette façon de faire si on ignore la ou les erreurs
que le code peut générer en cours d'exécution... on risque de se
retrouver avec de drôles de résultats.





"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
groupe de discussion
: #
Bonsoir,
Tu peux remplacer on error resume next par un on error goto suite, dans ce
genre :

Sub onyva()
On Error GoTo suiTe
Sheets("feuil1").ShowAllData
suiTe:
MsgBox "L'erreur ShowAllData est gérée"
Sheets(5).Activate
End Sub

si le classeur comporte moins de 5 feuilles une nouvelle erreur sera
signalée
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:O5do$
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui
fonctionne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n'y
a aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de
l'éviter, je mets, sur la ligne précédente, "on error resume next", ce
qui
résoud mon problème, mais si de nouvelles erreurs suivent, par exemple la
même ligne de code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai
testé err.clear ou error = 0 etc..., mais rien n'y fait, la gestion des
erreurs ne se fait plus. Dans l'aide, je n'ai rien trouver pour m'aider.
Aussi, j'aurais 2 questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer la
suite du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtout
que
la macro se poursuive en continuant à signaler les éventulles erreurs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH







Avatar
MichDenis
| Je ne perçoit en tous cas pas en quoi ton intervention
| peut contredire la mienne

Elle ne contredit pas ta proposition... elle ajoute tout au plus !
;-)



"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de groupe de discussion
: OaV$#
Bonjour Denis,
Je t'en prie, tu es chez toi ;o))
(Je ne perçoit en tous cas pas en quoi ton intervention peut contredire la
mienne)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"MichDenis" a écrit dans le message de
news:
Si tu permets Philippe,

Un petit exemple à exécuter avec la touche F8 pour les fins de
la démonstration...
'-----------------------------------------------
Sub test()

Dim Gestion_Erreur As String
On Error GoTo Gestion_Erreur
'En supposant que chacune de ces feuilles
'sont inexistantes dans le classeur.
Set sh = Worksheets("Feuil5")

Set sh = Worksheets("Feuil6")

Exit Sub
Gestion_Erreur:
MsgBox Err.Number & " , " & Err.Description
Err.Clear
'ici on peut ajouter "Resume"
' ceci retourne réexécuter la ligne
'de code problématique.. évidemment ceci
'signifie qu'avant cette ligne nous avons
'mis des lignes de code venant corriger l'erreur !
Resume
'Ou on peut écrire ceci "Resume Next"
'Cela permet la continuation de l'exécution du code
'immédiatement après la ligne de code problème...
'évidemment il faut juger de la pertinence de
'reprendre l'exécution du code le cas échéant.
Resume Next

End Sub
'-----------------------------------------------

Pour utiliser l'expression consacrée "On error resume next" , le
programmeur doit savoir à l'avance le type d'erreur possible
comme ceci semble être dans le cas du demandeur. Cependant, il faut
éviter d'utiliser cette façon de faire si on ignore la ou les erreurs
que le code peut générer en cours d'exécution... on risque de se
retrouver avec de drôles de résultats.





"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
groupe de discussion
: #
Bonsoir,
Tu peux remplacer on error resume next par un on error goto suite, dans ce
genre :

Sub onyva()
On Error GoTo suiTe
Sheets("feuil1").ShowAllData
suiTe:
MsgBox "L'erreur ShowAllData est gérée"
Sheets(5).Activate
End Sub

si le classeur comporte moins de 5 feuilles une nouvelle erreur sera
signalée
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"daniel" a écrit dans le message de
news:O5do$
Bonsoir,
Dans une macro, je sélectionne une feuille et je demande que tous les
filtres soient "vidés" par sheets("feuil1").showalldata, ce qui
fonctionne
bien dans le cas où il ya effectivement au moins un filtre. Mais s'il n'y
a aucune colonne de filtrée, j'ai un message d'erreur. Aussi afin de
l'éviter, je mets, sur la ligne précédente, "on error resume next", ce
qui
résoud mon problème, mais si de nouvelles erreurs suivent, par exemple la
même ligne de code pour test, là il n'y a pas d'arrêt sur l'erreur. J'ai
testé err.clear ou error = 0 etc..., mais rien n'y fait, la gestion des
erreurs ne se fait plus. Dans l'aide, je n'ai rien trouver pour m'aider.
Aussi, j'aurais 2 questions.
1 Comment vérifier qu'un filtre est posé ou pas, et donc influencer la
suite du code ?
2 Comment mieux gérer les erreurs pour pouvoir les détecter et surtout
que
la macro se poursuive en continuant à signaler les éventulles erreurs ?
Merci par avance pour vos réponses à ces 2 questions et surtout bonne
soirée.
DanielH







Avatar
Philippe.R
"MichDenis" a écrit dans le message de
news:
| Je ne perçoit en tous cas pas en quoi ton intervention
| peut contredire la mienne

Elle ne contredit pas ta proposition... elle ajoute tout au plus !
;-)



C'est bien ainsi que je l'avais compris, mai il arrive parfois qu'un doute
s'insinue.
Bonne journée à toi