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

Jam

XLDnaute Accro
Bonjour à tous,

Je m'arrache les cheveux avec quelque chose qui devrait être être simple :eek: :
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 :confused:

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.
 

Jam

XLDnaute Accro
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 :eek:
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
 

tototiti2008

XLDnaute Barbatruc
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...
 

Jam

XLDnaute Accro
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 :confused::confused::confused:

Les mystères de l'informatique ont parfois tendances à m'énerver grave !
Bon je repars à la pêche...:mad::mad:
 

tototiti2008

XLDnaute Barbatruc
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:

Jam

XLDnaute Accro
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.
 

Jam

XLDnaute Accro
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 :eek: réponse...et je m'apprêtais à...te faire la même réponse :cool:
...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 !
 

Statistiques des forums

Discussions
312 330
Messages
2 087 347
Membres
103 526
dernier inscrit
HEC