Menu

Extraction Access vers Excel via Requête SQL personnalisée [Résolu]

Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
Bonjour,

Je dispose d'une base Access que je pilote grâce à un fichiel Excel rempli de formulaires/macros. J'ai créé une requête Access afin de réaliser des jointures internes entre les tables, que j'extrait ensuite avec mon fichier Excel sous forme de table pour pouvoir l'utiliser. Néanmoins, j'ai l'impression que la requête est "fixe", à savoir que l'on ne peut pas associer un critère/filtre modulable via Excel sur un champ

En définitive, est-il possible de créer une une table personnalisée sur Excel qui pioche des données dans Access via une requête de SQL de type "SELECT * FROM table WHERE type = Range("A1")" ?

Je vous remercie d'avance pour votre contribution, et n'hésitez pas à me dire si je n'ai pas été clair !

Configuration: Windows / Chrome 72.0.3626.109
Afficher la suite 

Votre réponse

1 réponse

Messages postés
7774
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2019
381
0
Merci
bonjour, c'est très possible, par exemple en utilisant une QueryTable. 
scomer51
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
Je travaille essentiellement en VBA, mais si une autre manière permet de répondre à mon besoin ça me convient aussi ! Si l'enregistrement d'un recordset via une macro peut s'injecter directement dans une table Excel ça me va aussi ! :)
yg_be
Messages postés
7774
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2019
381 > scomer51
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
eh bien, tu as énormément de choix en VBA dans Excel: tu peux, entr'autres, utiliser des objets de type QueryTable, ou bien des recordset, comme tu préfères.
tu n'as expliqué ni ton contexte, ni ta configuration, ni tes connaissances, ni tes ambitions, donc difficile de te conseiller plus précisément.
En fait, il est probable que tu aies déjà une querytable dans Excel, que tu as créé à la main quand tu as "extrait ensuite avec mon fichier Excel sous forme de table". Il suffit peut-être de légèrement modifier cet objet existant via VBA.
scomer51
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
Concernant le contexte, il s'agit de la construction d'un plan de formations selon des profils. Je dispose sur access de 3 tables :
- profils (id, profil)
- formations (id, formation, type, duree)
- mapping_profils_formations (id, id_profil, id_formation)

Sur le fichier excel, je dispose d'un controle ActiveX de type Listbox nommée lbox_profils, listant l'intégralité des profils. Mon besoin est d'avoir une table affichée sur le fichier répondant à la requête SQL :

SELECT f.formation, f.type, f.duree FROM formations f
INNER JOIN mapping_profils_formations map ON f.id = map.id_formation
WHERE map.id_profil = lbox_profils.value

Qui correspond à la liste des formations associées à un profil

J'essaie de me renseigner pendant ce temps sur la manipulation des objets QueryTables

Merci !
yg_be
Messages postés
7774
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 mai 2019
381 > scomer51
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
En fait, il est probable que tu aies déjà une querytable dans Excel, que tu as créée à la main quand tu as "extrait ensuite avec mon fichier Excel sous forme de table". Il suffirait alors de légèrement modifier cet objet existant via VBA.
L'avantage de réutiliser cette querytable est qu'elle fonctionne, et qu'il suffit d'en modifier la requête.
scomer51
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
Bonjour,

En effet j'ai résolu mon problème de cette manière :)

Si jamais ça peut servir à d'autres : une fois la QueryTable créée (imaginons que la plage s'appelle "querytable")

Un petit code du genre :
_________________________________________________________________________

Dim sSQL as string
Dim rst as DAO.Recordset
Dim db as DAO.Database

Set db = DBEngine.OpenDatabase(ThisWorkbook.Path & "\Database.mdb")
sSQL = "SELECT * FROM table WHERE name = " & Range("A1")
Set rst = db.OpenRecordset(sSQL)

Set Range("querytable").Cells(1).ListObjects.QueryTable.Recordset = rst
ThisWorkbook.RefreshAll

__________________________________________________________________________

Merci de ton aide !
Commenter la réponse de yg_be