Obtenir le dernier NuméroAuto attribué

J’exécute une instruction SQL de type INSERT pour ajouter des lignes dans une table. La clef primaire de cette table est un NuméroAuto. Comment connaître la valeur du NuméroAuto qui vient d’être inséré ?

Le code de départ

Voici par exemple un bout de code qui crée un enregistrement dans une table tblPersonnes :

La table tblPersonnes contient 3 champs : Nom, Prénom, et ID. Ce dernier est de type NuméroAuto. Comme il se calcule automatiquement, il ne figure pas dans l’instruction SQL. Mais du coup, comment peut-on récupérer ce numéro ? L’intérêt serait d’ajouter des données dans une autre table liée à la table Personnes, ou d’ouvrir un formulaire ou un état en le filtrant sur le nouveau numéro, après l’insertion…

La solution

Recopiez la fonction qui suit dans un module standard d’Access :

La fonction fait appel à @@IDENTITY, qui donne en SQL le dernier NuméroAuto calculé.

On teste !

Voici maintenant comment aménager le code du départ, pour qu’il insère une ligne dans la table Personnes, et qu’il obtienne le NuméroAuto associé juste après :

Pour tester ce bout de code, ouvrez la fenêtre de debug (CTRL + G), et tapez-y :
CreerPersonne et appuyez sur la touche [Entrée].
Vous pouvez aussi placer votre curseur dans le bloc de code VBA, et cliquer sur l’icône Exécuter Sub/UserForm.

Vous aimerez aussi...

8 réponses

  1. Mjid dit :

    Merci beaucoup pour l’idée, je suis nouveau avec access vba 2007, j’ai une application à faire durant mon stage et j’ai utilisé ce bout de code, le problème il est toujours 0 ! et j’ai une table qui a un champ NumeroAuto, déjà rempli et contient 1 pour test !
    Merci bien de vouloir m’aider

    • Hervé Inisan dit :

      Je viens de retester (Access 2013 pour info). Ça devrait fonctionner correctement (j’ai bien toujours le dernier numéro affecté).
      Est-ce que ton instruction SQL est correcte (nom de la table, noms des champs, syntaxe SQL en génral) ?
      Si elle est incorrecte, l’insertion pourrait ne pas se faire, d’où le 0.

  2. Hervé Inisan dit :

    Guillaume > Tu veux obtenir :

    • Le nombre d’enregistrements dans ta table ?
    • Le numéro (la valeur d’un champ) de la dernière ligne de table ?
    • Le dernier NuméroAuto attribué ?

    (ce sont 3 choses potentiellement différentes)

  3. Guillaume dit :

    Bonjour,

    Je cherche à compter le dernier enregistrememnt sur une table qui n’est pas liée à mon formulaire.
    j’ai essayé strSQL = « SELECT @@IDENTITY AS Numero FROM MaTable; » mais ça ne marche pas…
    Que dois-je rajouter svp?

    merci pour votre aide

  4. Hervé Inisan dit :

    kaba > Si ton bouton de recherche affiche le client à supprimer, est-ce que tu as essayé (en l’adaptant bien sûr) le bout de code que j’ai posté dans le commentaire précédent ? Il faut le placer dans le Sub / End Sub d’un bouton de commande, par exemple.

  5. kaba dit :

    Merci, pout votre reponse. Au faite, j’ai cree un formulaire enregistrant les renseigne d’un clien. Et j’ai cree un bouton recherche qui envoi un clien a travers son numero matricle mais je n’arrive pas a le supprimé à travers un bouton supprimè (code vba). Comment faire ? Merci

  6. Hervé Inisan dit :

    kaba > Quelque chose comme ça ?

    (mais ça n’a pas de rapport avec l’article du dessus ;-))

  7. kaba dit :

    Salut, je voudrais rechercher un enregistrement basé sur un formulaire et vba ensuite le supprimé

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *