ginger59
Messages postés4Date d'inscriptionmercredi 1 novembre 2006StatutMembreDernière intervention 6 novembre 2006
-
6 nov. 2006 à 10:40
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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")
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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
ginger59
Messages postés4Date d'inscriptionmercredi 1 novembre 2006StatutMembreDerniè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
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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)
TMONOD
Messages postés256Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention 6 novembre 20091 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
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 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 & "'"
ginger59
Messages postés4Date d'inscriptionmercredi 1 novembre 2006StatutMembreDerniè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.
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 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.