VB : Fonctionnement d'un "On error goto next" pour récupérer ceci - VB/VBA/VBS - Programmation
Marsh Posté le 30-04-2002 à 10:07:19
Private Sub Drive1_Change()
On Error GoTo apra
Dir1.path = Drive1.Drive
apra:
select case err.number
case 68: Dir1.path = "c:\"
end select
End Sub
Marsh Posté le 30-04-2002 à 13:57:24
Ne pas oublier l'exit sub avant l'étiquette (sinon, on y passe sans erreur) et de mettre On Error Goto 0 en quittant le module, sinon, la prochaine erreur sera bien déroutée dans un autre Sub et provoquera un symptôme étrange car voudra "sauter" ici.
Sauf erreur de vieux souvenirs de VB3, je vois ça comme (copyright Karlkox):
Private Sub Drive1_Change()
On Error GoTo apra
Dir1.path = Drive1.Drive
On Error GoTo 0
exit sub
apra:
select case err.number
case 68: Dir1.path = "c:\"
end select
Resume next ' on passe à la ligne qui suit l'erreur
End Sub
Marsh Posté le 30-04-2002 à 18:48:29
essayez le code que vous venez de me donner... je reçois exactement la même erreur à la meme ligne
Marsh Posté le 30-04-2002 à 20:43:48
Un4GivN a écrit a écrit : essayez le code que vous venez de me donner... je reçois exactement la même erreur à la meme ligne |
Chez moi, le code focntionne parfaitement. J'ai juste ajouté une ligne pour que ce soit encore mieux (mise à jour du contrôle "drive1" en "C:\" en cas d'erreur.
Tu as quel VB et quel système d'exploitation ?
Private Sub Drive1_Change()
On Error GoTo apra
Dir1.Path = Drive1.Drive
On Error GoTo 0
Exit Sub
apra:
Select Case Err.Number
Case 68:
Drive1.Drive = "c:\"
Dir1.Path = "c:\"
End Select
Resume Next
End Sub
Marsh Posté le 02-05-2002 à 08:54:27
Ca doit venir de Win XP !
J'ai un pb analogue avec le C sous Win 2000. La détection du caractère "removable" de mon ZIP. Sous tous Windows (3.11/95/98, NT pas encore vérifié), ZIP vide reconnu comme "removable". Sous 2K, si vide : vide. La mode a changé.
Cf site microsoft ?? Y a peut-être truc à changer (acheter un VB plus récent ??). Si le prog est compilé sous un autre Windows, ça fait pareil (si oui, c'est intrinsèque à XP) ?
Marsh Posté le 02-05-2002 à 10:01:32
Si c'est insortable, faudrait essayer (j'ai recopié de mon code C)
UINT uErrMode; (int en VB ça doit aller)
// Empêche message du système quand y a erreur
uErrMode = SetErrorMode(SEM_FAILCRITICALERRORS);
Accès à la fonction qui "craint" avec déroutage classique par On Erroro Goto en VB (retour de valeur en C)
// revalide le déroutement d'erreur comme était avant
SetErrorMode(uErrMode);
Ca empêche un message du système quand y a un disque absent par ex. On veut récupérer l'erreur (elle vient après) mais Windows prend les devants avec un massif : "lecteur non disponible" avec un gros "MessageBeep".
Faudrait que je cherche (guère le temps ce matin) la valeur symbolique de SEM_FAILCRITICALERRORS dans les fichiers .h.
Marsh Posté le 02-05-2002 à 10:36:39
Les variables sont dans winbase.h
#define SEM_FAILCRITICALERRORS 0x0001
#define SEM_NOGPFAULTERRORBOX 0x0002
#define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
#define SEM_NOOPENFILEERRORBOX 0x8000
int ErrM
ErrM = SetErrorMode(1)
..
fonction critique
..
SetErrorMode(ErrM)
devrait peut-être aider à intercepter l'interception Windows.
(Faut quand même les On Error Goto pour les traîter quand on a "la main" ).
Marsh Posté le 30-04-2002 à 06:19:57
Private Sub Drive1_Change()
On Error GoTo apra
Dir1.path = Drive1.Drive
apra:
Dir1.path = "c:\"
End Sub
******************************
Si je prend un lecteur de cd vide, je reçois tout de même une erreur irrécupérable ( Error 68 : Device unavailable ).
Comment je peux faire ? Ça devrait pas être trop dur mais je vois vraiment pas comment faire.