Extraction d'une requete Access dans Excel

ginger59 Messages postés 4 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 6 novembre 2006 - 6 nov. 2006 à 10:40
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 6 nov. 2006 à 12:29
Bonjour a tous,


Tout d’abord merci pour le site car j’y ai trouve plein d’information et de code tres utiles. Mon niveau en VBA est quasi nul (j’ai commence la semaine derniere a developer des macros un peu poussees sous Excel), je suis plutot un financier qu’un developpeur.


Voila je voudrais creer une macro dans Excel qui aille extraire dans ma base de donnee (C:\mes documents\bd1.mdb) une requete compose de 8 champs differents (textes et chiffres) pour un total de 40000 lignes. Ensuite je vais crere un Tableau croise dynamique mais ca je <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /??><st1:city><st1:place>sais</st1:place></st1:city> faire (j’ai au moins appris ca la semaine derniere).


J’ai vu qu’il y avait certaine aide pour faire se genre de code mais mon niveau tres faible ne me permet pas de les comprendre.


Y aurait il quelqu’un pour m’aider?


Merci d’avance pour votre aide



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Ginger



 




PS: j’utilise une version anglaise de Excel 2002(XP), je <st1:city><st1:place>sais</st1:place></st1:city> pas si cela a de l’importance

10 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 nov. 2006 à 11:03
À partir d'Excel, il y a 2 méthodes principales pour se connecter à une base de donnée: ADO ou DAO


Personnellement, question d'habitude, j'utilise DAO


Tu dois d'abord te connecter à ta Base, puis créer un Recordset qui
contiendra tes enregistrements, et finalement utiliser la fonction
Excel CopyFromRecordset

ce qui donnerait grosso modo:


Dim Db as Database

Dim Rs as Recordset


Set Db = Workspaces(0).OpenDatabase("Chemin et nom de la base", False, False)

Set Rs = Db.OpenRecordset("Select * from MaTable")

Range("A1").CopyFromRecordet Rs


Db.Close

Set Rs = Nothing

Set Db = Nothing

MPi
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 nov. 2006 à 11:08
J'oubliais de te dire que tu dois créer une référence au moteur que tu
utiliseras (DAO ou ADO) . Tu coches la version la plus récente que tu
trouveras dans l'interface IDE d'Excel
menu Outils (Tools), puis Références


Un ou l'autre selon le cas:

Microsoft ActiveX Data Objects 2.8 Library  (ADO)

Microsoft DAO 3.6 Object Library  (DAO)

MPi
0
ginger59 Messages postés 4 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 6 novembre 2006
6 nov. 2006 à 11:14
Merci du coup de main.
J'ai tape le code mais j'ai un message d'erreur:
Compile error:
User-defined type not defined

Pour mon code:

Sub Extraction()


    Dim Db As Database
    Dim Rs As Recordset


    Set Db = Workspaces(0).OpenDatabase("C:\Documents and Settings\password\Desktop\Ginger\Period 1 to 7\Ginger.mdb", False, False)
    Set Rs = Db.OpenRecordset("Select * from Period")
    Range("A1").CopyFromRecordet Rs


    Db.Close
    Set Rs = Nothing
    Set Db = Nothing




End Sub

Quelqu'un peut il encore m'aider?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 nov. 2006 à 11:25
As-tu bien créé une référence au moteur DAO ?

MPi
0

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

Posez votre question
ginger59 Messages postés 4 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 6 novembre 2006
6 nov. 2006 à 11:30
Je n'avais pas fait de reference au DAO.
Maintenant le message est parti :-)
Mais j'ai droit a un nouveau message:
Run-time error '13':
Type mismatch

Quand je fais debug j'ai cette ligne en jaune:
 Set Rs = Db.OpenRecordset("Select * from Period")

Est que cela vient de la mauvaise appelation de ma requete (elle s'appelle bien Period dans Access)?
Encore merci car j'avance enfin dans ma macro
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
6 nov. 2006 à 11:34
Une autre méthode peut être bien plus simple étant donné ton code : tu ne fais que copier une requête d'ACCESS dans Excel.

Dans ton fichier Excel, il te suffit de faire Menu Données\Données externes\Importer des données et d'aller chercher le chemin de ta base.
Et voilà, ta requête est dans Excel. Mieux, tu fais une modif dans ta base de données, il te suffit de faire Menu Données\Actualiser les données pour que ça soit reporté dans EXCEL.

Sinon, pour ton message d'erreur, comme le dit MPi, cela vient à 99,99% que tu n'as pas déclaré la référence :
Microsoft DAO 3.6 Object Library  (DAO)
Si tu as une version plus ancienne, ça peut encore être
Microsoft DAO 3.51 Object Library  (DAO)

Molenn
0
TMONOD Messages postés 256 Date d'inscription mardi 25 novembre 2003 Statut Membre Dernière intervention 6 novembre 2009 1
6 nov. 2006 à 11:35
Bonjour,

Le mieux serait de créer un cube OLAP vers ta base Access, ainsi tu pourras générer tous les tableaux croisés que tu veux et manipuler à l'aise les dimentions de ta table.
Ca t'économisera du temps de développement et c'est beaucoup plus souple.
Tu pourras concentrer ton développement sur la manipulation du cube et travailler dans un niveau d'abstraction "Décisionnel".


Si tu galère pour faire un cube olap, on te donnera un coup de main


 


A+

Jcbé[^]
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
6 nov. 2006 à 11:39
La ligne de code ne sert pas à récupérer une requête déjà créée dans
Access, elle sert à créer une nouvelle requête selon tes besoins.

Select * ou Select Champ from NomDeLaTable


éventuellement, tu raffines la requête en mettant Where Champ = Valeur,
mais ça tu sais déjà j'imagine. Le plus difficile est de créer une
requête Where avec la bonne syntaxe

Apostrophes pour entourer les valeurs texte, dièses pour entourer les dates, rien qui entoure les chiffres
" ... Where Champ = '"& Texte & "'"

" ... Where Champ = #" & LaDate & "#"

" ... Where Champ = & Nombre

MPi
0
ginger59 Messages postés 4 Date d'inscription mercredi 1 novembre 2006 Statut Membre Dernière intervention 6 novembre 2006
6 nov. 2006 à 11:52
Salut TMONOD,
Je suis desole mais ta proposition est du "chinois pour moi". Je vais essayer de trouver des info sur le cube OLAP

La solution d'importer directement les donnees est tres rapide mais elle rend ma base occupe si je veux ajouter des donnees pendant que quelqu'un consulte le fichier d'analyse.
Merci pour toutes ces pistes, je vais essayer d'avancer un peu afin de poser des questions plus precises.

Ginger
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
6 nov. 2006 à 12:29
La solution est sans doute dans ce cas à chercher dans la fonction TransferSpreadSheet ... Quelque chose comme ça.

En fait, de mémoire, cela copie le contenu de te requête dans ton fichier Excel, mais sans crée de connexion, ce qui te pose soucis.
Je n'ai pas le temps d'approfondir tout de suite, j'essayerai de te trouver un bout de code pour ça cet après midi.

Molenn
0
Rejoignez-nous