Récupérer le résultat d'une requête Power Query dans une variable VBA

Bonjour, J'aimerai récupérer le résultat d'une requête Power Query dans une variable (de type variant) VBA.

Bonjour,

Si le résultat de votre requête est une table dont le nom serait "Liste" par exemple :

Dim MaVariable As Variant

    MaVariable = Range("Liste")

Merci pour la réponse mais il s'agit d'une requête PowerQuery qui n'est pas chargée (elle est déclarée uniquement comme une connexion). J'avais espéré une solution avec les informations que j'ai trouvé je ne sais plus où sur le net. mais la propriété .open du recordset ne fonctionne pas.

Il me semblait que la syntaxe SQL était bonne avec comme nom de requête Powerquerry "Requête - MaRequete" mais j'ai un message d'erreur "La méthode 'Open' de l'objet '_Recordset' à échoué". C'est comme si la syntaxe était erronée.

'Récupérer le contenu d'une requete powerquery
Function ChargerLaRequetePowerQuery(ByRef NomRequetePowerQuery As String) As Variant
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
For Each cts In ActiveWorkbook.Connections()
If InStr(1, cts.Name, NomRequetePowerQuery) Then
Set Conn = GetModelADOConnection
rs.Open "SELECT * From $" & NomRequetePowerQuery & ".$" & NomRequetePowerQuery, Conn
ChargerLaRequetePowerQuery = rs.GetRows() 'cols,lignes ss entete
Exit For
End If
Next
End Function

Function GetModelADOConnection()
'Nous avons juste besoin de l'ADOConnection

Set wbConnections = ThisWorkbook.Connections
Set Model = ThisWorkbook.Model
Set ModelDMC = Model.DataModelConnection
Set ModelDMCMC = ModelDMC.ModelConnection
Set GetModelADOConnection = ModelDMCMC.ADOConnection

End Function

C'était trop simple, Eric tu crois encore au père Noël...

Alors attendons qu'une pointure de Power Query se manifeste...

Bonjour

Model renvoie à PowerPivot et non PowerQuery.

J'ai testé : si j'ajoute la requête au modèle PowerPivot je récupère bien mais pas sinon.

J'ai modifié les noms de variables car il vaut mieux éviter les mots clés du langage dans la seconde fonction

Function ChargerLaRequetePowerQuery(NomRequetePQ As String) As Variant
Dim Conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
For Each cts In ActiveWorkbook.Connections()
    If InStr(cts.Name, NomRequetePQ) Then
        Set Conn = GetModelADOConnection
        rs.Open "SELECT * From $" & NomRequetePQ & ".$" & NomRequetePQ, Conn
        ChargerLaRequetePowerQuery = rs.GetRows() 'cols,lignes ss entete
    End If
Exit For
Next
End Function

Function GetModelADOConnection()
'Nous avons juste besoin de l'ADOConnection
Dim MModel As Model

Set wbConnections = ThisWorkbook.Connections
Set MModel = ThisWorkbook.Model
Set MModelDMC = MModel.DataModelConnection
Set MModelDMCMC = MModelDMC.ModelConnection
Set GetModelADOConnection = MModelDMCMC.ADOConnection

End Function

Par curiosité tu en fais quoi après de ce variant ?

Bonjour et merci pour l'explication. Je vais donc faire avec power pivot. Pour répondre à ta question, je voulais dans un premier temps connaître la solution juste pour ne pas avoir à charger les données dans une feuille Excel. Ensuite je préfère manipuler un tableau en mémoire que sous power query ou power pivot. On verra plus tard quand j'aurai maîtrisé le langage M et DAX... J'aurai pu faire autrement mais j'arrivais pas à expliquer ce problème. Encore merci pour cette aide. Je testerai demain et on pourra clore le sujet.

petite question restante : comment faire référence à un modèle power query alors? Sinon je resterai sur cette réponse qui est très bien.

Bonjour

La notion de modèle n'existe que pour PowerPivot. Il faut charger la requête dans PowerPivot (ce qui alourdit le fichier).

Rechercher des sujets similaires à "recuperer resultat requete power query variable vba"