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 :

Gestion d'erreur globale et "sauvegarde" d'erreur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut Gestion d'erreur globale et "sauvegarde" d'erreur
    Bonjour,

    Je code une application qui sera destinée à des utilisateurs tiers, dans le cas où ils feraient bugger les macro je souhaiterais rattraper l'erreur (un truc du genre : )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    On error goto err
    ...
    err: 
    msgbox "unknown error"
    ou

    les objectifs étant les suivant:

    ne pas mettre en rade ma feuille excel: que l'utilisateur puisse continuer à travailler dessus (le code de la macro est protégé par mot de passe donc ne pas esperer que l'utilisateur résolve tout seul le programme et relance l'execution)
    enregistrer quelque part un rapport d'erreur pour pouvoir ensuite essayer de résoudre le problème.

    La difficulté est la suivante :

    j'ai 6000 lignes de codes qui gèrent une centaine d'évenements et qui utilisent une vingtaine de fonctions j'aimerais ne pas alourdir encore plus mon code en rajoutant partout des on error resume next : il y a t il moyen de faire une gestion d'erreur globale?
    Mon code est écrit dans deux modules et une feuille excel la question est donc est ce qu'on peut traiter les erreur au niveau du module
    (une feuille excel où on écrit du code pour gérer des evenement de cette feuille c'est bien un module ?)

    Le pieds serait de pouvoir en plus stocker quelquepart les caractéristiques de l'erreur pour que l'utilisateur puisse les envoyer au support.

    là par contre j'ai aucune idée de comment faire sinon écrire dans un coin de la feuille excel toutes les caractéristiques de l'erreur... si quelqu'un a une idée plus élégante tels qu'à la réouverture de la feuille on puisse voir les erreur qui se sont produites...

    Il y a quelquechose que je n'ai pas réussi à comprendre dans l'aide que j'ai trouvé :
    si une fonction appelée par une procédure provoque une erreur si cette erreur n'est pas traité au niveau de la fonction peut on la rattraper au niveau de la procédure ?
    (j'ai utilisé les termes fonctions et procédure pour plus de clarté mais je m'interroge pour toutes les combinaisons d'appels possible...)


    Merci du temps que vous consacrez à des utilisateurs comme moi

    Nemoc

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Pour les evenements je crois qu'il faut gérer les erreurs à chaque fois.
    Pour le reste un exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Main()
    On Error GoTo geserr
     
    ' Code
    secondaire ' appel d'un sub ou d'une fonction
     
     
    geserr:
    If Err.Number > 0 Then
        MsgBox "Erreur :" & Err.Number & " Description :" & Err.Description
    End If
     
    End Sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub secondaire()
    Dim toto As Integer
    toto = "aa"
    End Sub

  3. #3
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Comme le dit aalex la gestion d'erreure peut se faire uniquement dans la procédure appelante
    macro1 appelle macro11 et macro 12 qui appelle macro 121
    si tu met une gestion d'erreur dans macro 1 elle sappliquera aussi a 11,12 et 121

    Regarde la partie sur la gestion d'erreur de ce tuto
    http://bidou.developpez.com/article/VBA/

    Par contre pour les évènement ils ne sont appelé par personne donc ils doivent avoir leur propre gestion d'erreur (ou alors il y a un truc que je ne connais pas)

  4. #4
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 14
    Par défaut
    Merci pour ton lien ce document est très complet ça m'a permis de mieux comprendre la gestion d'erreur.

    Par contre une question reste en suspends : comment stocker une erreur pour pouvoir l'analyser par la suite: si l'utilisateur de mon application déclenche une erreur que mon code n'arrive pas à traiter il y a t'il moyen de sauvegarder l'objet err pour qu'il puisse me renvoyer le fichier où il y a eu l'erreur pour que j'essaye d'y remédier en analysant l'objet err (numero description source ...)

    un truc du genre (complètement fictif)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    on error goto err
    ...
    err:
    select case err.number 
     
    case 1 machin resume next
    case 2 truc goto bidule
    ...
    case else call Sauvegarde_Erreur
    qu'est ce que je pourrais mettre dans Sauvegarde_Erreur ?

  5. #5
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Tu peux envisager une variable publique dans laquelle tu stock le numéro de l'erreur et le commentaire, ainsi que la routine qui gènère l'erreur (pour le dernier je ne vois pas d'autre solution qu'une gestion a chaque sub mais il y a peut être une solution)

    Ensuite en cas d'erreur tu t'envoies un mail avec le contenu de cette variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case else call Sauvegarde_Erreur
    tavarpublique="Macro nom de la macro :" & Chr(13) & "Erreur n°: " & Err.number & Chr(13) & "Description : " & Err.Description

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    qu'est ce que je pourrais mettre dans Sauvegarde_Erreur ?
    Tu peux mettre err.number et err.description, si c'est la ta question.

    Si tu veux savoir ou sauvegarder, c'est à toi de choisir car il y a plusieurs possibilités, dans une cellule d'excel, dans une variable, dans le compte rendu d'execution (
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    debug.print "Err : " err.number " & " Description " & err.description
    ), dans un fichier texte, dans la base de registre ...


    Edit: merci Krovax, j'oubliais la variable publique

Discussions similaires

  1. [MySQL] Supprimer les erreurs de syntaxe dues aux quotes
    Par gotenks dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2006, 16h10

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