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 :

Portee du error handling [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut Portee du error handling
    Bonjour,

    Je cherche à améliorer ma compréhension de la gestion d'erreur.

    Je me suis pour cela replongé dans l'explicatif de Sylkyroad.
    http://silkyroad.developpez.com/VBA/GestionErreurs/

    Ma Question si je mets par exemple l'instruction On error resume next

    Cette instruction est-t-elle valable si j'apelle une autre procédure par call (je pense que non)
    Lorsque je reviens de mon call est ce que l'instruction redevient active ?
    idem si je lance l'exécution d'une macro dans un eautre classeur ?

    Autre question puis je collecter les erreurs rencontrées à la volée ou suis-je obligé de passer à chaque fois par
    le errorhandler, stocker la valeur d'erreur et faire un resume next.


    Merci pour infos que vous voudrez bien me donner sur ces sujets.

    Denis

  2. #2
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut Bonjour
    Cette instruction est-t-elle valable si j'apelle une autre procédure par call (je pense que non)
    tu as trouvé tout seul ---> Edit, et bien je viens de l'apprendre dans la réponse de Theze

    Lorsque je reviens de mon call est ce que l'instruction redevient active ?
    Oui car tu reviens dans ta procedure

    idem si je lance l'exécution d'une macro dans un autre classeur ?
    Cela dépendra, du classeur actif, si le 2ème classeur devient actif alors la macro du premier s'arrêtera, il faut garder le 1er classeur actif.

    Voici un début de réponse...

  3. #3
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci pour ces premiers éléments qui me confortent dans mon analyse.
    à enrichir.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Ma Question si je mets par exemple l'instruction On error resume next

    Cette instruction est-t-elle valable si j'apelle une autre procédure par call (je pense que non)
    et bien si ! Si le gestionnaire d'erreur est actif au moment de l'appel, il gére l'erreur provoquée dans la ou les procédure(s) appelée(s) aussi loin que tu descendes dans les appels. Juste un petit test :
    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
    42
    43
    44
    45
    46
     
    Sub Test()
     
        'ici, le gestionnaire va gérer l'erreur de la proc appelée
        On Error Resume Next
     
        Call MacroTest1 'gère l'erreur de la proc appelée
     
        Call MacroTest2 'gère l'erreur de la proc appelée par la proc appelée !
     
        If Err.Number <> 0 Then
     
            'affiche le type d'erreur
            MsgBox "Erreur d'exécution '" & Err.Number & " :" & vbCrLf & Err.Description
     
        End If
     
        MsgBox "Les erreurs ont été gérées par le gestionnaire de cette procédure !"
     
        'annule le gestionnaire d'erreur
        On Error GoTo 0
     
        'cet appel provoquera une erreur
        Call MacroTest3
     
    End Sub
     
    Sub MacroTest1()
     
        'une erreur a lieu car la feuille n'existe pas
        Worksheets(Worksheets.Count + 1).Select
     
    End Sub
     
    Sub MacroTest2()
     
        Call MacroTest3
     
    End Sub
     
    Sub MacroTest3()
     
        'une erreur a lieu car la feuille n'existe pas
        Worksheets(Worksheets.Count + 1).Select
     
    End Sub
    Lorsque je reviens de mon call est ce que l'instruction redevient active ?
    Aussi longtemps que tu ne l'annule pas.
    Autre question puis je collecter les erreurs rencontrées à la volée ou suis-je obligé de passer à chaque fois par
    le errorhandler, stocker la valeur d'erreur et faire un resume next
    Le "On Error Resume Next" te permet d'ignorer l'erreur si tu le désire et de passer à la ligne de code suivante. Si le gestionnaire d'erreurs se trouve dans la proc principale et que c'est une proc appelée qui génère l'erreur, tu ne saura pas où elle c'est produite. Si tu mets un gestionnaire d'erreur dans chaque proc, tu saura plus facilement où se produit l'erreur. Un autre exemple où l'erreur est gérée dans la proc appelée mais le type d'erreur est remontée à la proc appelante par l'intermédiaire d'un variable (TypeErreur) qui est passée par référence (par défaut dans VB) :
    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
     
    Sub Test()
     
        Dim TypeErreur As String
     
        Call MacroTest1(TypeErreur)
     
        If TypeErreur <> "" Then MsgBox TypeErreur
     
    End Sub
     
    Sub MacroTest1(TypeErreur As String)
     
        'ici, le gestionnaire va gérer l'erreur
        On Error Resume Next
     
        'une erreur a lieu car la feuille n'existe pas
        Worksheets(Worksheets.Count + 1).Select
     
        If Err.Number <> 0 Then TypeErreur = "Erreur d'exécution '" & Err.Number & " dans la proc 'MacroTest1' :" & vbCrLf & Err.Description
     
    End Sub
    Hervé.

  5. #5
    Membre éclairé
    Homme Profil pro
    Constructeur ossature bois
    Inscrit en
    Mars 2014
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Constructeur ossature bois
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Mars 2014
    Messages : 897
    Par défaut
    Merci Theze,

    J'ai corrigé une réponse que j'avais fourni, car je le pensais vraiment....

    MErci pour tes explications

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Mais ne t'excuse surtout pas Sebphyto, on ne peut pas tout savoir et c'est ce qui est plaisant, en apprendre tous les jours.

    Hervé.

  7. #7
    Membre éclairé
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Par défaut
    Merci Hervé pour ce cours simple précis efficace et qui servira à la comunauté.

    Après avoir testé pour comprendre, j'ai classé ton exemple dans ma bibliothèque de macros personnelles où je vais rechercher les briques de mes "pseudo-creations".

    Encore merci
    à bientôt
    Denis

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. jquery ajax crossdomain -> error handling -> delete script
    Par Willpower dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/03/2011, 20h11
  2. [10g] Error handling dans package
    Par CUCARACHA dans le forum PL/SQL
    Réponses: 5
    Dernier message: 16/09/2010, 23h12
  3. modifier error handling d'une librairie
    Par Nico820 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 26/01/2010, 15h25
  4. Error handling: Object required
    Par astur2000 dans le forum VBScript
    Réponses: 4
    Dernier message: 01/07/2008, 13h57

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