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

VB 6 et antérieur Discussion :

remontée des erreurs


Sujet :

VB 6 et antérieur

  1. #1
    En attente de confirmation mail
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 12
    Points
    12
    Par défaut remontée des erreurs
    salut à tous,

    j'ai un chtit pb que je n'arrive pas à réglé et j'ai beau chercher sur le net je ne trouve pas pourquoi ça marche pas.
    J'essai simplement de remonter une erreur de la façon suivante :
    j'ai 2 modules de classe classe1 et classe2 et je fais :

    dans la classe1, j'ai une fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     sub a()
      on error goto Erreur
      set cl2 = new classe2
      call classe2.b()
     
    Erreur:
      msgBox("coucou A")
    end sub
    et dans la classe2, il y a 2 fonctions : b et c :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     sub b()
      on error goto Erreur
      call c()
     
    Erreur:
      msgBox("coucou B")
      err.raise err.number,err.source,err.description
    end sub
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     sub c()
      a=1/0
    end sub
    l'erreur de c() est récupérée dans b() et donc affiche "coucou B", j'essai alors de regénérer la meme erreur de façon à ce que a() la récupère et puisse utiliser err.number, seulement, sur le err.raise de b(), l'erreur s'affiche dans une boite de débug (style plantage) et a() ne la récupère pas.
    Est-ce que le pb vient du fait qu'il s'agit 2 classes différente? pourtant la msdn dit que err a une portée globale donc devrait etre accessible partout.

    et si je ne lève pas l'exception dans b(), au débug, le code revient dans a() mais err ne vaut rien si je la regarde dans l'espion.

    est-ce que quelqu'un saurait comment je peux récupérer l'erreur de c() dans a()?

    merci de vos réponses et désolé, je ne suis pas un expert VB

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Heu, quoique tu fasses, tes sub sortent tjs un message

    Essaye çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    sub a()
      on error goto Erreur
      set cl2 = new classe2
      call classe2.b()
     
      exit Sub
     
     
    Erreur:
      msgBox("coucou A")
    end sub

  3. #3
    En attente de confirmation mail
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    oui mais non en fait, j'ai mis des msgbox pour expliquer ce qui se passait mais dans mon code (que j'ai pas mis car bcp plus compliqué), je cherche justement à ne gérer les erreurs que dans la classe1 de façon à pouvoir utiliser des méthodes de la classe1 pour gérer ces erreurs et de façon à rendre indépendant la classe2, j'aimerai ensuite pouvoir reprendre la classe2 dans une autre appli qui aura sa propre façon de traiter les erreurs

  4. #4
    En attente de confirmation mail
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    personne ne peut m'expliquer le principe de ces err? et pourquoi ça marche pas dans ce cas?

  5. #5
    En attente de confirmation mail
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    c bon, j'ai trouvé, en fait, il faut aller dans outils->option : onglet general et cocher "arret sur les erreurs non gérés"
    ça marchait pas car il était sur "arret sur les erreurs du module" et donc ne remontait pas l'erreur en dehors du module

  6. #6
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Bon, j'ai fait tourner ton code et apres quelques correction il marche parfaitement
    Soit un projet avec un bouton de commande dans une feille, plus deux classes, Class1 et Class2

    Dans Form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Option Explicit
     
    Private Sub Command1_Click()
      Dim Test As Class1
      Set Test = New Class1
      Test.A
    End Sub
    Dans Class1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Option Explicit
     
    Sub A()
      Dim Cl2 As Class2
      On Error GoTo Erreur
      Set Cl2 = New Class2
      Call Cl2.b
      Exit Sub
    Erreur:
      MsgBox ("coucou A")
    End Sub
    Dans Class2

    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
     
    Option Explicit
     
     Sub b()
      On Error GoTo Erreur
      Call c
      Exit Sub
    Erreur:
      MsgBox ("coucou B")
      Err.Raise Err.Number, Err.Source, Err.Description
    End Sub
     Sub c()
      Dim A As Double
      A = 1 / 0
    End Sub
    Ensuite tu vas dans les Options de VB (dans les menus de la barre d'outils en haut, Outils/Options) dans l'onglet Général , modifie l'option de récupération des erreurs . tu prens "Arret surt toutes les erreurs non gérées"

    Ces trois options ne concernent que l'environnement de développement et n'influent pas sur l'exe obtenu.

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

Discussions similaires

  1. Remonté des erreurs oracle dans tMap
    Par reunoliv dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 14/04/2011, 09h16
  2. Gestion des erreurs, et remonté vers le client
    Par yoskater dans le forum JSF
    Réponses: 10
    Dernier message: 13/02/2008, 15h57
  3. Réponses: 8
    Dernier message: 18/05/2004, 10h03
  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