IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Rapport d'erreur VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut Rapport d'erreur VBA
    Bonjour à tous,

    J'ai créé un programme en Vba destiné à être utilisé par des personnes qui seront amenées à être expatriées, je le suis moi-même.
    Existe-t-il la possibilité de générer un rapport d'erreur qui puisse être envoyé par mail lorsque la macro "plante" du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    On error go to
    Code pour impression d'écran ou pour aller chercher un rapport
    Cette fonction me permettrait de pouvoir dépanner mes collègues à distance.

    Je sais comment réaliser un mail depuis Excel en Vba, mais pour générer ou rechercher un rapport d'erreur là je sèche.
    Merci pour votre aide et vos conseil
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  2. #2
    Membre éclairé
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Points : 684
    Points
    684
    Par défaut
    Bonjour,

    Je vous propose un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
    On Error GoTo plantage
     
    Sheets("Liste").Select 'si la feuille liste n'existe pas alors erreur dans ce cas le message "erreur" apparait sinon le message "ok" apparait
    MsgBox "ok"
    Exit Sub
    plantage: MsgBox "erreur"
     
    End Sub
    Merci de cliquer sur pour chaque message vous ayant aidé
    puis sur pour clore cette discussion …

    C'est en récoltant les cailloux qu'on te jette que tu construiras ta future estrade...

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce n'est pas si simple que cela, il y a beaucoup de choses à mettre en place dans chaque procédure, etc...

    Voici un aperçu de ce qu'il est possible de faire sous Access, et adaptable à Excel car la gestion des erreurs est semblable: http://warin.developpez.com/access/erreur/tutoriel1/

    Philippe

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    dans ta question, il y a plusieurs questions!

    d'abord, ta macro plante pour des raisons environnemental (pas d'accès réseau!...) , ou des bug de programmation non évalués dès le début?

    il y à t'il des bug pénalisant interdisant la continuité de la macro ou la macro peut elle continué? en d'autre terme y a t il des niveaux d’incidence (minime, moyen,majeur)?

    ce qui va influé sur la quantité d'information à retourné dans ton Mail. il serait dommage d’arrêté le traitement même pour une dizaine de bug ci ceux-ci non aucune incidence sur le résultat du traitement.
    en revanche rendre un traitement biscornue!!!!!

    je te suggère de traiter les message dans une sub indépendante pour ne pas réécrire du code inutilement redondant ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sub MessageErreur( Err.description , Module,Methode)

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Brut de fonderie, je dirais que c'est possible, avec par exemple un trame du style (non testée):

    1. Vous déclarez une Variable publique de log des erreurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public ErrLog As String
    2. Vous récupérez pour chaque procédure la description des erreurs si il y en a (test sur Err.Number) et leur numéro, du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Err.Number <> 0 Then
       ErrLog = ErrLog & Err.Number & vbTab & Err.Description & vbTab & ProcName  & vbCrlf 'Nom de la procédure appelelante
       Err.Clear 'RAZ des erreurs
    End If
    3. En sortie du workbook (event), par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sub Workbook_BeforeClose
    Vous testez si ErrLog est vide, sinon, vous envoyez par email du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     If ErrLog <> vbNullString Then
       ErrLog = "Report of errors by " & Application.UserName & vbClrf & String(40, "=") & vbCrlf & ErrLog
       Call EmailErr(ErrLog, ....)
       ErrLog = vbNullString
    End If
    avec par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Sub EmailErr(ErrLog As String)
        Subname = "EmailErr"
     
        Dim Msganswer As String, Msgprompt As String
        Dim Mailsubj As String, Msbd As String, Emailadd As Variant, tolist As String, cclist As String
        Dim Sentwbkfullname       As String, Extrwbkfullname As String, Hlinkaddr As String
        Dim oOApp, oOMail, olMailItem
     
        Mailsubj = "Error report: " & ThisWorkbook.Name & " (" & Format(DateValue(Now()), "dd-mmm-yy") & ")"
     
    'Building Message head
        Hlinkaddr = ThisWorkbook.FullNameURLEncoded
     
        Msbd = "<p>" & ErrLog & </a> </p>"
        Msbd = Msbd & " <p>From master file: " & Wbk.Name & "</b> </p>"
        Msbd = Msbd & "<p> Extract File: <a href=" & "'" & Hlinkaddr & "'> " & " " & ThisWorkbook.Name & "</a> </p>"
        Msbd = Msbd & "<p> Directory   : <a href=" & "'" & ThisWorkbook.Path & "'> " & " " & ThisWorkbook.Path & "</a> </p>"
        Msbd = Msbd & "<p><tr>"
        Msbd = Msbd & " (Automatic email notification)"
     
    'Sending Mail
        Set oOApp = CreateObject("Outlook.Application")
        Set oOMail = oOApp.CreateItem(olMailItem)
     
        With oOMail
            .To = tolist
            .CC = cclist
            .Subject = Mailsubj
            .HTMLBody = Msbd
    '        .Attachments.Add Wbk.FullName
    '        .Save
            .Display
        End With
     
    End Sub
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  6. #6
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Robert,
    Il peut y avoir des bugs liés à l'environnement ( version d'Excel par exemple), cellules effacées par mégarde (pour cela j'ai tenté de protéger mes feuilles mais certaines données ne peuvent pas être protégées sous peine de plantage de Vba)
    To modify a protected cell or chart, first remove protection using the Unprotect Sheet command
    Il peut y avoir également des erreurs dues à des conditions spécifiques non testées lors de l'écriture du code, j'en ai repéré quelques unes que j'ai corrigés ou prise en compte mais je ne suis pas infaillible.
    Si il y a des bug, effectivement le traitement ne pourra pas se poursuivre, d'où la nécessité pour moi de pouvoir intervenir rapidement.
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  7. #7
    Invité
    Invité(e)
    Par défaut
    je préconiserais donc le traitement de vinc_bilb

  8. #8
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Vincent et Robert,
    Le code de Vincent n'est pas assez explicite pour moi, en tous cas trop compliqué pour mon niveau ( je ne sais pas ,par exemple, a quoi correspondent les "<p><tr>" ou "<p> Directory : <a)
    En cherchant un peu j'ai trouvé cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     On Error GoTo out
    out:
        MsgBox Err.Number
        MsgBox Err.Description
    Effectivement les boites de dialogues m'affichent bien le numéro de l'erreur et la description
    Je voudrais que dans le mail généré le corps du message m'indique le n° et la description, j'ai donc écrit cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=Erreur N°   & Err.Number .%0ADescription : & Err.Description %0ACordialement%0AApplication.UserName "
    Mais je me retrouve avec un corps de message uniquement composé de Erreur N°.
    Les variables Err.Number, Err.Description et Application.UserName n'ont pas été prise en compte.
    Il doit s'agir d'une erreur de syntaxe ou autre.
    Avez vous une idée?
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu envois un mail par une url (string) c'est du texte.

    Il faut concaténer du text et err.desciption
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    url="vou troverz..." & err.descipton & " numéro: " & err.numer
    je t'invite a joindre la sub ou la function concerné pour touve le bug c'est mieux!

    Voir un variable que tu incrémente 1,2,3... Pour retouver un bloc dènstructons.

    Affine le nagnostique un imprime ecran du débuger ne dit pas toujours grand chaos!

  10. #10
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Le code de Vincent n'est pas assez explicite pour moi, en tous cas trop compliqué pour mon niveau ( je ne sais pas ,par exemple, a quoi correspondent les "<p><tr>" ou "<p> Directory : <a)
    => balises HTML pour écrire le corps du message, mais ce n'est pas fondamental ici .....

    Les variables Err.Number, Err.Description et Application.UserName n'ont pas été prise en compte.
    En ce qui concerne les erreurs, ce sont des variables internes à VBA, et, si vous ne les stockez pas dans une variable, leur valeurs sont écrasées par chaque nouvelle procédure ou par une instruction du type
    Donc si votre procédure d'email n'a pas d'erreur, Err.Number = 0 et Err.Description = "" ....


    Pour faire un essai, je vous suggère donc, en entête d'un module, de déclarer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public ErrLog As String
    puis de forcer une erreur dans une procédureet de voir si vous la récupérez bien, style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Debug.print  range("A0").Value 'Force une erreur
    If Err.Number <> 0 Then
       ErrLog = ErrLog & Err.Number & vbTab & Err.Description & vbCrlf 
     
    ' Votre code pour le mail à insérer
    ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=ErrLog
       Err.Clear 'RAZ des erreurs
    End If
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par vinc_bilb Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Debug.print  range("A0").Value 'Force une erreur
    If Err.Number <> 0 Then
       ErrLog = ErrLog & Err.Number & vbTab & Err.Description & vbCrlf 
    
    ' Votre code pour le mail à insérer
    ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=ErrLog'Refermes le string =" & ErrLog
       Err.Clear 'RAZ des erreurs
    End If
    Code Simulation d'erreur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub testErr()
    Const txtSub = " Sub testErr() "
    Dim txtBloc As String
    On Error GoTo Er
    'Bloc 1
    txtBloc = " Bloc 1 "
    Err.Raise 1664, "My App", "Erreur de choucroute"
     
    'Raitement Bloc 1....
     
     
    'Bloc 2
    txtBloc = " Bloc 2 "
    Err.Raise 1664, "My App", "Erreur de choucroute"
    Exit Sub
    Er:
       ErrLog = ErrLog & "ERR N° " & Err.Number & " " & Err.Description & " " & txtSub & txtBloc & vbCrLf
    ' Votre code pour le mail à insérer
    ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(ErrLog, " ", "%20")
     Err.Clear
     Resume Next
    End Sub
    Dernière modification par Invité ; 27/11/2014 à 13h06.

  12. #12
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour Robert,
    Merci c'et ce que je cherchais et cela fonctionne parfaitement.
    Voici ce que j'ai écrit sur la base des éléments que tu m'a donné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub test_email()
    Dim x, y
    Dim MonChoix As Worksheet
    Dim Choucroute As Range
    Set MonChoix = ThisWorkbook.Sheets("Feuil1")
    Set Choucroute = MonChoix.Range("A1")
    On Error GoTo out
    If Choucroute = "Bordeaux" Then
        x = 1 / y
        ElseIf Choucroute = "1664" Then
        MsgBox "Bon Choix"
    End If
        Exit Sub
    out:
      ErrLog = ErrLog & "Erreur N° : " & Err.Number & "%0A" & "Description : " & Err.Description & "%0A" & "Sub TestErr Ligne 3" & vbCrLf
     
     
       ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(ErrLog, " ", "%20")
       Err.Clear 'RAZ des erreurs
       ErrLog = "" 'On force la valeur de ErrLog à vide sinon lors de la procédure suivante le texte du mail est répété
    End Sub
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  13. #13
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Super,

    Après, à vous de voir si vous voulez un email par erreur (avec ce type d'approche), ou un email par session, auquel cas, il faut que vous stockiez les éventuels messages d'erreur (bien évidemment, si vous avez une gestion des erreurs, sinon, tout sera considéré comme 'fatal')
    Bonne journée, sans trop d'erreur
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  14. #14
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Pour corser le tout , un bon fromage ... avec un bon bordeaux ou un riesling

    Je n'ai pas essayé mais est-ce que cette idée pourrait fonctionner?
    Je créé une procédure dans laquelle j'entre mon code qui génère le mail précédé de mail:
    En tete de chacune de mes procédures, j'en ai une quinzaine dans ma macro, j'entre
    De cette façon quelle que soit la procédure dans laquelle se produit l'erreur je reste informé, mais dans ce cas là il me faudrait le nom de la procédure dans le corps du mail...
    A votre avis?
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  15. #15
    Invité
    Invité(e)
    Par défaut
    il est difficile de relier l'erreur au code dynamiquement c'est pour cela que je préconises une constante au début de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Const txtSub = " Sub testErr() "
    pur situer l'erreur puis un variable de bloc d' instruction! ça ne dit pas précisément ou est l'erreur mais ça la situe dans le code apprès le commentaire du bloc traité et avant le bloc suivant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Bloc 1
    txtBloc = " Bloc 1 "

  16. #16
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Pas tel quel sauf erreur de ma part....
    Goto Label donc Mail est un label et pas une procédure

    Par contre, ceci (non testé) devrait pouvoir le faire (?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Sub Titi
    (....)
     
    On Error goto ErrMail
     
    ErrMail:
    If Err.Number <> 0 Then
     ErrLog = ErrLog & "Erreur N° : " & Err.Number & "%0A" & "Description : " & Err.Description & "%0A" & "Sub TestErr Ligne 3" & vbCrLf
     Call SendErrMail(ErrLog)
     Err.Clear
    End If
    End Sub
     
    Sub SendErrMail(Errmsg As String)
      ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(Errmsg , " ", "%20")
    End Sub
     
    Su
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  17. #17
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Titi
    (....)
     
    On Error goto ErrMail
    exit sub  ' on quite la sub avant le traitement de l'erreur!
    ErrMail:
    'pas besoin de testé si on passe là c'est qu'il y a une erreur
    'If Err.Number <> 0 Then
     ErrLog = ErrLog & "Erreur N° : " & Err.Number & "%0A" & "Description : " & Err.Description & "%0A" & "Sub TestErr Ligne 3" & vbCrLf
     Call SendErrMail(ErrLog)
     Err.Clear
    'End If
    End Sub
     
    Sub SendErrMail(Errmsg As String)
      ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(Errmsg , " ", "%20")
    End Sub
     
    Sub

  18. #18
    Invité
    Invité(e)
    Par défaut
    dans le même esprit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Public txtSub As String
    Public txtBloc As String
     
    Sub ProgrammePrincipale()
    On Error GoTo Er
    Coco
    Lassalien
    Constructeur
    Exit Sub
    Er:
       ErrLog = "Application " & Err.Source & " ERR N° " & Err.Number & " Description " & Err.Description & " " & txtSub & txtBloc & vbCrLf
    ' Votre code pour le mail à insérer
    ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(ErrLog, " ", "%20")
     Err.Clear
     Resume Next
    End Sub
    Sub Coco()
    txtSub = "Sub Coco()"
    'Bloc 1
    txtBloc = " Bloc 1 "
    Err.Raise 5, "Chanel.xls", "Je ne peux plus te sentir!"
    End Sub
    Sub Lassalien()
    txtSub = " Sub Lassalien() "
    'Bloc 1
    txtBloc = " Bloc 1 "
    Err.Raise 1664, "Léon de Brx.xls", "Erreur de choucroute!"
    'Raitement Bloc 1....
    'Bloc 2
    txtBloc = " Bloc 2 "
    End Sub
    Sub Constructeur()
    txtSub = " Sub Constructeur() "
    'Bloc 1
    txtBloc = " Bloc 1 "
    Err.Raise 205, "Lion.xls", "Tu vas les rentrer vite fait tes griffes !"
    'Raitement Bloc 1....
    'Bloc 2
    txtBloc = " Bloc 2 "
     
    End Sub

  19. #19
    Membre éprouvé
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Points : 1 124
    Points
    1 124
    Par défaut
    Bonjour à tous,
    J'ai parcouru hier le forum et l'un des posts de SilkyRoad, j'ai trouvé une propriété intéressante de l'objet Err c'est la propriété Erl() qui donne, à condition que les lignes du codes soient numérotées, le numéro de la ligne où est apparue l'erreur.

    Nom : Mail Rapport d'Erreur.png
Affichages : 881
Taille : 9,2 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    out:
    14  ErrLog = ErrLog & "Erreur N° : " & Err.Number & "%0A" & "Description : " & Err.Description & "%0A" & "Ligne N° : " & Erl() & "%0A" & "Date : " & Date & "%0A" & "Heure : " & Time
    15
    16
    17   ActiveWorkbook.FollowHyperlink "mailto:xyz@abc.com?cc=tuv@abc.com&subject=Rapport d'Erreurs&body=" & Replace(ErrLog, " ", "%20")
    18   Err.Clear 'RAZ des erreurs
    19   ErrLog = ""
    Pas mal, mais pas totalement, en effet lorsque j'ai numéroté mon code (copier/coller de tous mes codes et traitement dans Excel), certaines lignes n'ont pas accepté cette numérotation (elles sont passées en rouge)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Key:=Range("D:D"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
    data2.Sort.SortFields.Add _
    Key:=Range("C:C"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
    Comment contourner ce problème ?

    En essayant de placer le traitement de l'erreur dans une procédure afin de pouvoir l'appeler de n'importe quelle autre , une erreur s'est produite, l'aide Vba indique
    Il est fait référence (notamment dans une instruction GoTo) à une étiquette de ligne ou un numéro de ligne qui ne figure pas au sein de la portée de la référence.
    L'étiquette doit apparaître au sein de la procédure qui contient la référence. Les étiquettes de ligne ne sont visibles que dans leurs propres procédures.
    Une idée pour générer ce rapport pour n'importe quelle procédure?
    Merci pour votre aide
    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  20. #20
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    ça progresse!
    Une idée pour générer ce rapport pour n'importe quelle procédure?
    => et bien non, à part celle déjà indiquée, consistant à avoir une gestion d'erreur dans TOUTES les procédures susceptibles de générer une erreur
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/06/2006, 16h39
  2. erreur VBA dans un recordset
    Par rapace dans le forum Access
    Réponses: 4
    Dernier message: 12/10/2005, 15h52
  3. Question Basique Gestion Erreur VBA ...
    Par Le_Phasme dans le forum Access
    Réponses: 2
    Dernier message: 11/10/2005, 13h42
  4. Rapport d'erreurs Windows
    Par SteelBox dans le forum Windows
    Réponses: 12
    Dernier message: 22/08/2005, 17h34
  5. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo