Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 13h54   #1
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Par défaut Pb pour formulaire de modification.

Bonjour,

J'ai une base de donnée avec plusieurs table a relation multiple.

Je voudrai afficher tous les champs d'un enregistrement dans un formulaire pour pouvoir les modifier.
Par mes relations multiples, je ne peux pas faire directement ma requête sur toutes mes tables afin de les modifier.
Je n'ai pas envie non plus de faire x sous formulaire car ca ne sera pas jolie et pratique.
Je veux afficher mes données en feuille de données (comme pour une table).

J'ai fais une premier formulaire ou on sélectionne une famille et le projet associé à la famille.
Ensuite j'ai un autre formulaire qui s'ouvre ou on peux modifier des données rattachées au projet (ca pas de problème puisque les tables en question ne sont pas en relation multiple).
Ensuite viens un autre formulaire une ou plusieurs catégorie qui permet ensuite d'ouvrir mon formulaire avec les données choisie par les filtre.

Lors du passage du formulaire avec les filtre au formulaire de modification, les données sélectionnées par les filtre s'enregistre dans une table qui comporte tous les champs nécessaire à la modification.

J'arrive donc à modifier ces données dans la nouvelle table.

Ce que j'aimerai maintenant c'est mettre à jour les données dans les vrai tables.

Pour cela il me faut les anciens enregistrement ainsi que les nouveau.
J'avais pensé faire lorsqu'il clic sur le bouton "enregistrer et quitter" du form de modif:

1) fermer le form pour qu'il enregistre les données dans la table temporaire.
2) Faire 2 requêtes (une sur ma table temporaire pour avoir les modif, l'autre sur les vrai table pour avoir les anciennes données)
3) je voulais ensuite modifier les vrai tables avec les valeurs de ma première requête en fonction des valeur de la seconde requête.

Mais je ne sais pas si c'est la bonne méthode.
Je ne suis pas sur que le premier enregistrement de ma requête1 et le même (hors modif) que le premier enregistrement de la requête 2.

Si vous avez des idées sur la manière dont je dois m'y prendre ca m'aiderai bcp car la j'ai l'impression de faire n'importe quoi et plus j'y réfléchis plus je m'embrouille.

Merci
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 15h37   #2
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 655
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 655
Points : 6 220
Points : 6 220
Envoyer un message via MSN à argyronet
Bonjour,

Quel que soit le nombre de tables en relation, ton formulaire doit être attaché à sa table ou à sa requête si toutefois tu as besoin de critères spécifiques. Au pire, tu peux joindre une table de relation que tu juges indispensable mais au final, ça ne sert à rien.
Ton formulaire possède alors tous les champs de la table en question et chaque contrôles nécessitant un choix se voit transformé en liste de choix ou déroulante pointant sur la table liée en rapport.
Pour les autres relations, tu peux jouer avec les événements et renvoyer dans telle ou telle zone de texte, telle valeur correspondant à une entrée spécifique dans un autre contrôle ou encore selon une valeur cochéé dans un cadre d'options.

Bref, un petit travail pointu mais fiable.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 17h17   #3
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Je te remercie pour ta réponse.
Je vais y réfléchir.
Enntre temps j'ai trouvé une solution qui n'est certainement pas parfaite mais qui marche (enfin j'ai encore quelque point a régler).
J'ai créé une 2nd table temporaire comme la première mais qui n'est pas attaché au formulaire et qui donc n'as pas eu les modification.
Grâce au positionnement des enregistrements, si ce sont les mêmes pour les 2 tables je peux modifier mes autres tables (celle que j' appelle les vrai).
Voila mon code:

Code :
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
37
38
39
40
41
42
43
44
45
46
47
48
sSQL = "SELECT * FROM Tbl_Modif_Data;"
 
    Set myrst = db.OpenRecordset(sSQL)
        If Not myrst.EOF Then
            Do While Not myrst.EOF
 
               sSQL1 = "SELECT * FROM Tbl_Modif_Data_2;"
                Set myrst1 = db.OpenRecordset(sSQL1)
                    If Not myrst1.EOF Then
                        Do While Not myrst1.EOF
                        If myrst.AbsolutePosition = myrst1.AbsolutePosition Then
 
 
 
                                m0 = Replace(myrst.Fields("Montant_PCertu2").Value, ",", ".")
                                m1 = Replace(myrst.Fields("Montant_PMOA2").Value, ",", ".")
                                m2 = Replace(myrst.Fields("Montant_SP_Certu2").Value, ",", ".")
                                m3 = Replace(myrst.Fields("Montant_Desig2").Value, ",", ".")
                                m4 = Replace(myrst.Fields("Montant_SPMOA2").Value, ",", ".")
 
                                sSQL = " UPDATE [Detail_Poste] SET ID_P = " & myrst.Fields("ID_P2").Value & ", ID_PMOA= " & myrst.Fields("ID_PMOA2").Value & ", Num_Certu= " & myrst.Fields("Num_Certu2").Value & ", Montant_PCertu= " & m0 & ", Montant_PMOA= " & m1 & " WHERE ID_P= " & myrst1.Fields("ID_P2").Value & " and ID_PMOA= " & myrst1.Fields("ID_PMOA2").Value & " and Num_Certu= " & myrst1.Fields("Num_Certu2").Value & ""
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Detail_Poste_Certu] SET ID_SP_Certu=" & myrst.Fields("ID_SP_Certu2").Value & ",Num_Certu= " & myrst.Fields("Num_Certu2").Value & ", Montant_SP_Certu= " & m2 & " WHERE ID_SP_Certu= " & myrst1.Fields("ID_SP_Certu2").Value & " and Num_Certu= " & myrst1.Fields("Num_Certu2").Value & ""
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Detail_SP_Certu] SET ID_SP_Certu=" & myrst.Fields("ID_SP_Certu2").Value & ", ID_Desig= " & myrst.Fields("ID_Desig2").Value & ", Montant_Desig= " & m3 & " WHERE ID_SP_Certu= " & myrst1.Fields("ID_SP_Certu2").Value & " and ID_Desig= " & myrst1.Fields("ID_Desig2").Value & ""
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Detail_Poste_MOA] SET ID_PMOA=" & myrst.Fields("ID_PMOA2").Value & ",ID_SPMOA= " & myrst.Fields("ID_SPMOA2").Value & ", Montant_SPMOA= " & m4 & " WHERE ID_PMOA= " & myrst1.Fields("ID_PMOA2").Value & " and ID_SPMOA= " & myrst1.Fields("ID_SPMOA2").Value & ""
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Detail_SP_MOA] SET ID_SPMOA=" & myrst.Fields("ID_SPMOA2").Value & ",ID_Desig= " & myrst.Fields("ID_Desig2").Value & ", Montant_Desig= " & m3 & " WHERE ID_SPMOA= " & myrst1.Fields("ID_SPMOA2").Value & " and ID_Desig= " & myrst1.Fields("ID_Desig2").Value & ""
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Contient] SET ID_Desig=" & myrst.Fields("ID_Desig2").Value & ",ID_Data= " & myrst.Fields("ID_Data2").Value & ",CE= '" & myrst.Fields("CE2").Value & "',Etape= '" & myrst.Fields("Etape2").Value & "',Indice= '" & myrst.Fields("Indice2").Value & "' WHERE ID_Desig= " & myrst1.Fields("ID_Desig2").Value & " and ID_Data= " & myrst1.Fields("ID_Data2").Value & " and CE= '" & myrst1.Fields("CE2").Value & "' and Etape= '" & myrst1.Fields("Etape2").Value & "' and Indice= '" & myrst1.Fields("Indice2").Value & "'"
                                DoCmd.RunSQL (sSQL)
 
                                sSQL = " UPDATE [Data] SET Unité= '" & myrst.Fields("Unité2").Value & "',PU= " & myrst.Fields("PU2").Value & ",Qté= " & myrst.Fields("Qté2").Value & ",Peraleas= " & myrst.Fields("Peraleas2").Value & " ,Remarque= '" & myrst.Fields("Remarque2").Value & "',Offreur= '" & myrst.Fields("Offreur2").Value & "' WHERE ID_Data= " & myrst1.Fields("ID_Data2").Value & " and Unité= '" & myrst1.Fields("Unité2").Value & "' and PU= " & myrst1.Fields("PU2").Value & " and Qté= " & myrst1.Fields("Qté2").Value & " and Peraleas= " & myrst1.Fields("Peraleas2").Value & " and Remarque= '" & myrst1.Fields("Remarque2").Value & "' and Offreur= '" & myrst1.Fields("Offreur2").Value & "'"
                                DoCmd.RunSQL (sSQL)
                            End If
                                myrst1.MoveNext
 
                             Loop
                        End If
            myrst.MoveNext
           Loop
    End If
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h16.


 
 
 
 
Partenaires

Hébergement Web