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 :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 ! -
Bonjour, salut pijaku.
Il faut intercepter l'erreur avecOn Error Resume Next
, ainsi le message d'erreur n'apparaîtra plus.
Il faut enlever leOn Error GoTo
et mettre en début de procédureOn 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 :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 :
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
-