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 :

Intercepter un message d'erreur inhérent à Access


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 27
    Points
    27
    Par défaut Intercepter un message d'erreur inhérent à Access
    Bonjour,
    J'ai parcouru le Forum et la FAQ dans tous les sens, et je m'en voudrai de poster ce message s'il a déjà été résolu ailleurs. En tant que nouveau sur ce site, je tiens tout d'abord à remercier tous les membres qui m'ont déjà permis de résoudre différents problèmes bien avant que je m'inscrive, à travers leurs tutos ou astuces.

    Mon souci est de ne pas réussir à intercepter une erreur levée par Access :

    "Microsoft Office Access ne peut pas ajouter tous les enregistrements de la requête Ajout.
    Microsoft Access a attribué.... 40 enregistrements n'ont pas été ajoutés à la table à la suite de violations de clé....
    Voulez vous exécuter tout de même cette requête Action ?
    Cliquez sur Oui pour ignorer la ou les erreurs et exécuter la requête.
    Oui - NON - AIDE
    La requête AJOUT est faite via RunSQL, dans un formulaire Access 2003. Pour intercepter l'erreur, j'ai déjà essayé quelque chose de similaire à ce qui est proposé dans la FAQ, à savoir "Comment personnaliser le message d'erreur d'Access lors de doublons", mais rien n'y fait.

    En fait, le problème n'est pas l'erreur : je sais ce qui cause l'erreur (l'intégrité référentielle n'est pas respectée). Mais je voudrais quand même savoir s'il est possible d'intercepter ce type d'erreur : connaitre son N° pour pouvoir la remplacer par un message plus parlant.

    D'avance merci pour vos suggestions.

    edit : J'ai déjà essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_Error(DataErr As Integer, Response As Integer)
     
            MsgBox DataErr
     
    End Sub
    Ce code fonctionne par exemple pour connaitre le N° de l'erreur d'ACCESS lors de doublon. Par contre, il ne me donne rien pour l'erreur concernant la violation de clé ci-dessus.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 265
    Points
    34 265
    Par défaut
    bonjour,
    bienvenue sur DVP
    "l'objet" erreur est Err, dont les propriétés sont (entre autres) Err.Number et Err.Description.

    Pour ton message actuel, il s'agit de clé primaire déjà existante dans ta table, d'où une impossibilité d'ajouter de nouveaux éléments sans une modification des dites clés.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Merci pour ton accueil jpcheck!

    J'avais déjà essayé d'utiliser l'objet Err, avec On Error Goto, mais sans succès.

    C'est comme si ce message d'avertissement passait à travers la détection des erreurs... Mais seulement est-il vraiment interceptable ? Est ce que ce message n'est pas plutôt lié au moteur Jet (là je tente sans trop savoir ce que je dis) ??

    Pour plus d'infos sur la façon dont je génère cette erreur : je suis sur un formulaire, et ma requête ACTION ajoute des enregistrements dans le sous formulaire lié. Comme ce formulaire et ce sous formulaire sont liés par intégrité référentielle (2 tables différentes), tant que l'enregistrement du formulaire n'est pas validé, il est impossible d'ajouter des enregistrements dans le sous formulaire. En exécutant la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunCommand acCmdSaveRecord
    avant d'exécuter la requête, le problème est réglé, mais c'est juste que j'aurai voulu savoir comment intercepter l'erreur... je me torture les méninges me direz vous

    Merci

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 265
    Points
    34 265
    Par défaut
    en l'occurence, l'exécution d'une requete ajout depuis VBA ne relève pas l'erreur des doublons, il se contente de les ignorer.
    Peut-être peux-tu faire un test en amont de l'ajout que tu souhaites faire en réalisant directement un test sur l'existence de doublons.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Salut,

    Si la requête "Ajout" dans le code ne lève pas ce genre d'erreur, je vais essayer autrement. Au lieu d'utiliser RunSQL, je passerai par OpenQuery ou quelque chose comme ça. Je vous tiendrai au courant de mes tests si ça s'avère concluant , ou même si ça marche po.

    @ +

  6. #6
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonjour,

    L'erreur 3022 est levée si on utilise DAO pour exécuter la requête.

    Exemple .
    Code vb : 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
    Sub TstErrDoublons()
    Dim db As DAO.Database, qdf As DAO.QueryDef, strSQL As String
     
    Set db = CurrentDb
    strSQL = "INSERT INTO tblCli4 ( Client ) " & _
             "SELECT TOP 3 [Code client] FROM CLients WHERE [Code client] LIKE 'D*'"
    ' Crée objet Querydef pour requête temporaire
    Set qdf = db.CreateQueryDef("", strSQL)
     
    On Error GoTo ERRH
    qdf.Execute dbFailOnError
     
    ENDSUB:
    qdf.Close
    db.Close
    Exit Sub
     
    ERRH:
    Select Case Err.Number
      ' risque de doublons dans champs index, clé principale ou relation interdisant les doublons
       Case 3022
            Stop
      ' autre erreurs
       Case Else
            MsgBox Err.Description, , "Erreur N° " & Err.Number
    End Select
     
    Resume ENDSUB
    End Sub
    A+

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 24
    Points : 27
    Points
    27
    Par défaut
    Bonjour LedZeppII,

    Grâce à ta réponse, mon problème est maintenant résolu !

    A bientôt !

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

Discussions similaires

  1. Personnaliser message d'erreur d'access
    Par Michel Hubert dans le forum Access
    Réponses: 7
    Dernier message: 11/01/2014, 18h28
  2. Message d'erreur d'Access
    Par LUCAS-28 dans le forum IHM
    Réponses: 7
    Dernier message: 17/09/2007, 22h49
  3. Message d'erreur dans Access
    Par jolemoine dans le forum VBA Access
    Réponses: 4
    Dernier message: 25/05/2007, 23h52
  4. message d'erreur dans access (clause FROM)
    Par Gabe74 dans le forum Access
    Réponses: 2
    Dernier message: 24/01/2007, 20h08
  5. comment peut on intercepter un message d'erreurs Access?
    Par atmitab3 dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/11/2005, 12h11

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