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

Signaler
Messages postés
5
Date d'inscription
vendredi 22 février 2019
Statut
Membre
Dernière intervention
25 février 2019
-
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

1 réponse

Messages postés
11432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juin 2020
654
bonjour, c'est très possible, par exemple en utilisant une QueryTable. 
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 ! :)
Messages postés
11432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juin 2020
654 >
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.
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 !
Messages postés
11432
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 juin 2020
654 >
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.
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 !