Insertion de ligne

Résolu/Fermé
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 - 24 sept. 2020 à 16:29
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 - 30 sept. 2020 à 10:39
Bonjour,
j'ai 1 formulaire qui me permet d'enregistrer les données du personnel d'un département de notre structure ce formulaire est basé sur une table nommé DT_personnel_MAG

un autre formulaire qui me permet d'enregistrer les données du personnel d'un autre département de notre structure ce formulaire est basé sur une table nommé DT_personnel_EL

je pouvais cumuler ces 2 données sur la même table, mais je préfère les gérer séparément pour d'autres raisons. mais il se trouve aussi parfois qu'on affecte un salarié d'un département à l'autre.

sur les formulaires principaux, j'ai mis des filtres pour faciliter les recherches,
sur les sous formulaires j'ai mis des boutons d'actions conditionnées par des codes vba que j'ai trouvé sur ce forum pour permettre de modifier et supprimer un enregistrement.

maintenant, je souhaite ajouter un autre bouton d'action sur les sous formulaire pour pouvoir affecter un salarié de la table DT_personnel_MAG à la table DT_personnel_EL.

la table DT_personnel_MAG et la table DT_personnel_EL ont les même colonnes exemple: id_agent; nom_prenom; matricule.

Configuration: Windows / Chrome 85.0.4183.121

9 réponses

RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
24 sept. 2020 à 16:38
Bonjour,

tu peux exécuter une requête pour copier du genre :
dim sql as string
 
sql = "Insert into DT_personnel_EL (id_agent, nom_prenom, matricule...) Values Select * from DT_personnel_MAG where id_agent = " & valeur & ";"


Et si besoin, ensuite supprimer l'enregistrement dans la table DT_personnel_MAG.

a+
0
Merci pour la promptitude de votre intervention, cependant, je souhaite que vous m'expliquez un peu plus en détails comment utiliser ce code. parce-que là je galère.
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
Modifié le 24 sept. 2020 à 21:58
Bonsoir,

ça dépend du comment tu souhaites "sélectionner" l'enregistrement à déplacer dans le sous-form...

Ceci déterminera le "valeur" que j'ai mis en exemple dans le code.

Ensuite, il suffira de mettre ce code sur le bouton qui permettra de copier :
dim requetesqlcopie as string
 
requetesqlcopie = "Insert into DT_personnel_EL (id_agent, nom_prenom, matricule...) Values Select * from DT_personnel_MAG where id_agent = " & valeur & ";"

docmd.runsql requetesqlcopie



et celui ci pour supprimer

dim requetesqlsupp as string
 
requetesqlsupp = "DELETE FROM DT_personnel_MAG where id_agent = " & valeur & ";"

docmd.runsql requetesqlsupp

0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
25 sept. 2020 à 11:34
Bonjour RV71
la sélection de l'enregistrement se fait en fonction du 3ème bouton du sous formulaire. voire architecture
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
25 sept. 2020 à 11:53
Quel bouton ?

Et surtout, quel code il y a t'il sur ce bouton ?

A+
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
Modifié le 25 sept. 2020 à 12:21
sur l'architecture vous avez peut être remarquez qu'il y'a 3 boutons une corbeille, un bouton modifié et le dernier que j'ai inséré pour coller le code que vous venez de me donner

Private Sub Commande60_Click()
Dim requetesqlcopie As String
 
requetesqlcopie = "Insert into DT_Personnels_MAG (Nom__Prenom, Matricule, ecole, Date_de_Naissance, Sex, Date-Embauche, Fonction_ID_FK, Qualification_ID_FK, Structure_ID_FK, Catégorie_ID_FK, Corps_ID_FK, Cadre_ID_FK, Position_Admin_ID_FK, Section_ID_FK2, Type_Contrat_ID_FK, Durée_Contrat, P_date, F_date) Values Select * from DT_Personnels_EL where Agent_id = " & Valeur & ";"
End Sub
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
25 sept. 2020 à 12:32
J'ai vu 3 bouton, mais je ne peux pas deviner à quoi ils servaient...

Là dans le code que tu as mis sur le bouton, il ne se passe rien, tu n'exécutes rien, tu affectes une chaine de caractères à une variable...

Le id_agent est où ??? Il correspond à quel champ de la table et quel controle du sous-form ??

A+
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 10:37
Bonjour RV71

après plusieurs essaies, je reviens encore vers vous.

je vous envois ci-dessous le code du bouton supprimé, peut être que cela vous permettrez de m'aider

Private Sub Commande52_Click()
On Error Resume Next
   Nom__Prenom = Me.Nom__Prenom
   If IsNull(Nom__Prenom) Then Nom__Prenom = ""
   '
   Matricule = Me.Matricule
   If IsNull(Matricule) Then Matricule = ""
   '
   Mat_Id = Me.Agent_ID
   If IsNull(Mat_Id) Then Mat_Id = 0
   '
   Cadre_ID_FK = Me.Cadre_ID_FK
   If IsNull(Cadre_ID_FK) Then Cadre_ID_FK = ""
   '
   Corps_ID_FK = Me.Corps_ID_FK
   If IsNull(Corps_ID_FK) Then Corps_ID_FK = ""
   '
   Catégorie_ID_FK = Me.Catégorie_ID_FK
   If IsNull(Catégorie_ID_FK) Then Catégorie_ID_FK = ""
   '
   Fonction_ID_FK = Me.Fonction_ID_FK
   If IsNull(Fonction_ID_FK) Then Fonction_ID_FK = ""
   '
   Structure_ID_FK = Me.Structure_ID_FK
   If IsNull(Structure_ID_FK) Then Structure_ID_FK = ""
   '
   Section_ID_FK2 = Me.Section_ID_FK2
   If IsNull(Section_ID_FK2) Then Section_ID_FK2 = ""
   '
   Message = "Souhaitez-vous supprimer l'agent " & Nom__Prenom & " (" & Trim(Str(Mat_Id)) & ") ?" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Attention, la suppression d'un agent entraîne également" & Chr(13) & Chr(10) & "la supression de tous les mouvements et historiques associés !"
   '
   reponse = MsgBox(Message, vbYesNo + vbQuestion, "Suppression Agent")
   '
Select Case reponse
   Case 6
       DoCmd.SetWarnings False
       DoCmd.RunSQL "DELETE DT_Personnels.* FROM DT_Personnels WHERE (((DT_Personnels.Agent_Id)= " & Mat_Id & "));"
       DoCmd.RefreshRecord
       DoCmd.Requery Me.Nom__Prenom
       '
       DoCmd.SetWarnings True
   End Select
   '
End Sub
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 10:41
voici celui du bouton modifié

Private Sub Commande51_Click()
 DoCmd.OpenForm "Agents_Ajout_Modif", acNormal, , "[Agent_id] = " & Me.Agent_ID, acFormEdit, acDialog
End Sub
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 10:43
tous les 2 marchent parfaitement
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 11:58
Je relis, et je vois que le nom de la table n'est plus comme annoncé au départ DT_personnel_MAG mais DT_personnels..

Pour être certain, peux tu donner le nom exact des tables ainsi que de l'ensemble de leurs champs ?
0

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

Posez votre question
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
29 sept. 2020 à 11:10
Bonjour,

Tu as uniquement à copier le code de ton bouton supprimer et le modifier uniquement au niveau de la requête finale, ce qui donnerait :
Private Sub Commande60_Click()
On Error Resume Next
   Nom__Prenom = Me.Nom__Prenom
   If IsNull(Nom__Prenom) Then Nom__Prenom = ""
   '
   Matricule = Me.Matricule
   If IsNull(Matricule) Then Matricule = ""
   '
   Mat_Id = Me.Agent_ID
   If IsNull(Mat_Id) Then Mat_Id = 0
   '
   Cadre_ID_FK = Me.Cadre_ID_FK
   If IsNull(Cadre_ID_FK) Then Cadre_ID_FK = ""
   '
   Corps_ID_FK = Me.Corps_ID_FK
   If IsNull(Corps_ID_FK) Then Corps_ID_FK = ""
   '
   Catégorie_ID_FK = Me.Catégorie_ID_FK
   If IsNull(Catégorie_ID_FK) Then Catégorie_ID_FK = ""
   '
   Fonction_ID_FK = Me.Fonction_ID_FK
   If IsNull(Fonction_ID_FK) Then Fonction_ID_FK = ""
   '
   Structure_ID_FK = Me.Structure_ID_FK
   If IsNull(Structure_ID_FK) Then Structure_ID_FK = ""
   '
   Section_ID_FK2 = Me.Section_ID_FK2
   If IsNull(Section_ID_FK2) Then Section_ID_FK2 = ""
   '
   Message = "Souhaitez-vous Déplacer l'agent " & Nom__Prenom & " (" & Trim(Str(Mat_Id)) & ") ?"
   '
   reponse = MsgBox(Message, vbYesNo + vbQuestion, "Déplacement Agent")
   '
Select Case reponse
   Case 6
dim requetesqlcopie as string
requetesqlcopie = "Insert into DT_Personnels_MAG (Nom__Prenom, Matricule, ecole, Date_de_Naissance, Sex, Date-Embauche, Fonction_ID_FK, Qualification_ID_FK, Structure_ID_FK, Catégorie_ID_FK, Corps_ID_FK, Cadre_ID_FK, Position_Admin_ID_FK, Section_ID_FK2, Type_Contrat_ID_FK, Durée_Contrat, P_date, F_date) Values Select * from DT_Personnels_EL where Agent_id = " & Me.Agent_ID & ";"
       DoCmd.SetWarnings False
       DoCmd.RunSQL requetesqlcopie 'on copie

DoCmd.RunSQL "DELETE DT_Personnels.* FROM DT_Personnels WHERE (((DT_Personnels.Agent_Id)= " & Mat_Id & "));"

       DoCmd.RefreshRecord
       DoCmd.Requery Me.Nom__Prenom
       '
       DoCmd.SetWarnings True
   End Select
   '
End Sub
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 12:58
oui effectivement j'ai modifié le nom de la table DT_Personnels_EL c'est donc DT_Personnels au lieu de DT_Personnels_EL.

DT_Personnels_MAG existe toujours

https://www.cjoint.com/c/JIDk0NW6n2k

le bouton déplacer est testé sur le formulaire qui s'ouvre par le premier onglé du formulaire principal ce formulaire est basé sur la table DT_Personnels
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020 > begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 13:02
cliquez sur rechercher pour apparaitre les quelques données que j'ai laissé
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
29 sept. 2020 à 13:26
Je regarde,
mais tes tables n'ont pas les mêmes champs, il y a un champ tranche_age en plus dans la table dt_personnels
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
Modifié le 29 sept. 2020 à 14:23
L'autre souci, est que tu as également un champ type 'pièce jointe' dans les tables, il faut donc passer en revue dans la requête l'ensemble des champs...

Edit : en fait, je crois que sql ne veut pas avec ce type de champ...
Il va falloir passer par du dao
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
29 sept. 2020 à 14:39
Donc, as-tu réellement besoin de ce champ type pièce jointe ?
Ne peux-tu pas le modifier en type texte long de sorte à avoir le chemin complet du fichier ?
Ca simplifierait grandement, et surtout, éviterait de tout modifier si un jour tu devras insérer un nouveau champ dans les tables concernées...

A te lire
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
29 sept. 2020 à 15:00
je peux bien sûr modifier le champs PJ car je n'ai rien enregistré encore dedans. Le Champs tranche d'âge en réalité c'était juste pour enregistré une situation qu'on m'a demandé si non sa peut être supprimer aussi
0
RV71 Messages postés 509 Date d'inscription mardi 14 avril 2020 Statut Membre Dernière intervention 15 avril 2024 31
Modifié le 29 sept. 2020 à 15:09
Donc si tu as exactement les même champs dans les 2 tables et sans champ type pièce jointe, le code suivant fonctionne sans problème
Private Sub Commande60_Click()
   Nom__Prenom = Me.Nom__Prenom
   If IsNull(Nom__Prenom) Then Nom__Prenom = ""
   '
   Matricule = Me.Matricule
   If IsNull(Matricule) Then Matricule = ""
   '
   Mat_Id = Me.Agent_ID
   If IsNull(Mat_Id) Then Mat_Id = 0
   '
   Cadre_ID_FK = Me.Cadre_ID_FK
   If IsNull(Cadre_ID_FK) Then Cadre_ID_FK = ""
   '
   Corps_ID_FK = Me.Corps_ID_FK
   If IsNull(Corps_ID_FK) Then Corps_ID_FK = ""
   '
   Catégorie_ID_FK = Me.Catégorie_ID_FK
   If IsNull(Catégorie_ID_FK) Then Catégorie_ID_FK = ""
   '
   Fonction_ID_FK = Me.Fonction_ID_FK
   If IsNull(Fonction_ID_FK) Then Fonction_ID_FK = ""
   '
   Structure_ID_FK = Me.Structure_ID_FK
   If IsNull(Structure_ID_FK) Then Structure_ID_FK = ""
   '
   Section_ID_FK2 = Me.Section_ID_FK2
   If IsNull(Section_ID_FK2) Then Section_ID_FK2 = ""
   '
   Message = "Souhaitez-vous Déplacer l'agent " & Nom__Prenom & " (" & Trim(Str(Mat_Id)) & ") ?"
   '
   reponse = MsgBox(Message, vbYesNo + vbQuestion, "Déplacement Agent")
   '
Select Case reponse
   Case 6

DoCmd.SetWarnings False
Dim requetesqlcopie As String
requetesqlcopie = "insert into dt_personnels_mag select * from dt_personnels where Agent_id = " & Me.Agent_ID & ";"

DoCmd.RunSQL requetesqlcopie 'on copie

DoCmd.RunSQL "DELETE DT_Personnels.* FROM DT_Personnels WHERE (((DT_Personnels.Agent_Id)= " & Mat_Id & "));"


       '
       DoCmd.SetWarnings True
   End Select
   '
End Sub
0
begounou Messages postés 42 Date d'inscription mardi 30 décembre 2014 Statut Membre Dernière intervention 30 septembre 2020
30 sept. 2020 à 10:39
excusez moi du retard. je viens de tester et ça marche bien

merci pour votre aide
0