Copie dans un nouvel enregistrement VBA acc

Résolu/Fermé
Adri - 26 mars 2008 à 17:02
 Adri - 27 mars 2008 à 19:14
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

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 mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
26 mars 2008 à 17:10
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
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
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 mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
27 mars 2008 à 09:53
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
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 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 13:37
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 mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
27 mars 2008 à 13:25
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 mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
27 mars 2008 à 13:48
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 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 13:54
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
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 mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
27 mars 2008 à 15:19
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 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 15:21
Donc ce n'est pas la peine de faire un 'select' mais un 'values' suffit...
0
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
J'obtiens toujours le message ne mettant VALUES... :(
0
blux Messages postés 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 15:29
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
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 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 15:40
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
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 25966 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 avril 2024 3 284
27 mars 2008 à 16:06
Copie ton code, que ça serve à tout le monde...
0
santiago69 Messages postés 477 Date d'inscription mercredi 7 mars 2001 Statut Membre Dernière intervention 12 septembre 2016 209
27 mars 2008 à 16:01
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