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

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 847
    Points : 791
    Points
    791
    Billets dans le blog
    20
    Par défaut On Error Goto -1 pour capturer des erreurs dans un For Next dans le cas de fonctions appelées en cascade
    Bonjour à tous,

    J’ai des fonctions en cascade qui ont leur propre gestion d’erreur. Rien de particuliers à ça bien sûr

    Par contre je voulais savoir la portée du RESUME NEXT.

    Soit les 3 fonctions f1, f2, f3 appelées en cascade

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public function  f1 ()
       On error goto Err_
     
       Call f2()
     
    Exit_:
      Exit function
    Err_:
       Msgbox Err.number & Err.description
       Goto Exit_
    End function
    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
     
    Public function f2()  
        On error goto Err_
        Do until oTxtStream.AtEnOfFile
          With oRecset
            .Addnew
               For i=0 to Ubound(vSplitLine)
                   .fields(i) = vSplitLine(i)
               Next
             .Edit
           End With
    Loop_: 
         Loop
    Exit_:
      Exit function
    Err_:
       Select case Err.number
             Case 3260
               Call f3
               Goto Loop_
             Case Else
               Call f3
               Goto Exit_
        End select 
       Goto Exit_
    End function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     Public function f3()
       lSeq = DMAX (FIELD , TABLE, CRIT) ‘—->si pas d’enregistrement alors erreur
     
      With oRecordSet
       .Addnew
         !Field1 = iSeq
       .Edit
    Exit_:
      Exit function
    Err_:
       iSeq =0  
       Resume next ‘—-> Voir question ci-dessous
    End function
    Dans le cas de plusieurs erreurs dans la boucle For, seul une erreur est capturée et à la deuxième erreur la ligne de code exécutée est celle après la dernière ligne de code exécutée dans la première fonction appelante.

    Comment capturer toutes les erreurs?

    Merci par avance pour toute aide
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2019
    Messages : 144
    Points : 189
    Points
    189
    Par défaut
    Bonjour,

    Pourquoi ne pas éviter l'erreur ?

    La gestion d'erreur est intéressante dans le cas général, hors là tu sais qu'il y a une erreur possible.

    Pour les fonctions de domaines tu peux utiliser par exemple NZ

    Si je reprends ta ligne de la dernière fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lSeq = DMAX (FIELD , TABLE, CRIT) ‘—->si pas d’enregistrement alors erreur
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lSeq = Nz(DMAX (FIELD , TABLE, CRIT),"") ‘—->si pas d’enregistrement alors erreur
    Ensuite tu test la valeur de ta variable et si tu as une chaîne vide alors tu lances ou non le traitement suivant.

    Une autre solution sans NZ et de modifier le type de ta variable lSeq en la déclarant comme Variant.
    En effet, une fonction qui ne trouve pas de valeur renvoie Null, et le type variant accepte la valeur Null, donc en testant avec la fonction IsNull tu peux ou non continuer le traitement.

    Un de mes collègue qui m'a formé à Access m'a toujours dit qu'il fallait plutôt faire un contrôle des données que d'utiliser une gestion d'erreur.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 847
    Points : 791
    Points
    791
    Billets dans le blog
    20
    Par défaut
    Bonjour phiphi41,

    Merci pour ton aide mais ma boucle sert à lire un fichier CSV, chargé dans une table et je capture les erreur lié à l'affectation des valeurs aux champs de la table et ensuite charge les erreurs dans une table de log.

    Si tu as une autre solution, je suis preneur.
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2019
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : février 2019
    Messages : 144
    Points : 189
    Points
    189
    Par défaut
    Bonjour,

    Ah OK, tu n'avais pas expliqué le contexte, et pourtant le code que je t'ai mis peut-être utilisé, car si pas de données alors erreur.

    Il faudrait mieux expliquer le contexte, et avec des exemples.

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    janvier 2010
    Messages
    847
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2010
    Messages : 847
    Points : 791
    Points
    791
    Billets dans le blog
    20
    Par défaut
    Et la solution est :

    • D'utiliser On Error GoTo -1 dans les Case du End Select
    • De n'utiliser que ses propores étiquettes dans les Case du End Select
    • De ne surtout pas utiliser Resume Next qui positionne la reprise du code sur la ligne suivante à la dernière ligne de code exécutée de la première fonction appellante
    Mal nommer un objet, c'est ajouter au malheur de ce monde, car le mensonge est justement la grande misère humaine, c'est pourquoi la grande tâche humaine correspondante sera de ne pas servir le mensonge
    Poésie 44, n° 17 - Albert Camus

    Mes réponses vous ont aidés, un clic sur leur pouce vert
    Bonjour chez vous

+ 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, 15h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 17h51
  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, 12h20
  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, 18h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 23h41

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