Fonction "on error"

Résolu
Signaler
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007
-
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007
-
Bonjour,

J'ai un problème avec l'instruction "on error resume next", je dois mal l'utiliser ou je n'ai pas la bibliothéque je ne sais pas ...

Où que je place l'instruction dans mon code elle n'est pas prise en compte
Exemple: 

   On Error Resume Next
   Workbooks.Open "le chemin du fichier à ouvrir"

Si le fichier n'esiste pas, il me met l'erreur qd meme.

Je fonctionne sous Excel 2003

Merci d'avance.

18 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Pour en revenir au problème regarde cette petite procédure.
Elle parcours les Classeurs ouvert et cherche celui que tu veux (CheminAVerifier)
Si il est déjà ouvert on l'active sinon on l'ouvre
Private Sub CommandButton1_Click()
Call ActiveClasseur("C:\Test.xls")
End Sub<hr />

Private Sub ActiveClasseur(CheminAVerifier As String)
Dim Wb As Workbook
Dim Trouve As Boolean
   'pour chaque classeur ouvert
   For Each Wb In Application.Workbooks
       'on verifie le chemine
       If Wb.Path & "\" & Wb.Name = CheminAVerifier Then
           Wb.Activate
           Trouve = True
           Exit For
       End If
   Next
   'si il n'a pas été trouver on l'ouvre
   If Not Trouve Then Call Application.Workbooks.Open(CheminAVerifier)
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Utilise Dir (comme je l'avais dit dans mon premier post)

Private Sub CommandButton1_Click()
Call ActiveClasseur("C:\Test.xls")
End Sub<hr />
Private Sub ActiveClasseur(CheminAVerifier As String)
Dim Wb As Workbook
Dim Trouve As Boolean
   'on verifie que le chemin existe
   If Dir(CheminAVerifier) = vbNullString Then
       Call MsgBox("Le chemin n'existe pas", vbCritical Or vbOKOnly)
       Exit Sub
   End If
   'pour chaque classeur ouvert
   For Each Wb In Application.Workbooks
       'on verifie le chemine
       If Wb.Path & "\" & Wb.Name = CheminAVerifier Then
           Wb.Activate
           Trouve = True
           Exit For
       End If
   Next
   'si il n'a pas été trouver on l'ouvre
   If Not Trouve Then Call Application.Workbooks.Open(CheminAVerifier)
 
End Sub<hr />, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
J'ai une autre piste. Peut etre n'est ce pas le code mais simplement la configuration de ton IDE. Est ce la seule erreur que tu aies gérer car tu pourrais essayé de provoquer une erreur autre part et la gérer pour voir si l'erreur est générer quand meme.

Ceque je veux dire, c'est quand si tu vas dans Outils, options... puis dans l'onglet général, dans la zone récupération d'erreur, es tu bien sur Arret sur les erreurs non gérées ?
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Mais qu'appelle tu erreur car dans le code de jrivet, il n'y aura pas d'erreur je pense, seulement un msgbox que tu peux enlever si tu veux
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Bonjour,

On error n'est pas une fonction mais une instruction ...
Développes-tu sous VBA ou pilotes-tu VBA depuis VB6 ?

Il n'est enfin pas nécessaire d'utiliser cette "vilaine" et peu sage instruction pour vérifier l'existence d'un fichier !
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
je rejoints [auteurdetail.aspx?ID=615490 jmfmarques](salut) pour dire qu'une gestion d'erreur pour verifier l'existence d'un fichier est un peu
pourquoi ne pas se servir de Dir ou des autres fonctions proposées . A moins que cela ne cache autre chose qu'il aurait été utile de préciser. (l'erreur aurait été utilie aussi)
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Bonjour,

pour sa défense je dirais qu'apres 2-3 recherches, je vois que des exemples avec on error, je continue mais quand meme pour le trouver seul.

D'ailleurs jmf, est-il possible de "stopper" l'application de l'instruction on error. Pour etre plus clair, est ce que l'on peut spécifier la zone de code concernée par cette instruction (comme un try en java et .net je crois) et la délimité par un genre de end ou autre.

Merci
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Je viens de trouver une solution de Reinfield sans le gestion d'erreur:

Langage : VB6, VBA
Date ajout : 28/03/2006
Posté par Renfield[Liste]
DateMAJ : 18/01/2007

Public Declare Function
GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As LongPublic Const INVALID_FILE_ATTRIBUTES As Long = &HFFFFFFFF

Public Function DoesExist(ByRef vsPath As String) As Boolean
    DoesExist = (GetFileAttributes(vsPath) <> INVALID_FILE_ATTRIBUTES)
End Function
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Désolé pour le format, c'était pas comme ca avant de poster
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007

Déja, merci de vos réponses aussi rapide !

Je tiens à préciser que je suis débutant,

La différence est où entre VBA et pilotage de VBA depuis VB6?

Je travail sous excel et le logiciel VB fourni avec (ALT F11)... avec des "Forms" et du code dans des "Module".

Dans ce cas, je souhaite ouvrir un ficher s'il n'est pas déja ouvert ou alors l'activer s'il est ouvert. J'ai fait qq recherches de code sur le net et j'ai trouvé ce genre d'instructions avec trés souvant "On Error Resume Next"...  et il est dit que ça permet qd meme de continuer le code en "ingnorant" l'erreur, mais moi ça me la met tjr
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
> [auteurdetail.aspx?ID=999867 Nicko11]

Pour délimiter la zone des On Error , tu peux utiliser On Error Goto 0
Petit exemple
Dim i As Integer
On Error Resume Next
   i = 60000
On Error GoTo 0
   MsgBox i
   i = 60000, ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Merci jrivet, j'ai regardé l'aide pour plus d'explication sur le goto 0 parce que je voyais pas à quoi ca correspondait. Je le saurai maintenant.

Pour le pb de notre ami, as tu essayé la solution de renfield (j'espere que ca passera bien cette fois):

Public Declare Function
GetFileAttributes Lib "kernel32.dll" Alias "GetFileAttributesA" (ByVal lpFileName As String) As LongPublic
Const INVALID_FILE_ATTRIBUTES As Long = &HFFFFFFFF

Public Function DoesExist(ByRef vsPath As String) As Boolean    
   DoesExist = (GetFileAttributes(vsPath) <> INVALID_FILE_ATTRIBUTES)
End Function
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007

merci bcp

Petite question suplémentaire qd meme:
   Comment utilise t'on l'instruction "On Error Resume Next" ? et pourquoi qd je l'utilise ça ne fonctionne pas ?

 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
27
Tu ne nous a pas dit quelle était le message d'erreur (puisque tu en reçois un malgré tout) ni précisé si tu développais directement sous VBA EXcel ou si tu pilotaire VBA Excel depuis VB6
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
> [auteurdetail.aspx?ID= 615490 jmfmarques]Désolé mais pour ca défense il a dit "Je travail sous excel et le logiciel VB fourni avec (ALT F11)"
Donc VBA
@+: =89254 Ju£i?n
Pensez: Réponse acceptée
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007

Je développe en VBA

Erreur:
            Erreur d'éxécution '1004'
           
            Et il dit qu'il n'arrive pas a ouvrir le fichier ....

Mais qe ce soit cette erreur ou une autre je ne comprend pas pourquoi lors de l'éxécution il ne prende pas en compte l'instruction qui lui dit de passer à la ligne suivante meme s'il y a une erreur (si l'intruction signifie bien cela)
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007

jrivet, ton code fonctionne super bien, encore merci !


Je vousdrais savoir si il est possible
de ne pas avoir d'erreur si le fichier n'existe vraiment pas
et dans ce cas de dire un truc du genre: "Le fichier n'existe pas" ? 
Messages postés
9
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
3 mai 2007

Son code est nickel, il n'y a pas d'erreur

Et tu as bien raison, je n'étais pas sur "Arret sur les erreurs non gérées" Maintenant ça fonctionne !!!

et encore MERCI a tous pour votre aide