Récupérer le message d'erreur à l'ouverture d'un fichier Excel

ExcelGuru1 Messages postés 21 Statut Membre -  
ExcelGuru1 Messages postés 21 Statut Membre -
Bonjour à tous,

J'essayerais d'être le plus claire et précis possible.

Voilà, j'ai une macro sous Excel en Vba qui parcours tout les fichiers Excel (*.xls) et (*.xlsm) d'un dossiers donnée, ce programme les ouvre et les ferme un à un.
Maintenant mon besoin est, comme spécifié dans le titre : En cas d'erreur d'ouverture, comment faire pour récupérer la description du message d'erreur due à l'ouverture d'un fichier ?

J'ai trouvé quelques Forums en Allemand traitant du sujet, mais ils sont tous spécialisé dans Access, et rien sur Excel.

Si vous avez des questions, sentez-vous libre de me les poser.
Merci d'avance à tous :)

5 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    le message d'erreur est dans la variable msg, pas d'affichage !!!!!

    Sub test()
        Dim Msg As String
        ' If an error occurs, construct an error message.
        On Error GoTo traite_erreur   ' Defer error handling.
        
        Err.Raise (1004)  ' Genere l'erreur 1004 qui peut etre un fichier corrompu........
        ' Check for error, then show message.
        x = Date
        Exit Sub
    
    traite_erreur:
        If Err.Number > 0 Then
            Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & vbNewLine & Err.Description
            Err.Clear
        End If
    End Sub
    1
  2. ExcelGuru1 Messages postés 21 Statut Membre 1
     
    Bonjour,

    Merci beaucoup pour ta réponse !

    Le problème est que j'essayes d'executer ce code en s'inspirant du tien mais rien ne s'affiche sur "A1".

    Sub test()
    Dim Msg As String
    ' If an error occurs, construct an error message.
    On Error GoTo traite_erreur ' Defer error handling.

    Err.Raise (1004) ' Genere l'erreur 1004 qui peut etre un fichier corrompu........
    ' Check for error, then show message.
    x = Date
    Exit Sub

    traite_erreur:
    If Err.Number > 0 Then
    Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & vbNewLine & Err.Description
    Err.Clear
    End If

    ThisWorkbook.Sheets(1).Range("A1").Value = Msg

    End Sub


    Comment faire afficher le contenu de Msg dans "A1" ?
    Moi ca ne marche pas avec ce code là :/

    Help svppp !
    1
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Preferable de mettre ecriture avant la raz de l'erreur........
      Sub test()
          Dim Msg As String
          ' If an error occurs, construct an error message.
          On Error GoTo traite_erreur   ' Defer error handling.
          
          Err.Raise (1004)  ' Genere l'erreur 1004 qui peut etre un fichier corrompu........
          ' Check for error, then show message.
          x = Date
          Exit Sub
      
      traite_erreur:
          If Err.Number > 0 Then
              Msg = "Error # " & Str(Err.Number) & " was generated by " & Err.Source & vbNewLine & Err.Description
             ThisWorkbook.Sheets(1).Range("A1").Value = Msg
              Err.Clear
          End If
      End Sub
      0
      1. ExcelGuru1 Messages postés 21 Statut Membre 1 > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci beaucoup f894009 !

        Actuellement j'ai bien le message "Error # 1004..." qui s'affiche... Mais quand je tente d'ouvrir un fichier qui normalement est corrompu, la macro me renvois toujours le même message "Error # 1004". Même cas pour fichier avec mot de passe, ou fichier avec Lien externe introuvable... toujours erreur 1004
        Je n'arrive pas à récupérer le message d'erreur de l'ouverture du fichier :/

        Est ce qu'il y'aurait une solution svp ?
        0
      2. pierre > ExcelGuru1 Messages postés 21 Statut Membre
         
         
        Bonsoir ExcelGuru1,

        Pour la dernière partie du code VBA, comme il n'y a pas d'instruction
        entre le End If et le End Sub, tu peux l'écrire ainsi :

        
        traite_erreur:
            If Err.Number = 0 Then Exit Sub
            Msg = "Error # " & Str(Err.Number) & " was generated by " &
        Err.Source & vbNewLine & Err.Description
            ThisWorkbook.Worksheets(1).[A1] = Msg: Err.Clear
        End Sub
        
        

        Je n'ai pas vérifié quel est le n° d'erreur de tes autres erreurs, mais si c'est des
        nombres négatifs, alors cette fois, les messages correspondants s'afficheront
        en A1 aussi.  ;)
         
        0
  3. ExcelGuru1 Messages postés 21 Statut Membre 1
     
    Bonjour f894009

    Merci pour ta réponse.
    Merci encore, j'ai vu ton lien qui traite parfaitement de sujet. Maintenant j'essayes d'adapter ce bout de code trouvé : Mon but c'est d'essayer d'ouvrir un fichier excel corrompu, désactiver d'erreur d'ouverture, et récupérer les infos de l'erreur dans des variable Sting.

    Pourriez-vous m'aider svp ?

    Code VBA trouvé sur lien de f894009 :

    Dim Msg As String
    ' If an error occurs, construct an error message.
    On Error Resume Next ' Defer error handling.
    Err.Clear()
    Err.Raise(6) ' Generate an "Overflow" error.
    ' Check for error, then show message.
    If Err.Number <> 0 Then
    Msg = "Error # " & Str(Err.Number) & " was generated by " _
    & Err.Source & ControlChars.CrLf & Err.Description
    MsgBox(Msg, MsgBoxStyle.Information, "Error")
    End If


    Si quelqu'un peut t'il bien m'aider svp à ajouter trois instructions :
    1. Ouverture de fichier corrompu Excel
    2. Ne pas afficher le message d'erreur d'ouverture.
    3. Récupérer les infos de l'erreur (N°, Description, autres si possible...)µ

    Merci beaucoup d'avance, je désespère et je n'arrive plus à me concentrer.
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. ExcelGuru1 Messages postés 21 Statut Membre 1
     
    Merci beaucoup chers amis !
    Voici la solution adopté :

    Sub test()
    Dim Msg As String
    ' If an error occurs, construct an error message.
    On Error GoTo traite_erreur ' Defer error handling.

    Err.Raise (1004) ' Genere l'erreur 1004 qui peut etre un fichier corrompu........
    ' Check for error, then show message.
    x = Date
    Exit Sub

    traite_erreur:
    If Err.Number = 0 Then Exit Sub
    Msg = "Error # " & Str(Err.Number) & " was generated by " &
    Err.Source & vbNewLine & Err.Description
    ThisWorkbook.Worksheets(1).[A1] = Msg: Err.Clear
    End Sub


    NB : cela permet de relever les erreurs au niveau vba. Les alertes et les warnings ne sont pas pris en compte par cette méthode.
    De ce fait Je prefère ne pas cloturer ce topic dans l'attente de la théorie du tout. Lecture message Erreur (fait), reste les Alertes.

    Merci a vous tous !
    0