Dupliquer le dernier enregistrement
Comment reprendre automatiquement certains champs du dernier enregistrement saisi ?
L’approche manuelle
Avant de lancer des usines Ă gaz đ souvenez-vous, lorsque vous ĂȘtes sur un champ de saisie, que la combinaison de touches Ctrl
+ "
(guillemets) reprend la valeur du mĂȘme champ, pour le dernier enregistrement saisi.
Ăa fonctionne au niveau des tables, des requĂȘtes et des formulaires. Sur tous les Ă©crans oĂč vous pouvez faire de la saisie, en rĂ©sumĂ© !
L’approche automatique
On peut automatiser tout ça, pour les cas oĂč vous devez dupliquer plusieurs champs en une fois. Il y a plusieurs façons de faire, en voici une qui se veut rĂ©utilisable sur diffĂ©rents formulaires.
Commencez par recopier ce bloc de code dans un module standard de votre base de données :
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 30 31 32 33 34 35 36 |
' --- ' DUPLIQUER UN ENREGISTREMENT ' --- ' Sub DupliquerEnregistrement( _ frm As Access.Form, _ avarChamps As Variant, _ Optional ByVal blnFin As Boolean = True) ' Quelques variables... Dim rst As DAO.Recordset Dim varChamp As Variant ' Source de données du formulaire On Error Resume Next Set rst = frm.RecordsetClone ' Se positionner en début ou en fin de table If blnFin Then rst.MoveLast Else rst.MoveFirst End If ' Transférer les données If rst.EOF Then MsgBox "Aucune donnée à dupliquer !", vbInformation Else For Each varChamp In avarChamps frm(varChamp) = rst(varChamp) Next End If ' Libérer les ressources Set rst = Nothing End Sub |
Cette procédure reçoit 3 arguments, dont le dernier est facultatif :
- L’objet Formulaire concernĂ© par la duplication d’enregistrement.
- La liste des champs Ă dupliquer. En effet, il n’est gĂ©nĂ©ralement pas nĂ©cessaire de dupliquer un enregistrement entier (ne serait-ce que la clef primaire). Et d’ailleurs, dupliquer un enregistrement entier est gĂ©nĂ©ralement une mauvaise pratique dans une base de donnĂ©es.
- Une valeur booléenne qui vaut
True
si on doit dupliquer le dernier enregistrement (c’est le cas par dĂ©faut) ouFalse
s’il faut dupliquer le premier enregistrement de la table (au cas oĂč !).
Mise en place
Maintenant que le bloc Sub / End Sub
est en place dans votre base, vous pouvez l’utiliser sur diffĂ©rents formulaires. Imaginez un formulaire avec des champs Nom, PrĂ©nom, Email, Adresse, Code postal, Ville, etc. Voici une application sur ce formulaire :
- Créez un bouton sur ce formulaire, et donnez-lui un nom (dans mon cas :
btnValeursPrecedentes
; oui, je sais, c’est long ! :)). - Faites apparaĂźtre le code VBA de l’Ă©vĂ©nement
Sur clic
du bouton, et modifiez-le comme ci-dessous. Remplacez bien sûr les noms de champs par vos champs réels, dans la variableavarChamps
.
1 2 3 4 5 6 7 8 9 |
Private Sub btnValeursPrecedentes_Click() Dim avarChamps As Variant ' La liste des champs à dupliquer avarChamps = Array("Nom", "Prénom") ' On appelle la procédure de copie DupliquerEnregistrement Me, avarChamps End Sub |
Passez en mode Formulaire, sur un enregistrement vide, cliquez sur le bouton, et dites « Ooooh ! » đ
Si vous souhaitez dupliquer les champs du premier enregistrement de table (au lieu du dernier par défaut), remplacez la ligne de copie par :
1 |
DupliquerEnregistrement Me, avarChamps, False |
Le code VBA suppose que votre formulaire est un formulaire dĂ©pendant (donc liĂ© Ă une table ou requĂȘte), et que les champs du formulaire ont le mĂȘme nom que les champs de la table associĂ©e.
C’est le cas presque tout le temps, notamment si vous avez construit votre formulaire via l’Assistant Access.
Bonjour.
Dans la jungle des réponses à la recherche « Dupliquer un enregistrement », votre solution est relativement simple. Merci !
Mais serait-il possible de l’adapter pour qu’elle duplique, non pas les valeurs du dernier enregistrement, mais celle de l’enregistrement en cours ? Et, cerise sur le gĂąteau, que avarChamps soit par dĂ©faut tous les champs de l’enregistrement ?
Merci
C’est effectivement possible, il faut adapter un peu le code.
Je note l’idĂ©e, je posterai un article complĂ©mentaire dĂšs que possible.
Bonjour HĂ©rve , Je vous remercie tout d’abord pour ce site.
En faite , je voudrais dupliquer un enregistrement a partir de son ID , pas forcement le premier ou le dernier ? cela est-il possible ?
Je vous remercie
C’est possible effectivement (il faut par contre modifier sensiblement le code de l’article).
Je vais prĂ©parer un nouvel article dĂšs que possible sur le sujet, ça a l’air de rĂ©pondre Ă une demande rĂ©guliĂšre. đ
sabsite > Quel est le scénario précis ?
Bonjours,
Comment puis-je dupliquer un enregistrement dans un nouvel enregistrement
Cordialement