Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Bonjour !
Alors voila... Mon problème concerne dans un premier temps Microsoft Qu ery
(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'occasi on, assez
complexe (elle se base sur d'autres requetes croisées dynamiques, des
requetes union, et deux tables plates classiques), que j'exporte manuelle ment
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 u ne
requete, que je selectionne ma base (sur un lecteur réseau mais ca ne p ose 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 UN ION
é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 r equetes
n,écessaires à ma requete finale... Je ne comprends vraiment pas pour quoi
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 st yle
(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
Utilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Utilisation ADO et utilisation d'une requête stockée
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" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
2065AD52-B2B7-4671-902E-1887694569D8@microsoft.com...
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
Utilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Utilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Utilisation ADO et utilisation d'une requête stockée
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" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
2065AD52-B2B7-4671-902E-1887694569D8@microsoft.com...
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
Utilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" a écrit dans le message de news:
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 !
JCMUtilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
E085549E-CCE5-408E-8D0C-6549D26AC3C1@microsoft.com...
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
Utilisation ADO et utilisation d'une requête stockée
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" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
2065AD52-B2B7-4671-902E-1887694569D8@microsoft.com...
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" a écrit dans le message de news:
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 !
JCMUtilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" a écrit dans le message de news:
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 !
JCMUtilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
E085549E-CCE5-408E-8D0C-6549D26AC3C1@microsoft.com...
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
Utilisation ADO et utilisation d'une requête stockée
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" <Thorkhas@discussions.microsoft.com> a écrit dans le message de news:
2065AD52-B2B7-4671-902E-1887694569D8@microsoft.com...
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
Je n'ai toujours pas testé la procédure mais
il y a une faute là :
Set Rst = com.Execute
On devrait lire évidemment :
Set Rst = CNT.Execute
"Thorkhas" a écrit dans le message de news:
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 !
JCMUtilisation ADO et utilisation d'une requête stockée
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" a écrit dans le message de news:
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
Update en ADO:
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
JBBonjour !
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
Update en ADO:
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
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
Update en ADO:
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
JBBonjour !
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