VBA EXCEL - Question On Error Goto
Virginie
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
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) :
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
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 :
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
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
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 !
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 !
Bonjour, salut pijaku.
Il faut intercepter l'erreur avec
Il faut enlever le
En fin de procédure (juste avant le End Sub) il faut mettre:
;0)
«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.»
Nicolas Boileau
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 GoToet 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
Salut Polux31,
En enlevant simplement le On Error Goto 0, cela semble fonctionner avec le code donné.
Exemple de test :
Si Classeur2.xls n'existe pas, j'ai bien le message "message:" qui s'affiche et pas d'errur 1004...
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...
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 :
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