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 des erreurs [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 322
    Par défaut Gestion des erreurs
    Bonjour à tous.

    J'ai besoin de faire la gestion d'erreur dans un fichier. J'ai donc écrit mon code en débutant par "On error GoTo GestionErreur". Mon code fonctionne parfaitement puis arrive à la section de la gestion des erreurs.

    Je termine mon code avec :

    GestionErreur:
    Case 1004
    msgbox ...
    Exit sub

    Case Else
    msgbox...
    Exit sub
    End select

    end sub

    Pourquoi malgré le fait qu'aucune erreur ne soit survenue durant le code la section "Case else" est-elle exécuté (j'ai enlevé la gestion des erreur et je n'ai aucune erreur)?

    Merci à l'avance.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut dlight et le forum
    Un programme ne s'arrête que si tu le lui dit
    Voilà le type de sortie que j'opère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sort_Worksheet_Change:
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        Exit Sub
    Err_Worksheet_Change:
        MsgBox Err.Description, vbCritical + vbOKOnly, "Erreur n°" & Err.Number
        Resume Sort_Worksheet_Change
    End Sub
    A+

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 322
    Par défaut Gestion des erreurs
    Désolé mais je n'ai pas les connaissances suffisantes afin de bien comprendre le code de Gorfael.

    Par contre, j'ai exactement la même gestion d'erreur dans le même fichier dans une autre macro et aucun problème.

    Je me suis acheté un livre pour m'aider dans mes différents codes vba et cette gestion des erreurs sort directement de ce livre.

    Je ne comprend pas pourquoi un code est exécuté de la bonne façon dans un cas pas dans un autre...

    Merci à l'avance pour une explication qui m'aidera à voir plus claire dans ce dossier...

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut dlight et le forum
    Article 1 : Excel ne fait jamais d'erreur
    Article 2 : Excel fait toujours ce qu'on lui demande, et quelques (rares) fois ce que l'on veut.
    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
    Sub Test
    On Error goto Err_Worksheet_Change
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    'Blocage du rafraîchissement écran et des évènements
     
    '...programme
     
    'Sortie avec remise en route ----------
    Sort_Worksheet_Change:
        Application.EnableEvents = True
        Application.ScreenUpdating = True
        Exit Sub    'sortie macro
    'Gestion des erreurs --------------
    Err_Worksheet_Change:
        MsgBox Err.Description, vbCritical + vbOKOnly, "Erreur n°" & Err.Number
        'avertissement du numéro et de la description de l'erreur
        Resume Sort_Worksheet_Change
        'continuer à l'adresse de sortie
    End Sub
    J'espère que ce sera plus compréhensible.

    Pour ton code :
    Par contre, j'ai exactement la même gestion d'erreur dans le même fichier dans une autre macro et aucun problème.
    N'ayant qu'une idée du code, difficile de se prononcer. Mais si tu as exactement le même code, c'est peut-être un crash dû à des adresses similaires. J'avoue que personnellement, je ne fais pas de gestion globale des erreurs : chaque macro a sa propre gestion d'erreur (quand elle est nécessaire).
    De toute façon, tu traites tes erreurs, d'après les infos données, avec un Select Case sur Err.Number, je suppose. Si tu n'as aucune erreur (gérée par Excel), tu doit avoir un Case 0 qui ne fait rien, mais qui est là pour qu'une erreur de numéro 0 ne soit pas traité par la Case Else.

    Mais comme je le dis souvent, sans le code...
    A+

    Nota : Les bouquins c'est bien, mais... le nombre d'erreurs, parce que les macros proposées ne sont pas testées, les coquilles d'éditions, les mauvaises explications et le fait que le livre acheté n'évolue pas, me fait préférer les moyens actuels comme les forums

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    Nonjour,

    C'est en effet ton select case (où tu ne différencies que le cas d'une erreur spécifique, tous les autres - y compris le cas 0 lorsque pas d'erreur - étant alors dans le cas Else) qui ne vas pas !
    Si tu tiens à ton select case, il te faut alors :
    - soit, comme te l'indique Gorfael, prévoir le cas 0 (pas d'eerreur)
    - soit faire précéder ton select case par une condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If err then 
      select case .....
         case ...
         case ...
      end select
    end if
    - soit (ce qui me parait bien plus adapté) : ne pas traiter du tout par select case mlais par une simple expression conditionnelle, selon ce type de mécanisme (exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
      Dim resul As Integer, diviseur As Integer
      'diviseur = 0 ' ===>> erreur
      diviseur = 1 ' ===>> pas d'erreur
      On Error GoTo GestionErreur
      resul = 2 / diviseur
    GestionErreur:
      If Err Then MsgBox "dans erreur": Exit Sub
      MsgBox "pas d'erreur"
    End Sub
    En commentant tour à tour l'une ou l'autre des 2 valeurs de diviseur (l'une provoque une erreur et l'autre non), tu verras une réaction différente.
    Comme te l'a par ailleurs montré Gorfael, tu peux bien évidemment (en cas d'erreur), ajouter sa description dans la msgbox (err.description)

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 322
    Par défaut Gestion des erreurs
    Merci à vous deux pour les explications.


    Je crois bien comprendre mais comme je dois placer ce fichier en service ce mardi et qu'il me reste encore du travail, je vais donc utiliser Case 0 afin de m'en sortir et modifier mon code plus tard...


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

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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