Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

(vba) on error resume ...

8 réponses
Avatar
j-pascal
Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un "On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le projet ?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne avant
une ligne de code qui "pourrait" poser problème ... mais l'idée serait de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affichage d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP

8 réponses

Avatar
JB
Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JB
http://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:
Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un "On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le projet ?
Je m'explique : en général, on traite l'erreur en plaçant ladite li gne avant
une ligne de code qui "pourrait" poser problème ... mais l'idée serai t de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affichag e d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP


Avatar
M41
Bonsoir

blablabla peut être appelé par tout Sub du projet et même gérer une partie
du problème par des échanges de valeurs

Dim P As Boolean, R As Integer
'
Sub xxxx()
Dim i As Integer: R = 1
On Error GoTo E_xxxx
debub.Print 1 / i
Exit Sub
E_xxxx:
blablabla
If P Then MsgBox "FIN"
End Sub
'
Sub blablabla()
P = True
MsgBox "Blablabla " & R
End Sub


Cordialement

M41





"j-pascal" a écrit dans le message de news:

Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le
projet ?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant une ligne de code qui "pourrait" poser problème ... mais l'idée
serait de prévoir l'imprévisible afin d'épargner à l'utilisateur
l'affichage d'une fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP


Avatar
j-pascal
Bonsoir Jacques,

Ca fonctionne parfaitement ... Merci !

Je ne comprends pas :
'---------
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
'---------

Est-ce que ça traite le cas où l'onglet "Toto" existe ??
Si oui, que fait "Sheets.Add" ? Pas à pas, je ne vois rien !

@+ ?

JP


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

Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JB
http://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:
Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le projet
?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant
une ligne de code qui "pourrait" poser problème ... mais l'idée serait de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affichage d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP


Avatar
JB
Bonsoir,

Sur cet exemple, si la feuille TOTO n'existe pas, on la crée avec
Sheets.Add et on la renomme.

JB

On 20 oct, 21:25, "j-pascal" wrote:
Bonsoir Jacques,

Ca fonctionne parfaitement ... Merci !

Je ne comprends pas :
'---------
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
'---------

Est-ce que ça traite le cas où l'onglet "Toto" existe ??
Si oui, que fait "Sheets.Add" ? Pas à pas, je ne vois rien !

@+ ?

JP

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

Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JBhttp://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:



Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le proj et
?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant
une ligne de code qui "pourrait" poser problème ... mais l'idée ser ait de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affich age d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse ! ) ...

Cordialement,

JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
j-pascal
Bonsoir,

Merci ! Tout fonctionne parfaitement (mais est-ce une surprise pour toi ?
;-) )
Puis-je me permettre qq questions ?
Si oui,

blablabla peut être appelé par tout Sub du projet et même gérer une partie
du problème par des échanges de valeurs


Pas tout compris !

Dim P As Boolean, R As Integer
'
Sub xxxx()
Dim i As Integer: R = 1


Je ne comprends pas la forme ": R = 1"
Pour moi, une variable se définit par "As Variant", "As Integer", etc mais
sans rien qui suit !

On Error GoTo E_xxxx
debub.Print 1 / i


Comprends pas "debub.Print 1 / i".
Par ailleurs, avec Option Explicit, je dois déclarer "debub" ... Quel type ?
Une variable (?) suivie de ".Print" ... ça m'intigue !

Exit Sub
E_xxxx:
blablabla


Pourquoi ça apparaît dans une msgbox, alors qu'on n'a pas "msgbox blablabla"
?

If P Then MsgBox "FIN"


Cet usage du "P" ne m'est pas très familier, mais bon, il faut que je
cherche aussi un peu par moi-même ;-)

End Sub
'
Sub blablabla()
P = True
MsgBox "Blablabla " & R
End Sub


Cordialement


JP





"j-pascal" a écrit dans le message de news:

Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le
projet ?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant une ligne de code qui "pourrait" poser problème ... mais l'idée
serait de prévoir l'imprévisible afin d'épargner à l'utilisateur
l'affichage d'une fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP






Avatar
j-pascal
Re,

Sur cet exemple, si la feuille TOTO n'existe pas, on la crée avec
Sheets.Add et on la renomme.

Mais à quoi sert cette feuille ? Je pensais (au départ) que tu sélectionnais
une feuille qui n'existait pas pour "simuler" une erreur ...

Maintenant, ça bogue sur :
"Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")"
(L'indice n'appartient pas à la sélection)
(Je ne comprends pas l'utilité de cette ligne et des 3 autres qui suivent
...)

PS : pour produire une erreur, j'ai ajouté : "Sheets("zaza").Select" après
'suite du pgm
Peut-être n'ai-je pas compris où il fallait insérer le programme "fautif" !


JB

On 20 oct, 21:25, "j-pascal" wrote:
Bonsoir Jacques,

Ca fonctionne parfaitement ... Merci !

Je ne comprends pas :
'---------
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
'---------

Est-ce que ça traite le cas où l'onglet "Toto" existe ??
Si oui, que fait "Sheets.Add" ? Pas à pas, je ne vois rien !

@+ ?

JP

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

Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JBhttp://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:



Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le
projet
?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant
une ligne de code qui "pourrait" poser problème ... mais l'idée serait
de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affichage d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
JB
La feuille Log doit exister:

http://boisgontierjacques.free.fr/fichiers/Divers/OnError3.xls
http://boisgontierjacques.free.fr/pages_site/Onerror.htm#Exemple

JB

On 20 oct, 21:57, "j-pascal" wrote:
Re,

Sur cet exemple, si la feuille TOTO n'existe pas, on la crée avec
Sheets.Add et on la renomme.

Mais à quoi sert cette feuille ? Je pensais (au départ) que tu séle ctionnais
une feuille qui n'existait pas pour "simuler" une erreur ...

Maintenant, ça bogue sur :
"Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")"
(L'indice n'appartient pas à la sélection)
(Je ne comprends pas l'utilité de cette ligne et des 3 autres qui suive nt
...)

PS : pour produire une erreur, j'ai ajouté : "Sheets("zaza").Select" ap rès
'suite du pgm
Peut-être n'ai-je pas compris où il fallait insérer le programme "f autif" !

JB

On 20 oct, 21:25, "j-pascal" wrote:



Bonsoir Jacques,

Ca fonctionne parfaitement ... Merci !

Je ne comprends pas :
'---------
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
'---------

Est-ce que ça traite le cas où l'onglet "Toto" existe ??
Si oui, que fait "Sheets.Add" ? Pas à pas, je ne vois rien !

@+ ?

JP

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

Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JBhttp://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:

Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à un
"On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le
projet
?
Je m'explique : en général, on traite l'erreur en plaçant ladit e ligne
avant
une ligne de code qui "pourrait" poser problème ... mais l'idée s erait
de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affi chage d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -




Avatar
j-pascal
Re,

Merci, c'est parfait (Je ne risquais pas de comprendre ce Log tout seul !!)

Si le projet comprend du code dans "ThisWorkbook", dans les "Feuil...", dans
les "modules", dans des "UF" et tout ça avec bien sûr des "PrivateSub" ...
Est-il suffisant de mettre ton présent code dans "ThisWorkbook_open" ? (Je
crains de dire une bêtise ... )

@+ ?

JP

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

La feuille Log doit exister:

http://boisgontierjacques.free.fr/fichiers/Divers/OnError3.xls
http://boisgontierjacques.free.fr/pages_site/Onerror.htm#Exemple

JB

On 20 oct, 21:57, "j-pascal" wrote:
Re,

Sur cet exemple, si la feuille TOTO n'existe pas, on la crée avec
Sheets.Add et on la renomme.

Mais à quoi sert cette feuille ? Je pensais (au départ) que tu
sélectionnais
une feuille qui n'existait pas pour "simuler" une erreur ...

Maintenant, ça bogue sur :
"Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")"
(L'indice n'appartient pas à la sélection)
(Je ne comprends pas l'utilité de cette ligne et des 3 autres qui suivent
...)

PS : pour produire une erreur, j'ai ajouté : "Sheets("zaza").Select" après
'suite du pgm
Peut-être n'ai-je pas compris où il fallait insérer le programme "fautif"
!

JB

On 20 oct, 21:25, "j-pascal" wrote:



Bonsoir Jacques,

Ca fonctionne parfaitement ... Merci !

Je ne comprends pas :
'---------
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
'---------

Est-ce que ça traite le cas où l'onglet "Toto" existe ??
Si oui, que fait "Sheets.Add" ? Pas à pas, je ne vois rien !

@+ ?

JP

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

Bonsoir,

Sub essai()
'....
'....
On Error Resume Next ' si erreur, continuer (on va traiter l
'erreur si on la reconnaît)
onglet = "Toto"
Sheets(onglet).Select
Select Case Err.Number
Case 9
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = onglet
Case Is > 0
GoTo FinProg
End Select
On Error GoTo FinProg ' Si erreur, aller à finProg pour
erreursnon prévues.
'suite du pgm
'....
End

FinProg:
MsgBox "Erreur non prévue"
Sheets("log").[A65000].End(xlUp).Offset(1, 0) = Environ("Username")
Sheets("log").[A65000].End(xlUp).Offset(0, 1) = Now
Sheets("log").[A65000].End(xlUp).Offset(0, 2) = Err.Number
Sheets("log").[A65000].End(xlUp).Offset(0, 3) = Err.Description
ActiveWorkbook.Save
Stop
End Sub

JBhttp://boisgontierjacques.free.fr

On 19 oct, 18:34, "j-pascal" wrote:

Bonsoir,

Je crains que ma question soit "étrange", mais bon ...

Est-il possible de mettre dans le code une ligne qui ressemblerait à
un
"On
error resume ..." (ou avec un GoTo) et qui fonctionne pour tout le
projet
?
Je m'explique : en général, on traite l'erreur en plaçant ladite ligne
avant
une ligne de code qui "pourrait" poser problème ... mais l'idée serait
de
prévoir l'imprévisible afin d'épargner à l'utilisateur l'affichage
d'une
fenêtre de débogage, en général peu accueillante ...
Il est évident que cette le code n'aurait pas vocation à traiter le
problème, mais seulement à afficher un message et à mettre fin à la
procédure.

Merci d'avance pour vos lumières (si la question mérite réponse !) ...

Cordialement,

JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -- Masquer le texte des
messages précédents -


- Afficher le texte des messages précédents -