Import access, traitement, puis ré-export dans access.
Le
Thorkhas
Bonjour !
Alors voila Mon problème concerne dans un premier temps Microsoft Query
(version 2002, avec access et excel 2002).
Actuellement, j'extrais des données d'une base access vers excel pour
procéder à un retraitement. J'ai créé une requête pour l'occasion, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuellement
vers un fichier excel dans lequel je fais mon traitement.
J'aimerais automatiser cette tache (ie, avoir en real time le résultat de ma
requete dans un onglet de mon fichier excel).
Le problème, c'est que quand je fais outil/données externes/créer une
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne pose a
priori pas de probleme) puis ma requete, ca me dit : "impossible d'accéder à
la table : <monchemin>\<monfichier>.<marequete>"
Je décide alors de créer ma requete en manuel directement dans query.
J'ajoute les tables (du fichier access donc) dont j'ai besoin. Puis une
requete croisé qui passe sans probleme. Puis une autre requete croisée. La
probleme : il me dit qu'il ne peut pas y accéder. Comme il s'agit d'une
requete croisée utilisant les données d'une autre requete, de type UNION
écrite directement en SQL dans accessn je me dis que le probleme vient de la.
J'essaie alors d'importer cette requete et la surprise, elle marche.
Je suis donc coincé à ce niveau la ! je ne peut pas inclure une des requetes
n,écessaires à ma requete finale Je ne comprends vraiment pas pourquoi
elle coince !
Si quelqu'un a une idée (utiliser autre chose dans query? propriétés de
cette requete croisée? )
Sinon ma deuxieme question.. en anticipant..
J'ai trouvé sur ce newsgroup une macro permettant d'exporter des données
excel vers access. C'est bien mais vous avez du comprendre que je voulais
retraiter des données sous excel pour les réexporter dans Access (pour
certaines raisons il est plus simple de procéder comme cela plutot que
d'aller directement modifier dans l'application access). Probleme, je veux
faire une mise a jour, pas ajouter des données.
Je connais le SQL "classique", à mon avis il faudrait une requete du style
(en adaptant d'apres ce que j'ai compris en lisant la requete exemple) :
UPDATE table IN c:\fuichieaccess.mdb SELECT champ1,champ2 FROM
[MaPlageDeDonnées] WHERE table.cle = [MaPlageDeDonnées].cle
Ie, je veux faire en sorte de mettre a jour champ1 et champ2 dans access
sachant qu'on a le meme champ pour la clé.
exactement l'equivalent en SQL "classique" : UPDATE a.champ1,a.champ2 FROM
tableAccess a,tableExcel e WHERE t.cle=a.cle SET
a.champ1=e.champ1,a.champ2=e.champ2
Voici la requete exemple que j'ai trouvée et qui permet de simplement
introduire des données (et pas de mettre a jour) :
INSERT INTO toto IN (c:\machin.mdb' SELECT * FROM [Plage]
Merci beaucoup !
Cordialement,
JC Montigny
Alors voila Mon problème concerne dans un premier temps Microsoft Query
(version 2002, avec access et excel 2002).
Actuellement, j'extrais des données d'une base access vers excel pour
procéder à un retraitement. J'ai créé une requête pour l'occasion, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuellement
vers un fichier excel dans lequel je fais mon traitement.
J'aimerais automatiser cette tache (ie, avoir en real time le résultat de ma
requete dans un onglet de mon fichier excel).
Le problème, c'est que quand je fais outil/données externes/créer une
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne pose a
priori pas de probleme) puis ma requete, ca me dit : "impossible d'accéder à
la table : <monchemin>\<monfichier>.<marequete>"
Je décide alors de créer ma requete en manuel directement dans query.
J'ajoute les tables (du fichier access donc) dont j'ai besoin. Puis une
requete croisé qui passe sans probleme. Puis une autre requete croisée. La
probleme : il me dit qu'il ne peut pas y accéder. Comme il s'agit d'une
requete croisée utilisant les données d'une autre requete, de type UNION
écrite directement en SQL dans accessn je me dis que le probleme vient de la.
J'essaie alors d'importer cette requete et la surprise, elle marche.
Je suis donc coincé à ce niveau la ! je ne peut pas inclure une des requetes
n,écessaires à ma requete finale Je ne comprends vraiment pas pourquoi
elle coince !
Si quelqu'un a une idée (utiliser autre chose dans query? propriétés de
cette requete croisée? )
Sinon ma deuxieme question.. en anticipant..
J'ai trouvé sur ce newsgroup une macro permettant d'exporter des données
excel vers access. C'est bien mais vous avez du comprendre que je voulais
retraiter des données sous excel pour les réexporter dans Access (pour
certaines raisons il est plus simple de procéder comme cela plutot que
d'aller directement modifier dans l'application access). Probleme, je veux
faire une mise a jour, pas ajouter des données.
Je connais le SQL "classique", à mon avis il faudrait une requete du style
(en adaptant d'apres ce que j'ai compris en lisant la requete exemple) :
UPDATE table IN c:\fuichieaccess.mdb SELECT champ1,champ2 FROM
[MaPlageDeDonnées] WHERE table.cle = [MaPlageDeDonnées].cle
Ie, je veux faire en sorte de mettre a jour champ1 et champ2 dans access
sachant qu'on a le meme champ pour la clé.
exactement l'equivalent en SQL "classique" : UPDATE a.champ1,a.champ2 FROM
tableAccess a,tableExcel e WHERE t.cle=a.cle SET
a.champ1=e.champ1,a.champ2=e.champ2
Voici la requete exemple que j'ai trouvée et qui permet de simplement
introduire des données (et pas de mettre a jour) :
INSERT INTO toto IN (c:\machin.mdb' SELECT * FROM [Plage]
Merci beaucoup !
Cordialement,
JC Montigny

Poser une question


-Requête de Maj d'une table Access en DAO:
Sub MajAccessUpdate()
'cocher Microsoft DAO 3.6 dans Outils/Références
Dim bd As DAO.Database
Set bd = OpenDatabase(ActiveWorkbook.FullName, False, False, "excel
8.0")
Sql = "UPDATE client IN
'C:mesdocexcelmacronouveau1001exemplesaccess2000.mdb' SET
Nom_Client=Ucase(Nom_Client) "
bd.Execute Sql
bd.Close
Set bd = Nothing
End Sub
(Je n'ai jamais rencontré de pb lors de connection à des requêtes
Access d'une BD en réseau)
Cordialement JB
Sub UpdateAccess()
ChDir ActiveWorkbook.Path
Set cnn = New ADODB.Connection
cnn.Open "DRIVER={Microsoft Access Driver
(*.mdb)};DBQ¬cess2000.mdb"
Sql = "UPDATE client SET Nom_Client=Ucase(Nom_Client) "
cnn.Execute Sql
cnn.Close
End Sub
JB
Tu peux faire ta requête directement dans Acces et utiliser ADO et lui demander
d'exécuter ta requête et te retourner les enregistrements dans un recordset.
Un petit exemple de code ... comme Acces est planté, je n'ai pas
pu effectuer de test ...
Évidemment, tu dois ajouter la bibliothèque : "Microsoft Activex Data 2.x Librairy"
'---------------------------------------
Sub test()
Dim C As Integer
Dim cnt As New ADODB.Connection
Dim Rst As New ADODB.Recordset
BaseAccess = ThisWorkbook.Path & "" & "Comptoir.mdb"
'Création d'une connection avec la base de données.
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & BaseAccess
'[Ten Most Expensive Products] = Nom de la requête
'existant dans Access, les crochets sont là à cause
'des espaces dans le nom de la requête...
cnt.CommandText = "[Ten Most Expensive Products]"
cnt.CommandType = adCmdStoredProc
Set Rst = com.Execute
If (Rst.State & adStateOpen) Then
MsgBox "Recordset is open... records returned."
'Pour récupérer le nom des champs
Do
Range("A1").Offset(, C) = Rst.Fields(C).Name
C = C + 1
X = X + 1
Loop Until X = Rst.Fields.Count
'Récupérer les enregistrements
Range("A1").Offset(1).CopyFromRecordset Rst
Rst.Close: Set Rst = Nothing: cnt.Close: Set cnt = Nothing
Else
MsgBox "Recordset not open... no records."
cnt.Close: Set cnt = Nothing
End If
End Sub
'---------------------------------------
"Thorkhas"
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Query
(version 2002, avec access et excel 2002).
Actuellement, j'extrais des données d'une base access vers excel pour
procéder à un retraitement. J'ai créé une requête pour l'occasion, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuellement
vers un fichier excel dans lequel je fais mon traitement.
J'aimerais automatiser cette tache (ie, avoir en real time le résultat de ma
requete dans un onglet de mon fichier excel).
Le problème, c'est que quand je fais outil/données externes/créer une
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne pose a
priori pas de probleme) puis ma requete, ca me dit : "impossible d'accéder à
la table :
Je décide alors de créer ma requete en manuel directement dans query.
J'ajoute les tables (du fichier access donc) dont j'ai besoin. Puis une
requete croisé qui passe sans probleme. Puis une autre requete croisée. La
probleme : il me dit qu'il ne peut pas y accéder. Comme il s'agit d'une
requete croisée utilisant les données d'une autre requete, de type UNION
écrite directement en SQL dans accessn je me dis que le probleme vient de la.
J'essaie alors d'importer cette requete et la surprise, elle marche.
Je suis donc coincé à ce niveau la ! je ne peut pas inclure une des requetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pourquoi
elle coince !
Si quelqu'un a une idée (utiliser autre chose dans query? propriétés de
cette requete croisée? ...)
Sinon ma deuxieme question.. en anticipant..
J'ai trouvé sur ce newsgroup une macro permettant d'exporter des données
excel vers access. C'est bien mais vous avez du comprendre que je voulais
retraiter des données sous excel pour les réexporter dans Access (pour
certaines raisons il est plus simple de procéder comme cela plutot que
d'aller directement modifier dans l'application access...). Probleme, je veux
faire une mise a jour, pas ajouter des données.
Je connais le SQL "classique", à mon avis il faudrait une requete du style
(en adaptant d'apres ce que j'ai compris en lisant la requete exemple) :
UPDATE table IN c:fuichieaccess.mdb SELECT champ1,champ2 FROM
[MaPlageDeDonnées] WHERE table.cle = [MaPlageDeDonnées].cle
Ie, je veux faire en sorte de mettre a jour champ1 et champ2 dans access
sachant qu'on a le meme champ pour la clé.
exactement l'equivalent en SQL "classique" : UPDATE a.champ1,a.champ2 FROM
tableAccess a,tableExcel e WHERE t.cle=a.cle SET
a.champ1=e.champ1,a.champ2=e.champ2
Voici la requete exemple que j'ai trouvée et qui permet de simplement
introduire des données (et pas de mettre a jour) :
INSERT INTO toto IN (c:machin.mdb' SELECT * FROM [Plage]
Merci beaucoup !
Cordialement,
JC Montigny
Merci beaucoup pour ta réponse !
J'ai créé ma procédure et je l'ai modifiée mais par contre il plante au
niveau des
commandes cnt. pour définir le type de requête et le texte de la requête en
me disant : "erreur 446 : cet objet ne gère pas les arguments nommés".
bizarre...
Il suffit bien d'avoir la lib Microsoft Activex Data Objects 2.x Library ?
(j'ai la 2.7)
D'autre part cela veut dire qu'avec cette méthode il faudra que je mette
plus ou moins un timer pour que la table reste mise à jour automatiquement
par la procédure ? (ou alors un petit bouton...)
Je continue à chercher..
Merci encore !
JCM
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas"
Re,
Merci beaucoup pour ta réponse !
J'ai créé ma procédure et je l'ai modifiée mais par contre il plante au
niveau des
commandes cnt. pour définir le type de requête et le texte de la requête en
me disant : "erreur 446 : cet objet ne gère pas les arguments nommés".
bizarre...
Il suffit bien d'avoir la lib Microsoft Activex Data Objects 2.x Library ?
(j'ai la 2.7)
D'autre part cela veut dire qu'avec cette méthode il faudra que je mette
plus ou moins un timer pour que la table reste mise à jour automatiquement
par la procédure ? (ou alors un petit bouton...)
Je continue à chercher..
Merci encore !
JCM