Personne ne vous a donné d'exemple de code dans la réponse, ni même cité d'exemple (les fichiers d'aide d'Access contiennent cependant des exemples). La question clé à garder à l'esprit est que dans Jet/ACE (Access ne supporte pas les transactions lui-même - cela dépend du moteur de base de données que vous utilisez pour cela), la transaction est contrôlée au niveau de l'espace de travail. Vous pouvez créer un nouvel espace de travail pour votre transaction ou en créer un nouveau. Voici un exemple de code :
On Error GoTo errHandler
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim lngInvoiceID As Long
Set wrk = DBEngine.Workspaces(0)
Set db = wrk.OpenDatabase(CurrentDb.Name)
With wrk
.BeginTrans
db.Execute "INSERT INTO tblInvoice (CustomerID) VALUES (123);", dbFailOnError
lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
db.Execute "INSERT INTO tblInvoiceDetail (InvoiceID) VALUES (" & lngInvoiceID & ")", dbFailOnError
.CommitTrans
Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
End With
exitRoutine:
If Not (db Is Nothing) Then
db.Close
Set db = Nothing
End If
Set wrk = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
wrk.Rollback
Resume exitRoutine
(code testé et fonctionnant dans Access)