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

VBA Access Discussion :

Gestion d'erreur dans une procédure


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Points : 155
    Points
    155
    Par défaut Gestion d'erreur dans une procédure
    Bonjour à tous,

    Je travaille avec Access 2003 developer

    Mon problème est le suivant :
    J'ai une procédure (Sub) avec gestion d'erreur
    Cette gestion fonctionne bien mais le programme exécute les instructions qui se trouvent après la procédure.

    Existe-t-il une commande qu'on peut intégrer dans une procédure de façon qu'une erreur dans cette procédure provoque l'annulation des instructions qui se trouve après la commande (call Nom_Procédure)

    Si quelqu'un à une idée !
    Merci

    willy

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Pourrais-tu nous mettre le code ?

    Starec

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 92
    Points : 98
    Points
    98
    Par défaut
    Bonjour

    Tu créé une étiquette "LaSuiteDuCode:" (pas oublier les ":"), là où ça doit reprendre. Puis dans ton gestionnaire d'erreur tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (...)
    Resume LaSuiteDuCode
    Rappel (j'ai souvent vue cette erreur) : Pas besoin d'utiliser err.Clear quand on utilise Resume.


    a+
    Damran

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Points : 155
    Points
    155
    Par défaut Complément
    Voici mon code

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
     
    Public Sub Initialise_T_RAE_Glb(Combo_Inspecteur As ComboBox, Combo_Brigade As ComboBox)
    Dim Sql_T_RAE As String
     
    On Error GoTo Err_Initialise_T_RAE_Glb
     
    ' Désactive les messages de confirmation
    DoCmd.SetWarnings False
     
    If IsNull(Combo_Brigade) = True Then Error 10
     
    If Combo_Inspecteur.ListIndex <> -1 Then
     
        'Remplissage de la table T_RAE
        'Avec restriction sur inspecteur sélectionné
        Sql_T_RAE = "INSERT INTO T_RAE "
        Sql_T_RAE = Sql_T_RAE & "SELECT T_RAE_IP.* "
        Sql_T_RAE = Sql_T_RAE & "FROM T_RAE_IP "
        Sql_T_RAE = Sql_T_RAE & "where T_RAE_IP.Nom = '" & Combo_Inspecteur.Value & "'"
     
     
        DoCmd.RunSQL "delete * from T_RAE"
        DoCmd.RunSQL Sql_T_RAE
     
    Else
     
        If Combo_Brigade.ListIndex <> -1 Then
     
            ' Restriction sur la brigade
            '*******************
            Sql_T_RAE = "INSERT INTO T_RAE "
            Sql_T_RAE = Sql_T_RAE & "SELECT T_RAE_IP.* "
            Sql_T_RAE = Sql_T_RAE & "FROM T_RAE_IP "
            Sql_T_RAE = Sql_T_RAE & "where T_RAE_IP.LibelleServiceVerificateur = '" & Combo_Brigade.Value & "'"
     
     
            DoCmd.RunSQL "delete * from T_RAE"
            DoCmd.RunSQL Sql_T_RAE
     
        Else
            Exit Sub
        End If
     
    End If
     
    Call Initialise_Plus8mois_Glb
     
    Exit_Initialise_T_RAE_Glb:
        ' Active les mesages de confirmation
        DoCmd.SetWarnings True
        Exit Sub
     
     
    Err_Initialise_T_RAE_Glb:
     
        Select Case err
        Case Is = 10
            MsgBox "Veuillez sélectionner une brigade !", , "Information"
            Resume Exit_Initialise_T_RAE_Glb
        Case Else
            MsgBox "Une erreur est survenue dans la procédure (Initialise_T_RAE_Glb)", , "Erreur"
            Resume Exit_Initialise_T_RAE_Glb
        End Select
     
    End Sub
    Exemple

    call Initialise_T_RAE_Glb (Combo1, Combo2)
    Suite Code
    ...
    ...


    Si erreur dans la procédure (Initialise_T_RAE_Glb) ne pas exécuter (Suite code)

    En espérant que j'ai été assez clair
    Merci

    Willy

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 92
    Points : 98
    Points
    98
    Par défaut
    Ok pardon.

    Tu peux utiliser une valeur de retour, que tu ne remplie que si la fonction s'est bien executée :

    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
     
    Function MonTraitementPrincipal()
    If not MaFonction(MyParams) = true then
       'Suite du code
    Else
      'Code si MaFonction a plantée 
    End If
    End function
     
    Function MaFonction(MyParams) as boolean
    '... (traitement qui peut planter)
    MaFonction = true 'Valeur de retour, remplie avant exit_func
    exit_func:
    exit function
    err_func:
    Resume exit_func
    End Function
    En espérant ne pas avoir compris de travers cette fois ;-)

    a+
    Damran

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    423
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 423
    Points : 155
    Points
    155
    Par défaut Merci
    Merci,

    Je vais utiliser ta technique

    Willy

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/04/2010, 16h39
  2. Erreurs dans une procédure
    Par zekicker dans le forum Oracle
    Réponses: 9
    Dernier message: 14/01/2007, 08h14
  3. Gestion d'erreur dans les procédure
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 20/01/2006, 12h02
  4. Comment lancer une erreur dans une procédure stockée
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/05/2005, 17h06
  5. [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

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