Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/10/2011, 10h58   #1
Invité régulier
 
Inscription : août 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 11
Points : 6
Points : 6
Par défaut Exécuter une requête de sélection paramétrée depuis VBA

J'ai une requête de sélection à disposition avec un paramètre. Comment l'utiliser dans un module VBA en passant un paramètre à partir du code ?

Le plus approchant sur le forum est du type:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Dim db As Database
Dim qdf As QueryDef
Dim rcs As Recordset
 
Set db = CurrentDb
 
Set qdf = db.QueryDefs("MaRequete")
 
With qdf
.Parameters("MonParamètre") = MaVariable
.Execute
End With

mais il ne concerne que les requêtes d'action et se plante sur le ".execute" avec une requête de sélection.
Avez vous la solution?
Merci pour l'aide
ChrisP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 18h57   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
On peut pas exécuter une requête de sélection, ça ne marche que pour les requêtes d'insertion, de modif ou de suppression d'enregistrement (pour la création ou la suppession de table je ne sais pas), par contre on peut s'en servir comme source de données.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim db As dao.Database
Dim qdf As dao.QueryDef
Dim rcs As dao.Recordset
 
Set db = CurrentDb
 
Set qdf = db.QueryDefs("MaRequete")
qdf.Parameters("MonParamètre") = MaVariable
set rst=qdf.openrecordset()
 
' Ici du code qui exploite le recordset
 
rst.close:set rst=nothing
set qdf=nothing
set db=nothing
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 10h38   #3
Invité régulier
 
Inscription : août 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 11
Points : 6
Points : 6
Par défaut Ok,mais ensuite...

Ainsi, il ne me reste plus qu'à envoyer le résultat du recordset dans une fenêtre de type feuille de données pour obtenir le résultat escompté. C'est plus propre que l'artifice trouvé sur le Forum que j'utilise (cf code plus bas )

Problème, je ne sais pas comment faire. Peux tu m'aider ?

Pour info seulement voici le code que je souhaite remplacer:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
    Dim qdf As QueryDef
 
'-- suppression de l'ancienne requête adaptée s'il y  a lieu
    For Each qd In CurrentDb.QueryDefs
        If qd.Name = "MaRequêteAdaptée" Then
            DoCmd.DeleteObject acQuery, MaRequêteAdaptée 
            Exit For
        End If
    Next
 
'-- création de la requête adaptée 
    Set qdf = CurrentDb.QueryDefs("MaRequête")
    qdf.SQL = Replace(qdf.SQL, "[LeParamètre]", "'" & MaVariable & "'")
    Set qdf = CurrentDb.CreateQueryDef(MaRequêteAdaptée ,qdf.SQL)
    DoCmd.OpenQuery MaRequêteAdaptée
ChrisP est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 15h09   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 475
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 475
Points : 7 564
Points : 7 564
Non pour cet usage précis je ne pense pas qu'on puisse utiliser ce que je t'ai proposé.

La seule variation que je peux te suggérer c'est de ne pas supprimer la requête "MaRequêteAdaptée" mais simplement de remplacer son SQL.

Code :
1
2
3
Set qdf = CurrentDb.QueryDefs("MaRequête")
CurrentDb.QueryDefsf(MaRequêteAdaptée).sql=Replace(qdf.SQL, "[LeParamètre]", "'" & MaVariable & "'")
DoCmd.OpenQuery MaRequêteAdaptée
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/10/2011, 15h56   #5
Invité régulier
 
Inscription : août 2008
Messages : 11
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 11
Points : 6
Points : 6
Par défaut Merci René

En fait la transformation de MaRequête en MaRequêteAdaptée permet de préserver l'original.

Le souci est que MaRequêteAdaptée reste en base un certain temps.

Merci, je poste un Résolu.
ChrisP est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h03.


 
 
 
 
Partenaires

Hébergement Web