VBA EXCEL - Question On Error Goto

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

  1. Modérateur
    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
    1. 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
      1. 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
        1. Modérateur
          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
        2. Modérateur
          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