ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

  • Initiateur de la discussion Initiateur de la discussion Jam
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Jam

XLDnaute Accro
Bonjour à tous,

Je m'arrache les cheveux avec quelque chose qui devrait être être simple 😱 :
1. J'ai une requête paramétrée dans ma base Access qui me permet de sélectionner un ou plusieurs salariés
2. Je veux, à partir d'une procédure VBA Excel en utilisant ADO, passer l'argument de ma recherche à cette requête puis récupérer le résultat de la requête.

Autant j'arrivais à le faire avec DAO autant là je bloque 😕

Mon code:
VB:
'En-tête de module
Private Const myMDB As String = "D:\Mes documents\...\Effectifs.mdb"
Private Const sCon As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & myMDB & ";User Id=Admin; Password"
Public oRst As ADODB.Recordset                    'Public pour le réutiliser ailleurs



Sub TEST()

    Dim oCmd As ADODB.Command
    Dim objParams As ADODB.Parameters
    Dim lAffected As Long
    Dim sPath As String
    Dim sConnect As String

    ' Create the connection string.
    sConnect = sCon

    ' Create the Command object.
    Set oCmd = New ADODB.Command
    oCmd.ActiveConnection = sConnect
    oCmd.CommandText = "xls_SearchNom"
    oCmd.CommandType = adCmdStoredProc

    ' Create and append the parameters.
    Set objParams = oCmd.Parameters
    objParams.Append oCmd.CreateParameter("Test", _
                                adVarChar, adParamInput, 50)
    Set objParams = Nothing
    
    ' Load the parameters and execute the query.
    oCmd.Parameters("Test").Value = "JEA"
    Set oRst = oCmd.Execute 'lAffected, , adExecuteNoRecords
    
    ThisWorkbook.Worksheets(1).Cells(1, 1).CopyFromRecordset oRst
    
    Set oCmd = Nothing

End Sub


La requête (forme SQL):
Code:
PARAMETERS [Test] VarChar ( 50 );
SELECT t_EFFECTIFS.MATRICULE, t_EFFECTIFS.NOM_PRENOM, t_EFFECTIFS.SOCIETE, t_EFFECTIFS.REGION, t_EFFECTIFS.SITE, t_EFFECTIFS.BASE_MENSUELLE, t_EFFECTIFS.NATURE_BUDGET, t_EFFECTIFS.CENTRE_ANALYSE, t_EFFECTIFS.MOIS, t_EFFECTIFS.ANNEE
FROM t_EFFECTIFS
WHERE (((t_EFFECTIFS.NOM_PRENOM) Like "*" & [Test] & "*") AND ((t_EFFECTIFS.NATURE_BUDGET)="réel"));

Merci d'avance pour toute piste que vous pourriez m'indiquer.
 
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Bonjour à tous,

A force de chercher on fini toujours par trouver 😱
Donc, pour tous ceux que cela pourrait éventuellement intéresser, ci-après la solution à ma propre question:

VB:
Sub TEST()

    Dim oCmd As ADODB.Command
    Dim objParams As New ADODB.Parameter      '# Changement, notez la disparition du "s" à Parameter
    Dim lAffected As Long
    Dim sPath As String
    Dim sConnect As String

    ' Create the connection string.
    sConnect = sCon

    ' Create the Command object.
    Set oCmd = New ADODB.Command
    oCmd.ActiveConnection = sConnect
    oCmd.CommandText = "xls_SearchNom"
    oCmd.CommandType = adCmdStoredProc

    ' Append the parameter
    With objParams                                        '#Modification, mais non significative
        .Name = "Test"
        .Value = "JEA"
        .Type = adVarChar
        .Size = 50
        .Direction = adParamInput
    End With
    
    ' Load the parameters and execute the query.
    oCmd.Parameters.Append objParams                        '# plus simplement :)
    Set objParams = Nothing                                        '# déplacement plus bas !
    Set oRst = oCmd.Execute 'lAffected, , adExecuteNoRecords
    
   
    Windows(ThisWorkbook.Name).Visible = True
    ThisWorkbook.Worksheets(1).Cells(1, 1).CopyFromRecordset oRst
    
    Set oCmd = Nothing

End Sub

Au plaisir
 
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Bonjour Jam,

Merci d'avoir posté ta solution
J'avais essayé de trouver sans résultat

Ce qui est bizarre, c'est que je n'arrive pas à faire fonctionner ton nouveau code chez moi
Dès que je fournis un paramètre, le recordset résultant est vide, même si dans Access j'ai des réponses... bizarre, non ?
Alors qu'en enlevant le paramètre j'ai bien des résultats...
 
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Alors, euh, comment dire...ça marche plus !!!!

J'ai fermé mon classeur (après avoir enregistré, of course), puis rouvert...et bing ! Plus rien 😕😕😕

Les mystères de l'informatique ont parfois tendances à m'énerver grave !
Bon je repars à la pêche...😡😡
 
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Re,

On dirait qu'il n'aime pas l'opérateur Like
Sans, ça a l'air de fonctionner...

Edit : Rectification, ce sont les "*" qu'il n'aime pas dans le like, il veut des "%"

Essaye voir

Code:
PARAMETERS [Test] VarChar ( 50 );
SELECT t_EFFECTIFS.MATRICULE, t_EFFECTIFS.NOM_PRENOM, t_EFFECTIFS.SOCIETE, t_EFFECTIFS.REGION, t_EFFECTIFS.SITE, t_EFFECTIFS.BASE_MENSUELLE, t_EFFECTIFS.NATURE_BUDGET, t_EFFECTIFS.CENTRE_ANALYSE, t_EFFECTIFS.MOIS, t_EFFECTIFS.ANNEE
FROM t_EFFECTIFS
WHERE (((t_EFFECTIFS.NOM_PRENOM) Like [Test]) AND ((t_EFFECTIFS.NATURE_BUDGET)="réel"));

et

With objParams '#Modification, mais non significative
.Name = "Test"
.Value = "%JEA%"
.Type = adVarChar
.Size = 50
.Direction = adParamInput
End With
 
Dernière édition:
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Oui, je suis assez d'accord avec ta remarque. J'ai fait d'autres tests qui semblent aller dans le même sens que toi.
Je cherche encore, sinon je me tournerai vers d'autres solutions.
 
Re : ADO: Lancer une requête "stockée" Access et renvoyer le résultat ds une feuille

Salut tototiti,

J'avais pas vu ta modif 😱 réponse...et je m'apprêtais à...te faire la même réponse 😎
...ce qui m'a mis sur la piste ce sont les requêtes MSSQL. A force de voir des % partout, j'ai finis par me dire que cela devait marcher.

Merci pour le temps que tu as du y passer.

Au fait, je précise qu'il faut aussi changer la requête Access pour n'y mettre que le paramètre sans les * qui mettent le bazard !
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour