Le code de départ

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

' ---
' INSERTION D'UN ENREGISTREMENT
' ---
Sub CreerPersonne()
  Dim strSQL As String
 
  ' Création d'une personne
  strSQL = "INSERT INTO [tblPersonnes] (Nom, Prénom)" _
    & " VALUES ('Inisan', 'Hervé')"
  CurrentDb.Execute strSQL
End Sub

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 :

' ---
' EXTRACTION DU DERNIER NUMEROAUTO ATTRIBUE
' ---
Function DernierNumeroAuto() As Long
  Dim rst As DAO.Recordset
  Dim strSQL As String
 
  ' Instruction SQL pour extraire le dernier NuméroAuto attribué
  strSQL = "SELECT @@IDENTITY AS Numero;"
 
  ' Ouvrir un Recordset pour lire la valeur
  Set rst = CurrentDb.OpenRecordset(strSQL, dbOpenSnapshot)
  DernierNumeroAuto = rst("Numero")
 
  ' On ferme !
  rst.Close
  Set rst = Nothing
End Function

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 :

' ---
' INSERTION D'UN ENREGISTREMENT
' ---
Sub CreerPersonne()
  Dim strSQL As String
  Dim lngNumero As Long
 
  ' Création d'une personne
  strSQL = "INSERT INTO [tblPersonnes] (Nom, Prénom)" _
    & " VALUES ('Inisan', 'Hervé')"
  CurrentDb.Execute strSQL
 
  ' Affichage du NuméroAuto attribué
  lngNumero = DernierNumeroAuto()
  MsgBox "Dernier numéro attribué : " & lngNumero
End Sub

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.