Fonction "on error"

Résolu
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007 - 3 mai 2007 à 08:59
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007 - 3 mai 2007 à 10:35
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 mai 2007 à 09:37
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
3
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 mai 2007 à 10:18
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
3
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 10:27
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 ?
3
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 10:29
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
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 mai 2007 à 09:09
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 !
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 mai 2007 à 09:16
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
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 09:20
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
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 09:24
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
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 09:25
Désolé pour le format, c'était pas comme ca avant de poster
0
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 09:25
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 mai 2007 à 09:29
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
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
3 mai 2007 à 09:39
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
0
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 09:43
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 ?

 
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
3 mai 2007 à 09:47
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
0
jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
3 mai 2007 à 09:53
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
0
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 10:04
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)
0
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 10:12
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" ? 
0
lolo2869 Messages postés 9 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 3 mai 2007
3 mai 2007 à 10:35
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
0
Rejoignez-nous