VBA EXCEL - Question On Error Goto

Fermé
Virginie - Modifié par pijaku le 24/04/2014 à 16:17
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 25 avril 2014 à 14:30
Bonjour à tous,

J'ai un souci dans ma macro Excel et ca commence à m'agacer sérieusement donc si qqun à une solution, je serais ravie !

ma macro ouvre un fichier dont le chemin d'accès se trouve dans une inputbox et le nom dans une autre inputbox. Jusque là aucun souci.

Mon problème est que si je rentre un chemin ou nom de fichier erroné, je souhaiterai afficher un message et non afficher l'erreur VBA 1004. Je pensais que mon On Error Go To message ferait l'affaire mais rien à faire, j'ai une erreur sur la ligne "If check = ("\") Then..."

Pourquoi mon On error go to message n'est pas pris en compte???

voici mon code (enfin le bout qui pose problème) :

estouvert = False
On Error GoTo ouvre
    Workbooks(NomFichier).Activate
On Error GoTo 0
    estouvert = True
ouvre:
    If estouvert = False Then
    
    Windows(Dashboard).Activate
        Worksheets("Gestion").Activate
         check = Right(chemin, 1)
End If
On Error GoTo message
         If check = ("\") Then Workbooks.Open (Fichier) Else Workbooks.Open (chemin & "\" + NomFichier)
message:
    MsgBox "Fichier introuvable. Vérifiez le chemin d'accès et / ou le nom du fichier"
On Error GoTo 0

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 24/04/2014 à 16:21
Bonjour,

Je n'ai pas testé ton code, mais le fait que On Error ne semble pas fonctionner me semble dû à une erreur de syntaxe.

Essaie en remplaçant :
If check = ("\") Then Workbooks.Open (Fichier) Else Workbooks.Open (chemin & "\" + NomFichier)
par :
If check = "\" Then Workbooks.Open (Fichier) Else Workbooks.Open (chemin & "\" & NomFichier)

Pour info, j'ai juste supprimé les parenthèses autour de "\" et remplacé ton + NomFichier par & NomFichier.
Nota : vérifier que la variable Fichier est correctement déclarée.
Cordialement,
Franck
0
Hello, merci pour ta réponse et pour la simplification de mon code.

En revanche, mon code fonctionne parfaitement, c'est simplement que si les contenus de mes variables Fichier ou Chemin & NomFichier sont chargées avec une erreur (un nom de fichier erroné ou qui n'existe pas par exemple) j'ai une erreur VBA 1004 (fichier introuvable). Théoriquement, avec mon On Error Go To, je ne devrais pas avoir de message système d'erreur et mon code devrait aller directement à mon label "message"...

alors pourquoi mon on error goto n'est pas pris en compte ?
merci de vos avis !
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
Modifié par Polux31 le 25/04/2014 à 09:45
Bonjour, salut pijaku.

Il faut intercepter l'erreur avec
On Error Resume Next
, ainsi le message d'erreur n'apparaîtra plus.

Il faut enlever le
On Error GoTo
et mettre en début de procédure
On Error Resume Next

En fin de procédure (juste avant le End Sub) il faut mettre:

If Err <> 0 Then
    MsgBox "Fichier introuvable. Vérifiez le chemin d'accès et / ou le nom du fichier"
End If


;0)

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 avril 2014 à 14:12
Salut Polux31,

En enlevant simplement le On Error Goto 0, cela semble fonctionner avec le code donné.
Exemple de test :
Option Explicit

Sub test()
Dim fichier As String, NomFichier As String, chemin As String, check As String
fichier = ThisWorkbook.Path & "\" & "Classeur2.xls"
NomFichier = "Classeur2.xls"
chemin = ThisWorkbook.Path
check = ":"
'ou bien :
'check = "\"
On Error GoTo message
If check = ("\") Then Workbooks.Open (fichier) Else Workbooks.Open (chemin & "\" + NomFichier)
message:
MsgBox "Fichier introuvable. Vérifiez le chemin d'accès et / ou le nom du fichier"
End Sub


Si Classeur2.xls n'existe pas, j'ai bien le message "message:" qui s'affiche et pas d'errur 1004...
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
25 avril 2014 à 14:30
Complément d'info :
Par contre, dans la macro proposée ci dessus, le souci vient de la double utilisation de On Error GoTo machin, ou et surtout car la première erreur n'est pas traitée...

Dans ce cas, il convient, effectivement d'utiliser Resume (et non pas On Error resume Next, ni On Error GoTo truc) comme ceci :

estouvert = False
On Error GoTo ouvre
    Workbooks(NomFichier).Activate
    estouvert = True
ouvre:
'Si une erreur a renvoyé à l'étiquette ouvre, 
'alors "Resume ouvre" termine la gestion de cette erreur
If Err <> 0 Then Resume ouvre 'Ne pas oublier le test If Err <> 0 pour éviter le bug de Resume sans erreur...
If estouvert = False Then
  Windows(Dashboard).Activate
  Worksheets("Gestion").Activate
  check = Right(chemin, 1)
End If
On Error GoTo message
If check = ("\") Then Workbooks.Open (Fichier) Else Workbooks.Open (chemin & "\" + NomFichier)
message:
MsgBox "Fichier introuvable. Vérifiez le chemin d'accès et / ou le nom du fichier"
'rétablit la gestion des erreurs par VBA pour la suite de la procédure
On Error GoTo 0
0