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

Fermé
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 - Modifié le 26 juin 2017 à 03:09
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 - 5 juil. 2017 à 15:48
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 :)
A voir également:

5 réponses

f894009 Messages postés 17225 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 17 janvier 2025 1 712
26 juin 2017 à 15:11
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
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 1
26 juin 2017 à 15:51
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
f894009 Messages postés 17225 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 17 janvier 2025 1 712
26 juin 2017 à 16:08
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
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 1 > f894009 Messages postés 17225 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 17 janvier 2025
26 juin 2017 à 16:24
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
pierre > ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017
Modifié le 26 juin 2017 à 23:52
 
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
f894009 Messages postés 17225 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 17 janvier 2025 1 712
26 juin 2017 à 08:27
0
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 1
26 juin 2017 à 14:02
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ExcelGuru1 Messages postés 15 Date d'inscription lundi 26 juin 2017 Statut Membre Dernière intervention 6 juillet 2017 1
5 juil. 2017 à 15:48
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