Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
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 10/01/2011, 17h36   #1
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Par défaut Utiliser requete paramétrée access en VBA

Bonjour à tous,

Je possède une requête paramétrée. Pour faire simple, elle n'a qu'un paramètre, celui-ci étant issu d'un formulaire. Dans un exemple, cette requête correspond à une population, filtrée par un champ commun (le paramètre en question!).

J'ai ensuite attaché un état à cette requête, qui m'affiche la bonne population. Jusqu'ici pas de problème. (ouf).

Mon problème, c'est qu'à l'ouverture de mon état, je voudrais pouvoir manipuler cette requête en VBA afin de faire des calculs et d'enregistrer les resultats dans une table. Voici ce que j'ai fait jusqu'à lors :

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
End With
 
Set rcs = qdf.OpenRecordset
Et là c'est le drame car quand j'execute, j'obtiens une phrase que je ne comprends même pas en français : "Type de données incompatibles dans l'expression du critère". En me pointant sur la dernière ligne. Autrement dit, access ne veut pas que j'utilise ma requete comme un recordset...

J'ai des pistes qui pourraient l'expliquer, comme le fait que la requête est utilisée au moment ou je veux la manipuler en VBA, ça pourrait etre ça?

Je vous remercie pour votre aide.

Thomas
Smoovy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 18h25   #2
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 255
Points : 5 255
Salut,

Peux tu donner le sql de ta requête ?

Je suppose qu'il y a une déclaration de paramètre du style

Code sql :
1
2
Parameters [Forms]![TonForm]![Valeur] Text ( 255 )
SELECT ...

et dans le bout de code :

Code :
qdf.Parameters("[Forms]![TonForm]![Valeur]")= MaVariable
Quel est le type du paramètre et de la variable ?

Merci
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 18h47   #3
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Oui c'est exactement ça.

Code :
1
2
3
SELECT Personnes.[Numéro de sécurité sociale], Personnes.Nom, Personnes.Prénom, Personnes.[Identifiant contrat]
FROM Personnes
WHERE (((Personnes.[Identifiant contrat])=[Formulaires]![Interface]![Identifiant contrat]));
J'utilise la table "Personnes" comme source de ma requête.
J'utilise le formulaire "Interface" pour récupérer le paramètre (identifiant contrat).

Comme décrit plus haut, j'ai attaché un état à cette requete.
Lors de l'ouverture de l'état, l'impression a lieu et je voudrais prendre la main sur la requête, avec ça :

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("Requete1")
 
With qdf
.Parameters("Formulaires!Interface!Identifiant contrat") = Forms![Interface].Identifiant_contrat
End With
 
Set rcs = qdf.OpenRecordset
Et là ça buge...

Merci pour ton aide
Smoovy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 20h00   #4
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 255
Points : 5 255
Re,

Il est de quel type ton paramètre [Forms]![Interface]![Identifiant contrat] ?

Voici la requête paramétrée
Code SQL :
1
2
3
4
PARAMETERS [Forms]![Interface]![Identifiant contrat] Text ( 255 )
SELECT Personnes.[Numéro de sécurité sociale], Personnes.Nom, Personnes.Prénom, Personnes.[Identifiant contrat]
FROM Personnes
WHERE (((Personnes.[Identifiant contrat])=[Forms]![Interface]![Identifiant contrat]));

voici un code possible...

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("Requete1")
 
With qdf
.Parameters("[Forms]![Interface]![Identifiant contrat]") = Forms![Interface]![Identifiant contrat]
End With
 
Set rcs = qdf.OpenRecordset
A+
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 10h20   #5
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Ma variable est du string et mon paramètre aussi. Lorsque j'exécute avec le bout de code que tu m'as donné, j'ai mis un point d'arret juste après la déclaration du paramètre et celui-ci est bien lu.

Code :
.Parameters("[Formulaires]![Interface]![Identifiant contrat]") = Forms![Interface].Identifiant_contrat
En mode debug, lorsque je survole la partie gauche de l'égalité, j'ai bien :

Code :
.Parameters("[Formulaires]![Interface]![Identifiant contrat]") ="123456789"
Mais à l'étape d'après, au moment ou je lis la ligne

Code :
Set rcs = qdf.OpenRecordset
ça buge et me donne le message d'erreur cité plus haut.

Cela m'amène à ces questions, qui permettraient de contourner le pb :
- est-il impératif d'écrire en sql la requête dans le code ?
- puis-je m'en sortir en effectuant mes calculs voulus dans la requête (en mode création), puis de récupérer les résultats de l'état qui y est attaché en vba?

Merci
Smoovy35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 17h03   #6
Rédacteur/Modérateur
 
Avatar de User
 
Homme Denis
Développeur informatique
Inscription : août 2004
Messages : 3 205
Détails du profil
Informations personnelles :
Nom : Homme Denis
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2004
Messages : 3 205
Points : 5 255
Points : 5 255
Bonjour,

Excusez-moi d'insister, mais avez-vous bien déclaré le type de votre paramètre en haut du code sql de votre requête :

Code sql :
1
2
3
PARAMETERS [Forms]![Interface]![Identifiant contrat] Text ( 255 )
SELECT...
...
__________________
Merci de ne pas poster sur mon profil pour des problèmes techniques. Pour celà vous pouvez utiliser le forum ou m'envoyer un mp.

Bon développement !


Mes tutoriels et contributions sur ma page perso:
Ma page personnelle
User est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 09h48   #7
Invité de passage
 
Thomas
Inscription : janvier 2011
Messages : 10
Détails du profil
Informations personnelles :
Nom : Thomas
Âge : 28

Informations forums :
Inscription : janvier 2011
Messages : 10
Points : 4
Points : 4
Bonjour,

Je comprends votre façon de faire, mais jusque là je voulais éviter d'écrire le code sql dans une fenêtre vba, car ma requête est lourde en ligne sql.

En fait au départ ma question était de savoir si on pouvait manipuler un recordset basé sur une requête faite en mode création (sans passer par sql tout compte fait).

Et donc je n'ai pas réussi. J'ai passé le paramètre en variable publique et je l'ai insérée dans le code sql (que j'ai fini par écrire dans la fenêtre vba!!) que vous m'avez donné (avec un nombre de guillemets qui va bien) et ça marche...

Merci pour votre aide.

Bonne journée
Smoovy35 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 19h07.


 
 
 
 
Partenaires

Hébergement Web