Pitié aidez moi! VBA sous ACCESS

cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006 - 24 nov. 2005 à 16:53
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006 - 30 nov. 2005 à 10:33
VBA ou SQL ACCESS
J'ai 2 bases de données A et B avec la tables A1 et B1
De la base de données A provenant du siège, je dois rapatrier des données vers ma base de données B.

Dans la table A et B, il y a les champs Produits et Composants. Le Produit "X" se répète autant de fois qu'il y a de composants. Et donc il y a des doublons autant dans le champ Produits que le champ Componsant ( ou le composant se retrouve autant de fois qu'il est présent dans les différents produits.)

Par contre j'arrive à automatiser l'import via SQL, le problème, c'est que dans la table B, il y a deja des produits.
Et je voudra mettre une condition avant l'import pour dire que les composants du produits X de la table A ne doivent pas etre importés si les composants du produit X sont déjà présents dans B.

Produit : A, B, C, D
Composant: X,Y,Z,V

Composition des produits:
Table B
A;X
A;Y
A;V
B;Y
B;Z
B;V
C;X
C;Z
C;V

Table A
A;X
A;Z ==> différent de la table B
D;Z==>nouveau produit D non présent dans la table B
D;Y

Il faudrait donc importer juste le nouveau produit D, et le composant Z pour le produit"A".

J'avais pensé à passer par une table "tampon"
'Supprimer les doublons dans la BOM
DoCmd.RunSQL "SELECT DISTINCT * INTO [BOM Import] FROM BOM"
DoCmd.RunSQL "DELETE * FROM BOM"
DoCmd.RunSQL "INSERT INTO BOM SELECT * FROM [BOM Import]"
DoCmd.RunSQL "DELETE * FROM [BOM Import]"

Mais le résultat n'est pas concluant...
Vraiment je suis dans l'impasse... et g besoin d'aide!..

Merci d'avance pour l'aide!

au secours!!

12 réponses

M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
24 nov. 2005 à 20:06
Utilise des RecordSet pour réaliser des recherches et des comparaisons.

=======================================================
déclaration global


Global CnAccess As ADODB.Connection
Global RsAccess1 As ADODB.Recordset
Global RsAccess2 As ADODB.Recordset
Global DB_Access As String


Global SQL1 As String
Global SQL2 As String
Global SQL_DB As String
Global Reponse As String


*****************************************************************


Sub Open_Connection1()


Set CnAccess = New ADODB.Connection
CnAccess.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & DB_Access
CnAccess.Open


End Sub


******************************************************************


Sub Open_RecordSet1()


' Crée et ouvre le recordset
Set RsAccess1 = New ADODB.Recordset
RsAccess.Open SQL, CnAccess, adOpenDynamic, adLockPessimistic


End Sub


******************************************************************


Sub Close_Connection1()


CnAccess.Close


End Sub


*******************************************************************


Sub Close_RecordSet1()


RsAccess1.Close


End Sub


******************************************************************


Private Sub Verification_traitement()


PathFileDB = "D:\Projet"
NameFileDB = "BASE_Access.mdb"
DB_Access = PathFileDB & NameFileDB


call Open_Connection1()
SQL_DB = "SELECT * FROM A"
call Open_RecordSet1()


Réaliser les test et recherches dans les RecordSet
pour savoir si un produit existe déjà ou non
Si oui => tu ne l'ajoute pas
Si non => tu l'ajoute.


call Close_RecordSet1()
call Close_Connection1()


End Sub


*****************************************************************


''exemple de navigation dans un RecordSet


DIM Recherche as string


if RsAccess.EOF = False then ' Vérifie qu'il existe au moins un enregistrement


RsAccess.MoveFirst 'se place sur le premier enregistrement


Do 'ammorce une boucle "tant que..."


if RsAccess![BOM Import] = Recherche then
'Réalise une comparaison entre une variable et la valeur d'un recordset

GoTo SUITE 'comme il y a concordance, tu n'ajoute pas ton produit


else


'Il n'y a pas concordance, tu ajoute ton produit dans la table B
call Ajouter_Produit()


endif


SUITE:
RsAccess.MoveNext 'passer à l'enregistrement suivant
Loop While RsAccess.EOF = False
'la boucle se poursuie jusqu'au dernier enregistrement
'la fin d'un RecordSet est indiqué par EOF
'le début par BOF


endif


End Sub


*********************************************************************


Private Sub Ajouter_Produit()


SQL1 = "SELECT A.A, A.B FROM A;"
SQL2 = "SELECT B.A, B.B FROM B;"


call Open_Connection1()
call Open_RecordSet1()
call Open_RecordSet2()


RsAccess2.AddNew 'Ajouter un enregistrement


RsAccess2![A] = RsAccess1![A]
RsAccess2![B] = RsAccess1![A]


RsAccess2.Update 'Valider l'ajout en mettant à jour la base


call Close_RecordSet1()
call Close_RecordSet2()
call Close_Connection1()


End Sub
0
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006
25 nov. 2005 à 09:14
et sous SQL c'est possible aussi ? ou c obligé par VBA?

au secours!!
0
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006
25 nov. 2005 à 09:14
et sous SQL c'est possible aussi ? ou c obligé par VBA?

au secours!!
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
25 nov. 2005 à 10:22
sous VBA : pas de problème à ma connaissance
0

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

Posez votre question
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
25 nov. 2005 à 10:24
place ton code dans un module ".BAS"
0
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006
25 nov. 2005 à 11:57
chuis toujours perdue...
Dsl ms g pa fé de VBA poussé, et sa fé qq mois que je n'y ai pa touché ...

au secours!!
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
25 nov. 2005 à 15:55
J'ai relevé ton "cahier des charges"
Je tache de réaliser un script d'exemple complet dans une base access durant le week-end.
0
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006
25 nov. 2005 à 16:01
merci de sacrifier une partie de ton We pour moi!

Je suis au bord du suicide la ... fo que je finisse sa le plus tot possible... sinon il seré possible que je me fasse virer .... ( de mon stage... c un peu mieux que si je n'étais vraiment embauchée)

Juste encore une tite précision, les produits dans ma table ne se résume pas 4 ou 5 produits... mais plutot à des centaines....multipliés par le nombre de composants les constitutant...

Marci marci !!!

au secours!!
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
28 nov. 2005 à 11:28
Je ne t'ai pas oublié, le code arrive....
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
28 nov. 2005 à 11:45
0
M000004965 Messages postés 147 Date d'inscription mercredi 3 décembre 2003 Statut Membre Dernière intervention 12 juin 2008
28 nov. 2005 à 11:55
D'autre part:

tu as diff approches possible pour ton problème.
1) toute base de données intelligemment construite doit avoir une clé primaire !


Soit un incrément auto soit un champ qui va contenir des données uniques telles que n° commande ou de facture.


Il te serai ainsi plus simple d’identifier les nouveaux enregistrements.


2) Il te suffis d’ajouter une ligne de commande dans la procédure d’ajout d’un nouvel enregistrement de la baseA qui renseignerait une table supplémentaire contenant les nouveaux enregistrements. Il ne te resterai plus qu’à vider cette table tous les jours en récupérant les enregistrement dans ta baseB.
0
cs_tchoukette Messages postés 32 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 12 janvier 2006
30 nov. 2005 à 10:33
ah g pa acces au fichier, chuis pas membre ...

au secours!!
0
Rejoignez-nous