Requête vers DB access

Bonjour,

Ci-joint un exemple de fichier access contenant une table. La table finale contiendra environ 30 millions d'enregistrements.

Dans un fichier excel, je souhaite saisir un ID (exemple : 222v63v) et j'ai besoin de 3 formules : l'une appelant la valeur 1 correspondant à cet ID, l'autre appelant la valeur 2, et la troisième appelant la valeur 3.

Quelqu'un sait-il faire cela?

S'il n'est pas possible de faire cela avec des formules, comment le faire en utilisant VBA?

Merci,

Nicole

Salut,

J'imagine que c'est la suite de ton problème de gestion de données en masse avec excel?? Voir forum post : "Gros volume de données "

1/ On a pas la PJ que tu indiques

2/ Si tu peux fournir un échantillon de jeux de données pour faire la recherche que tu indiques.

Bonne aprem

Bonjour

Pour cela il faut effectuer une requête en VBA en utilisant DAO

Zut, le fichier ne s'attahce pas, probablement parce que c'est un fichier access.

Voici ci-dessous une copie du contenu de la table contenue dans mon fichier access.

Tu parles d'une problématique Access, mais ma problématique concerne bien excel : je souhaite faire une requête vers cette table access dans excel pour obtenir certaines données.

222v43t 98 85 72

222v43v 98 85 72

222v54t 98 85 72

222v54v 98 85 72

222v63t 98 85 72

222v63v 98 85 72

222v65t 97 84 71

222v65v 98 85 72

222v66t 99 86 73

222v77t 99 86 73

222v84t 97 84 71

222v84v 97 84 71

222v85t 97 84 71

222v85v 97 84 71

222v88t 98 85 72

222v95t 97 84 71

222v95v 97 84 71

222v97t 97 84 71

222v97v 97 84 71

222v99t 98 85 72

222vA4t 98 85 72

222vA4v 98 85 72

222vA5t 98 85 72

222vA5v 98 85 72

222vA6t 98 85 72

222vA6v 98 85 72

222vA7t 98 85 72

222vA7v 98 85 72

222vA8t 98 85 72

222vA8v 98 85 72

222vA9t 98 85 72

222vA9v 98 85 72

222vAAt 97 84 71

222vAJt 99 86 73

222vAJv 99 86 73

222vAKt 99 86 73

222vAKv 99 86 73

222vAQt 99 86 73

222vAQv 99 86 73

222vATt 98 85 72

222vATv 98 85 72

222vJ2t 98 85 72

222vJ8t 97 84 71

222vJ8v 97 84 71

222vJ9t 97 84 71

222vJ9v 97 84 71

Bonjour à tous,

Ci-joint un exemple standard de requête vers une base ACCESS depuis Excel.

Avec la base de test (MaBase.accdb)

Le chemin de la base est dans le code => à modifier

La requête est un exemple, basée sur la table [MaTable], comprenant les 4 champs suivants : ID, Valeur1, Valeur2, Valeur3

L'exemple ne renvoie qu'un résultat (on considère que l'ID est unique)

Sinon, il faut adapter le code en bouclant sur le record set

NB : 30 000 000 d'enregistrements dans ACCESS, ça commence à être limite. J'espère que les tables sont bien indexées !

Cordialement

Bouben

14mabase-accdb.zip (5.65 Ko)
78chris a écrit :

Bonjour

Pour cela il faut effectuer une requête en VBA en utilisant DAO

Merci de ta réponse.

Avec une simple formule, ce n'est pas possible? (il faut vraiment du VBA?)

J'ai cherché dans google "excel requête en VBA en utilisant DAO", et je trouve de tout, mais pas d'exemple

Je ne suis pas très compétente en VBA : si tu as le temps, saurais-tu rédiger une macro stp avec un fichier access contenant les données que j'ai postées précédemment STP?

Merci

Bonjour bouben,

Merci de ta réponse!

J'ai essayé de la faire fonctionner sur mon PC, mais ça n'a pas marché : je ne peux pas ouvrir ton fichier access, probablement pour une question de version d'access, et après avoir tenté de remplacer ta DB access dans la macro par ma DB access, ça ne marche pas (débogage).

Au niveau du chemin, si je comprends bien, ta macro va chercher la DB access située dans le même répertoire que le fichier excel, n'est-ce pas? Donc si je place le fichier excel et la DB access sur le bureau, ça devrait fonctionner, non?

Et ça devrait fonctionner même avec Acess fermé, n'est-ce pas? ou dois-je laisser access ouvert?

Donc pourrais-tu me fournir un exemple avec ma DB access (ci-jointe) stp?

Merci

22test-accdb.zip (30.22 Ko)

Bonjour,

Ca searit sympa d'indiquer par des liens croisés les différents forums où tu as posté.

Ca éviterai de redire ce qui l'a déjà été, et accessoirement de ne pas chercher pour rien si la solution est présente ailleurs...

eric

En effet, c'est toujours rageant d'avoir des sujets postés sur différents forums

Tu trouveras ci-joint une nouvelle version adaptée à ta BDD.

Maintenant que le travail est fait ...

A tester

Bouben

Merci bouben !!!

ça marche. je vais essayer de comprendre le code de cette macro.

Aurais-tu des conseils concernant ma problématique visant à gérer environ 30 millions d'enregistrements avec plusieurs fichiers excel qui vont puiser dans la DB access en simultané?

Nicole,

PS : je poste parfois sur d'autres forums quand je n'ai pas de réponse à une question (comme tout le monde j'imagine). En général les forums n'aiment pas trop quon fasse des liens vers d'autres forums, donc je ne signale pas forcément "eh les gars, j'ai déjà posté cette question ici, mais personne ne me réponds...". Et en l'occurence, cette discussion n'a pas été postée ailleurs. Vous ne m'avez pas répondu pour rien , vos réponses m'ont bien aidée, Merci encore !

Bonjour,

si je place le fichier excel et la DB access sur le bureau

Heu... Je ne sais pas pourquoi mais j'ai toujours cru que ce n'est pas une bonne solution !

Un avis "éclairé" ??

A+

Hello,

pour répondre aux questions

"J'ai essayé de la faire fonctionner sur mon PC, mais ça n'a pas marché : je ne peux pas ouvrir ton fichier access, probablement pour une question de version d'access, et après avoir tenté de remplacer ta DB access dans la macro par ma DB access, ça ne marche pas (débogage)."

Effectivement la chaîne de connexion était pour un base ".mdb". Ma base exemple était une base ".mdb", avec une extension ".accdb" (je n'ai pas ACCESS sur mon PC). En renommant la base ".mdb", tu pourras probablement l'ouvrir avec ACCESS.

Au niveau du chemin, si je comprends bien, ta macro va chercher la DB access située dans le même répertoire que le fichier excel, n'est-ce pas? Donc si je place le fichier excel et la DB access sur le bureau, ça devrait fonctionner, non?

C'est bien ça, dans la nouvelle version, le chemin de la base est dans la feuille Excel, donc plus de problème

Et ça devrait fonctionner même avec Acess fermé, n'est-ce pas? ou dois-je laisser access ouvert?

Confirmation : la base ACCESS peut être fermée

Aurais-tu des conseils concernant ma problématique visant à gérer environ 30 millions d'enregistrements avec plusieurs fichiers excel qui vont puiser dans la DB access en simultané?

Avec l'architecture mise en place : la base peut être sur un serveur partagé, le fichier Excel également.

Une base de données est faite pour gérer des accès simultanés, sans problème d'accès concurrent.

Quant au fichier Excel, il ne fait que de la lecture dans la base ACCESS, il peut donc être partagé, ou même en lecture seule. Personne n'a besoin de le modifier (c'est une architecture client/serveur)

Les 30 millions d'enregistrements sont dans la base ACCESS, les fichiers Excel ne contiennent aucune donnée (cf fichier Excel en exemple : juste qq ko, alors que la BDD peut atteindre 1 ou 2 Go).

Heu... Je ne sais pas pourquoi mais j'ai toujours cru que ce n'est pas une bonne solution !

Un avis "éclairé" ??

Aucun problème de déposer une base de données sur le bureau pour un usage personnel.

Par contre, dans une entreprise, cela n'a aucun sens.

Une base de données est faite pour être partagée, donc hébergée sur un serveur dédié. Tous les utilisateurs doivent y accéder, ils ne vont donc pas accéder à ton bureau (de toute façon le bureau est privé, non accessible aux autres utilisateurs).

Second point : une BDD a généralement un volume important, le bureau n'est pas fait pour stocker des gigas de données

Troisième point : la BDD est très critique, et doit donc être sauvegardée régulièrement. Dans une entreprise, les serveurs sont backuppés, les versions historisées, etc. Le bureau d'un utilisateur lamba ne contient rien d'important, le niveau de sécurité assuré n'est pas le même.

Je pourrai en écrire des pages, mais m'arrêterai ici.

En un mot : une architecture deux tiers, avec une BDD et des clients (Excel, C#, ou tout autre client) est ultra puissante.

Bouben

Merci beacoup Bouben !!!

je poste parfois sur d'autres forums quand je n'ai pas de réponse à une question (comme tout le monde j'imagine)

oui, bien sûr. Mais 24 h après, pas 1/4h...

Et en l'occurence, cette discussion n'a pas été postée ailleurs.

Ah bon ?

Un homonyme qui a le même besoin que toi alors

Vous ne m'avez pas répondu pour rien , vos réponses m'ont bien aidée, Merci encore !

Par contre sur l'autre forum ils peuvent continuer à chercher pour rien...

Bonjour,

Oui je sais que c'était résolu par SQL, ça m'a d'ailleurs bien rafraichi les idées... mais je suivais aussi une piste suggéré par Efgé.

J'aurais bien aimé que notre interlocuteur teste cette dernière solution avec une base de donnée plus volumineuse et nous donne un compte rendu d'utilisation en particulier par rapport au temps d'exécution...

Sur 100 lignes ça ne peut pas être significatif par contre sur un million de ligne je serais curieux de voir la différence ?

Prendre les 2 derniers fichiers de ce fil pour tester puis faire l'essai avec avec un fichier Texte plus volumineux et "sans guillemets"

A+

Bonjour Galopin,

Je ne peux pas tester cela actuellement car je n'ai pas encore 1000.000 de données. Je vais d'abord devoir générer les données avant de pouvoir les utiliser comme indiqué dans cette discussion..

Bonjour Galopin,

Avec une BDD, si la table est indexée, le résultat sera immédiat quel que soit le nombre d'enregistrements de la table.

Avec une lecture séquentielle, on balaie toute la table (ou tout le fichier) ; le temps augmentera proportionnellement au nombre d'enregistrements.

Test fait ce matin sur la base ACCESS, complétée avec 1 200 000 lignes : le résultat est instantané.

Bonne journée

Bouben

bouben a écrit :

En effet, c'est toujours rageant d'avoir des sujets postés sur différents forums

Tu trouveras ci-joint une nouvelle version adaptée à ta BDD.

Maintenant que le travail est fait ...

A tester

Bouben

Une macro VBA est-elle l'unique solution? Une formule dans une cellule ne peut-elle pas importer ces données depuis Access?

Je pose cette question car une macro implique une problématique qui est ... problématique... : https://forum.excel-pratique.com/excel/requete-vers-access-vs-recalcul-t97193.html

Ok, je me doutais un peu mais ce qui va sans dire va encore mieux en le disant...

Merci.

bonjour à tous

nicopat,

Microsoft a développé le menu Données/nouvelle requête, choisir Access

(ou Power Query pour de plus anciennes versions d'Excel : https://www.youtube.com/watch?v=gwW2CDdvUUs )

Rechercher des sujets similaires à "requete access"