vba - On Error Resume ne fonctionne pas

Le
j-pascal
Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un
"On Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'--
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'--

Merci pour vos lumières.

JP
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Daniel.C
Le #17909771
Bonsoir.
"On error" ne gère pas toutes les erreurs. Si le système détecte une
erreur avant le "niveau" VBA, il exprime son mécontentement. (c'est du
moins comme cela que je me l'explique).
Cordialement.
Daniel

Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un "On
Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'-----
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'-----

Merci pour vos lumières.

JP


j-pascal
Le #17910101
Bonsoir Daniel,

Merci pour cette précision concernant la limite de "On Error Resume
...".
Ca me fait un peu drôle d'entendre qu'une erreur "située" à l'intérieur
du code peut néanmoins se trouver avant le "niveau VBA" ! Pour moi, le
code est déjà du VBA !

A bientôt,

JP
Bonsoir.
"On error" ne gère pas toutes les erreurs. Si le système détecte une erreur
avant le "niveau" VBA, il exprime son mécontentement. (c'est du moins comme
cela que je me l'explique).
Cordialement.
Daniel

Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un "On
Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'-----
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'-----

Merci pour vos lumières.

JP




Daniel.C
Le #17910261
Comme je le conçois, les contrôles sont des objets situés dans une
"bibliothèque" séparée du VBA "standard". De même, l'instruction :
"Application.DisplayAlerts" ne prévient pas tous l'affichage de tous
les messages.
Pour te donner un exemple plus concret, la commande "PrintOut",
commande VBA, fait appel à différents niveaux d'interface entre le
code, le système et l'imprimante (recherche si cela t'intéresse,
l'organisation de l'architecture de Windows).
Daniel

Bonsoir Daniel,

Merci pour cette précision concernant la limite de "On Error Resume ...".
Ca me fait un peu drôle d'entendre qu'une erreur "située" à l'intérieur du
code peut néanmoins se trouver avant le "niveau VBA" ! Pour moi, le code est
déjà du VBA !

A bientôt,

JP
Bonsoir.
"On error" ne gère pas toutes les erreurs. Si le système détecte une erreur
avant le "niveau" VBA, il exprime son mécontentement. (c'est du moins comme
cela que je me l'explique).
Cordialement.
Daniel

Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un "On
Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'-----
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'-----

Merci pour vos lumières.

JP






LE TROLL
Le #17912751
Bonjour,

En sus, tu peux reboucler sur ton erreur aussi, à mon sens, sauter une
erreur possible en force n'est pas normal dans l'absolu. S'il y a erreur, on
doit réparer pour qu'elle ne soit plus la, et surtout la gérer, si toujours
si possible, une erreur par procédure c'est plus simple, car sinon, tu peux
te retrouver avec une erreur comme dit ici, qui vient d'ailleurs et qui est
répercuté plus bas dans la même procédure, exemple

sub saisie()
dim x as double
dim r as string
debut:
r = inputBox("saisir la valeur")
r = trim(r)
if len(r) < 1 then exit sub ' r = "bonjour'
on error resume goto erreur
x = cDble(d) ' ERREUR
'... suite
exit sub
erreur:
if err = ErreurPrévue then
msgbox "Erreur : mettre des chiffres",vbexclamation
on error resume next
goto debut
endif
if err <> 0 then ' erreur <> 0 + <> prévue ?
msgBox err & "... contexte... voir objet err..." & vblf & "signaler_
"procedure = saisie, adresse = erreur, form n°1, programme Y",
vb exclamation
on error resume next
endif
end sub

Dans cet exemple, une gestion d'erreur et une erreur possible par
procédure, c'est clair, on teste l'erreur, on la soigne, on dit
pourquoi, et on reboucle s'il y a lieu (ou Call de la fonction,
récursivité),
et ensuite, on teste si erreur imprévue, on fait en sorte de terminer sans
que le programme plante, et on informe pour la localisation du bug,
on gagnera du temps ensuite en sachant où aller...

Mais le mieux est sans doute d'éviter qu'il y ait des erreurs, en faisant en
sorte
que l'utilisateur ne puisse pas en produire, dans ce cas, il faut l'obliger
à
saisir des chiffres seulement et un seul point, et tu n'auras plus de risque
d'erreur...

Parfois des développeur ne s'ennuient pas, avec une date saisie, il la
balance dans
une variable date, s'il n'y a pas d'erreur c'est bon, s'il y a erreur c'est
mauvais, on
renvoie. Normalement l'erreur ne doit pas servir d'élément de gestion si le
programme, et principalement la saisie, est bien traitée, car sinon, il peut
survenir
une vraie erreur impréue, qui va être inhibé alors qu'elle devrait être
traitée...


------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"j-pascal"
| Bonsoir,
|
| Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
| classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un
| "On Error Resume Next" ne fonctionne pas pour gérer l'erreur ?
|
| '-----
| Private Sub UserForm_Initialize()
| On Error Resume Next
| Me.Calendar1 = Date
| End Sub
| '-----
|
| Merci pour vos lumières.
|
| JP
|
|
j-pascal
Le #17935721
Bonsoir Daniel,

Merci pour cette précision. Un peu complexe tout ça. Je retiens en tout
cas, que "On error Resume ..." ne résoud pas toutes les "Errors"...
A bientôt,

JP

PS : et dans le cas du "Calendar", comment aurait-il fallu traiter ce
genre d'erreur ?

Comme je le conçois, les contrôles sont des objets situés dans une
"bibliothèque" séparée du VBA "standard". De même, l'instruction :
"Application.DisplayAlerts" ne prévient pas tous l'affichage de tous les
messages.
Pour te donner un exemple plus concret, la commande "PrintOut", commande VBA,
fait appel à différents niveaux d'interface entre le code, le système et
l'imprimante (recherche si cela t'intéresse, l'organisation de l'architecture
de Windows).
Daniel

Bonsoir Daniel,

Merci pour cette précision concernant la limite de "On Error Resume ...".
Ca me fait un peu drôle d'entendre qu'une erreur "située" à l'intérieur du
code peut néanmoins se trouver avant le "niveau VBA" ! Pour moi, le code
est déjà du VBA !

A bientôt,

JP
Bonsoir.
"On error" ne gère pas toutes les erreurs. Si le système détecte une
erreur avant le "niveau" VBA, il exprime son mécontentement. (c'est du
moins comme cela que je me l'explique).
Cordialement.
Daniel

Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un
"On Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'-----
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'-----

Merci pour vos lumières.

JP








j-pascal
Le #17935711
Bonsoir,

Merci.
J'ai une erreur de compilation sur "cDble(d)"

J'imagine qu'il faut enlever le "resume" dans "on error resume goto
erreur" ?!

@+

JP

Bonjour,

En sus, tu peux reboucler sur ton erreur aussi, à mon sens, sauter une
erreur possible en force n'est pas normal dans l'absolu. S'il y a erreur, on
doit réparer pour qu'elle ne soit plus la, et surtout la gérer, si toujours
si possible, une erreur par procédure c'est plus simple, car sinon, tu peux
te retrouver avec une erreur comme dit ici, qui vient d'ailleurs et qui est
répercuté plus bas dans la même procédure, exemple

sub saisie()
dim x as double
dim r as string
debut:
r = inputBox("saisir la valeur")
r = trim(r)
if len(r) < 1 then exit sub ' r = "bonjour'
on error resume goto erreur
x = cDble(d) ' ERREUR
'... suite
exit sub
erreur:
if err = ErreurPrévue then
msgbox "Erreur : mettre des chiffres",vbexclamation
on error resume next
goto debut
endif
if err <> 0 then ' erreur <> 0 + <> prévue ?
msgBox err & "... contexte... voir objet err..." & vblf & "signaler_
"procedure = saisie, adresse = erreur, form n°1, programme Y",
vb exclamation
on error resume next
endif
end sub

Dans cet exemple, une gestion d'erreur et une erreur possible par
procédure, c'est clair, on teste l'erreur, on la soigne, on dit
pourquoi, et on reboucle s'il y a lieu (ou Call de la fonction,
récursivité),
et ensuite, on teste si erreur imprévue, on fait en sorte de terminer sans
que le programme plante, et on informe pour la localisation du bug,
on gagnera du temps ensuite en sachant où aller...

Mais le mieux est sans doute d'éviter qu'il y ait des erreurs, en faisant en
sorte
que l'utilisateur ne puisse pas en produire, dans ce cas, il faut l'obliger
à
saisir des chiffres seulement et un seul point, et tu n'auras plus de risque
d'erreur...

Parfois des développeur ne s'ennuient pas, avec une date saisie, il la
balance dans
une variable date, s'il n'y a pas d'erreur c'est bon, s'il y a erreur c'est
mauvais, on
renvoie. Normalement l'erreur ne doit pas servir d'élément de gestion si le
programme, et principalement la saisie, est bien traitée, car sinon, il peut
survenir
une vraie erreur impréue, qui va être inhibé alors qu'elle devrait être
traitée...


------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"j-pascal"
Bonsoir,

Si le contrôle "Me.Calendar1" de la boîte à outils n'existe pas dans un
classeur qui serait ouvert sur un PC lambda, pourquoi l'insertion d'un
"On Error Resume Next" ne fonctionne pas pour gérer l'erreur ?

'-----
Private Sub UserForm_Initialize()
On Error Resume Next
Me.Calendar1 = Date
End Sub
'-----

Merci pour vos lumières.

JP






Publicité
Poster une réponse
Anonyme