Copie dans un nouvel enregistrement VBA acc

Résolu
Adri -  
 Adri -
Bonjour,

Est-il possible, à partir du click d'un checkbox, de dupliquer un enregistrement?

Cad : on est donc en train de remplir un formulaire, et on clique sur dupliquer et VBA crée un nouvel enregistrement et lui attribue les valeur de l'enregistrement en cours.


Merci pour votre aide,

Adri
A voir également:

16 réponses

Adri
 
Alros voici la solution (sorry pr le retard, petit rdv... !)


DoCmd.RunSQL "INSERT INTO Donation (TitreMr, NomMr, Prénom, TitreMme, NomMme, Gestionnaire) VALUES (""" & Titre & """, """ & Nom & """, """ & Prénom & """, """ & Titre_Mme & """, """ & Nom_Mme & """, """ & Gestionnaire & """);"


Dans la partie INSERT TO, vous devez donner le nom du champ tel qu'il est dénommé dans la table
Dans la partie VALUES, vous devez donner le nom que porte votre champ dans le formulaire.
1
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
En programmation tout est possible meme si ce n'est pas forcement evident... (jc bellamy)
Comment est ton formulaire ? L'a tu generer automatiquement ?
Je pense que le mieux pour dupliquer un enregistrement est d'utiliser une requete ajout :
Sub Dupliquer()
    DoCmd.RunSQL "INSERT INTO ... SELECT ..."
End Sub


0
Adri
 
Le formulaire n'est pas généré automatiquement.

L'utilisateur rempli un certain nombre de champs et l'idée est qu'il clique sur un bouton pour dupliquer (ce qu'il vient de remplir).

Je vais essayer ce que tu me propose ! Merci ;-)
0
Adri
 
En effet, ta solution semble bonne, mais elle copie tous les enregistrements !!! Et moi je voudrais dupliquer uniquement le document en cours !
Or, comme il sagit d'un code, je ne peut pas spécifier la valeur du champ à l'avance.

:s

ps: comme ma DB est destinée à être multi-utilisateur, il faut que ce soit vraiment l'enregistrement actuelement utilisé par l'utilisateur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
Il faut que tu ajoute une clause where.
Je ne sais pas du tout quels sont tes champs mais la syntaxe presque complete pourrais etre :

Sub Dupliquer()
    DoCmd.RunSQL "INSERT INTO matable SELECT * FROM matable WHERE id=" & id
End Sub


je suppose que ta table s'appelle matable et que l'identifiant de cette table s'appelle id.
l'id entre guillemet designe le nom du champ dans la table.
l'id en dehors des guillemets fait reference a la valeur du champ id dans le formulaire.
donc le runsql interpretera en fait un chaine du genre :
"INSERT INTO matable SELECT * FROM matable WHERE id=123"

0
Adri
 
Merci... Je pense qu'on y est presque, mais j'ai un problème car il me dit que Le nombre de valeur de la requête doit coïncider avec le nombre de champs destination. Je comprends bien le message, mais je ne vois pas où il me manque un élément... puisque j'ai 7 insert to et 7select !

Private Sub TddDBQ_Click()
DoCmd.RunSQL "INSERT INTO Donation (TitreMr,NomMr,Prénom,TitreMme,NomMme,Numéro_Custumer,Gesionnaire) SELECT Donation (TitreMr,NomMr,Prénom,TitreMme,NomMme,Numéro_Custumer,Gesionnaire)
FROM Donation
WHERE NomMr = "& NomMr And Prénom ="& Prénom"

End Sub

En fait, une fois qu'il a copié ceci, il devrait encore écrire une valeur dans un champ, car tous ne sont pas complétés. Mais chaque chose en son temps... A moins qu'on puisse ajouter une value directement?
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Salut,

on peut ajouter une value directement, mais à mon avis, le problème risque d'être autre : pour pouvoir faire le select il faut que l'enregistrement existe, or quand on est en train de saisir dans le form, le record n'est pas encore créé, donc il ne sera pas présent dans la table, donc pas récupérable via select.

Il faut, à mon avis, faire un insert into, mais avec des values en source (que tu seras allé chercher en vba) et non avec un select.
0
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
Il y a une erreur dans ton WHERE. Tu dois ecrire :
WHERE NomMr=" & NomMr & " AND Prénom=" & Prénom

qui sera interprete ainsi :
WHERE NomMr=Diez AND Prénom=Santiago

Tu peux en plus ajouter des guillemets pour gerer les cas ou il y a un espace dans le NomMr ou Prenom
WHERE NomMr=""" & NomMr & """ AND Prénom=""" & Prénom & """"

qui sera interprete ainsi :
WHERE NomMr="Diez" AND Prénom="Santiago Felipe"


0
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
Blux a probablement raison. Sa proposition donne la commande suivante :
Private Sub TddDBQ_Click()
  DoCmd.RunSQL "INSERT INTO Donation (TitreMr, NomMr, Prénom, TitreMme, NomMme, Numéro_Custumer, Gesionnaire) SELECT """ & TitreMr & """, """ & NomMr & """, """ & Prénom & """, """ & TitreMme & """, """ & NomMme & """, " & Numéro_Custumer & ", """ & Gesionnaire & """;"
End Sub 

J'ai suppose que TitreMr, NomMr, Prénom, TitreMme, NomMme, Numéro_Custumer et Gesionnaire existent tous a la fois comme champ de table et comme champ de formulaire.
J'ai suppose qu'il fallait mettre des guillemets partout sauf autour de Numéro_Custumer qui est probablement numerique.

0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Ou
INSERT INTO Donation (TitreMr, NomMr, Prénom, TitreMme, NomMme, Numéro_Custumer, Gesionnaire) VALUES (TitreMr,....)
--

A+ Blux
 "Les cons, ça ose tout.
C'est même à ça qu'on les reconnait"
0
Adri
 
Merci à tous pour votre aide !

Bon j'ai encodé toutes vos informations...

Le code donne ceci (j'ai viré le Numéro Customer pcq je devrais le renommer dans ma table pr ne pas que ca bug) et j'ai également bougé la condition WHERE, car il n'arrivait à aucun résultat (0 lignes !)! :(

DoCmd.RunSQL "INSERT INTO Donation (TitreMr, NomMr, Prénom, TitreMme, NomMme, Gestionnaire) SELECT """ & TitreMr & """, """ & NomMr & """, """ & Prénom & """, """ & TitreMme & """, """ & NomMme & """, """ & Gesitonnaire & """ FROM Donation;"


Par contre, en virant également le FROM donation, il m'indique qu'il copie 1 ligne =D

Mais dans ces cas là, j'obtiens ceci comme message.

http://img143.imageshack.us/img143/5265/erreurxa0.png

(ici il parle de 10 lignes, mais c'est pcq je n'avais pas encore bougé le FROM. En bougeant le FROM, il n'indique qu'une ligne)
0
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
parceque justement il faut que tu enleve le FROM Donation.
Comme l'evoquais Blux, les donnees ne doivent pas etre prise dans la table (on est pas encore sur qu'elles y soient) mais dans le formulaire. Donc tu dois enlever FROM Donation.
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Donc ce n'est pas la peine de faire un 'select' mais un 'values' suffit...
0
Adri
 
Oui mais même ne bougeant le FROM j'ai quand même le message. Blux avait entièrement raison comme tu le dis, maintenant il ne sélectionne qu'une seule ligne.

Mais bon il y a ce problème de validation.
0
Adri
 
J'obtiens toujours le message ne mettant VALUES... :(
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Colle-nous ta ligne de VBA...

Car il est possible qu'il faille préfixer les noms des champs avec celui du formulaire pour les récupérer.
0
Adri
 
Private Sub TddDBQ_Click()
DoCmd.RunSQL "INSERT INTO Donation (TitreMr, NomMr, Prénom, TitreMme, NomMme, Gestionnaire) VALUES (""" & TitreMr & """, """ & NomMr & """, """ & Prénom & """, """ & TitreMme & """, """ & NomMme & """, """ & Gestionnaire & """);"
End Sub
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Et puis vu que TitreMr est un champ, il faudrait passer par TitreMr.value avant et mettre le tout dans une chaine pour éviter les soucis de """"" multiples.

Ensuite, il serait intéressant d'afficher les valeurs de données, pour voir.

Mets un msgbox "#" & TitreMr & "#" & TitreMr.value & "#" avant ton docmd, pour voir si la donnée est correctement renseignée
0
Adri
 
Merci Blux !! J'ai réussi à copier !!

Je vais maintenant adapter la suite, si j'ai encore des questions, je poserai.

On va dailleurs commencer avec une question à 5 Cent : est-il possible de modifier le contenu du message qui indique qu'une ligne va être modifiée?


Encore MERCI !! :)
0
blux Messages postés 27106 Date d'inscription   Statut Modérateur Dernière intervention   3 359
 
Copie ton code, que ça serve à tout le monde...
0
santiago69 Messages postés 477 Date d'inscription   Statut Membre Dernière intervention   209
 
Non, il n'est pas possible de modifier le message par contre tu peux :
1) desactiver ce message
menu Outils, Options...
onglet Modifier/Rechercher
decoche Confirmer Requetes action
2) Creer ton propre message
If MsgBox("Etes vous sur ?", vbYesNo) = vbNo Then Exit Sub

0