Vous pouvez recevoir un message d’erreur lorsque vous essayez d’insérer un nouvel enregistrement dans une table qui contient un champ Numéroauto dans Access

Numéro de la base de connaissances d’origine : 884185

Symptômes

Lorsque vous essayez d’insérer un nouvel enregistrement dans une table contenant un champ Numéroauto , vous pouvez recevoir le message d’erreur suivant :

Modifications non effectuées : risque de doublons dans champs index, clé principale ou relation interdisant les doublons. Modifiez les données des champs contenant les doublons, enlevez ou redéfinissez l’index pour permettre les doublons et recommencez.

Capture d’écran du message d’erreur après l’insertion d’un nouvel enregistrement dans une table.

Remarque

La table peut ne pas avoir de relations ou d’index.

Cause

Ce problème se produit lorsque le champ Numéroauto a été correctement initialisé.

Résolution

Plusieurs méthodes peuvent résoudre ce problème.

Méthode 1 : Effectuer un compactage et une réparation

Pour compacter la base de données, procédez comme suit :

  1. Démarrez Access.

  2. Ouvrez la base de données Access.

    Remarque

    Si la boîte de dialogue Avertissement de sécurité s’affiche, cliquez sur Ouvrir.

  3. Cliquez sur l’onglet du ruban Outils de base de données, puis cliquez sur Compacter et réparer une base de données dans le groupe Outils.

    Remarque

    Les versions précédentes d’Access peuvent avoir l’option Compacter et réparer la base de données située ailleurs. Consultez la documentation de votre version spécifique d’Access pour localiser cette option.

Pour réinitialiser manuellement la valeur initiale du champ NuméroAuto , utilisez l’une des méthodes suivantes.

Méthode 2 : Utiliser une requête de définition de données

Ouvrez la base de données contenant la table (base de données principale) dans Access :

  1. Sous l’onglet Créer , cliquez sur Création de requête dans le groupe Requêtes .

  2. Dans la boîte de dialogue Afficher la table , cliquez sur Fermer.

  3. Sous l’onglet Création , cliquez sur Vue SQL dans le groupe Résultats .

  4. Tapez ce qui suit dans la fenêtre Requête1 :

    ALTER TABLE TableName ALTER COLUMN AutoNumFieldName COUNTER(iMaxID,1);
    

    Remarque

    <TableName> est un espace réservé pour le nom de la <table. AutoNumFieldName> est un espace réservé pour le nom du champ NuméroAuto . iMaxID est un espace réservé pour la valeur maximale actuelle dans le champ plus 1.

  5. Sous l’onglet Création , cliquez sur Exécuter dans le groupe Résultats .

Méthode 3 : Exécuter du code Visual Basic pour Applications

  1. Sous l’onglet Créer , cliquez sur la flèche vers le bas sous Macro, puis sur Module.

  2. Collez le code suivant dans le Rédacteur Visual Basic.

    Sub ResetAuto()
      Dim iMaxID As Long
      Dim sqlFixID As String
      iMaxID = DMax("<AutonumberFieldName>", "<TableName>") + 1
      sqlFixID = "ALTER TABLE <TableName> ALTER COLUMN <AutonumberFieldName> COUNTER(" & <iMaxID> & ",1)"
      DoCmd.RunSQL sqlFixID
    End Sub
    

    Remarque

    L’espace réservé <AutonumberFieldName> représente le nom du champ NuméroAuto. L’espace réservé <TableName> représente le nom de la table.

  3. Dans le menu Exécuter, cliquez sur Exécuter sub/UserForm.

    Remarque

    Vous devez fermer la table avant d’utiliser l’une ou l’autre méthode. Vous n’avez pas besoin d’enregistrer la requête ou le module après avoir utilisé l’une ou l’autre des méthodes

Procédures pour reproduire le problème

  1. Créer une base de données vide

  2. Créez une table nommée Table1 qui contient les deux champs suivants :

    Champ1 : Numéroauto (clé primaire) Champ2 : Texte

  3. Ajoutez les six enregistrements suivants à Table1.

    Field1 Field2
    1 A
    2 B
    3 C
    4 D
    5 E
    6 F
  4. Supprimez l’enregistrement où Field1 a la valeur 3.

  5. Sous l’onglet Créer , cliquez sur Création de requête dans le groupe Requêtes .

  6. Dans la boîte de dialogue Afficher la table , cliquez sur Fermer.

  7. Sous l’onglet Création , cliquez sur Vue SQL dans le groupe Résultats .

  8. Tapez ce qui suit dans la fenêtre Requête1 :

    INSERT INTO Table1 (Field1, Field2) SELECT 3 AS Field1, "C" AS Field2;
    
  9. Sous l’onglet Création , cliquez sur Exécuter dans le groupe Résultats .

  10. Ouvrez Table1, puis essayez d’ajouter un nouvel enregistrement. Vous recevez le message d’erreur mentionné dans la section « Symptômes ».