Bonjour,

Je suis entrain de faire une requête pour afficher des valeurs à sélectionner sur la base d'une sélection de valeurs antérieures.
Le problème que j'ai étant que lorsque je passe de la variable VBA où je stocke ma valeur à SQL je n'arrive pas à faire comprendre à sql que ma valeur de variable un texte .
ex: WHERE R4_ReferencePrixSemaine.[Unité prix] = "kg"

Lorsque je simple quote il m'affiche la variable comme un texte à remplir (msgbox du nom de ma valeur me demandant de rentrer un texte), lorsque je double quote "" strWhereUnite "" ; strWhereUnite apparait dans mon sql.

Je vous indique mon code vba général en rouge est la partie qui bug ainsi que les sql qui résultent.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Private Sub 
Dim VarIDProd As Variant
Dim VarUnite As String
Dim VarBio As String

VarIDProd = Nom_Produit.Column(1)
strWhereProd = "[ID_Produit] = " & VarIDProd
VarUnite = Unite.Column(0)
strWhereUnite = " R4_ReferencePrixSemaine.[Unité prix] = " & VarUnite
VarBio = Bio_Conventionnel.Column(0)
strWhereBioconv = "R4_ReferencePrixSemaine.[Bio/Conventionnel] = " & VarBio

'Choisir le tarif de réference pour un produit et un segment client
SQL = "SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, " _
& "R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, " _
& "R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit " _
& "FROM R4_ReferencePrixSemaine " _
& "GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, " _
& "R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], " _
& "R4_ReferencePrixSemaine.ID_Produit " _

& "HAVING  " & strWhereUnite & " And " & strWhereBioconv & " " _

& "And " & strWhereProd & " " _
& " ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, " _
& "Avg(R4_ReferencePrixSemaine.PrixRef); "
Tarif1.RowSource = SQL
Debug.Print SQL
End Sub
En SQL ca donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit FROM R4_ReferencePrixSemaine GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit 

HAVING   R4_ReferencePrixSemaine.[Unité prix] = les 44 pièces And R4_ReferencePrixSemaine.[Bio/Conventionnel] = Bio 

And [ID_Produit] = 4  ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, Avg(R4_ReferencePrixSemaine.PrixRef);
SQL ne comprend donc pas que ma valeur est un texte et me sort un msgbox nommé bio et un msgbox nommé les 44 pièces ou je dois remplir du texte.

Si je double quote, j'obtiens

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SELECT R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, R4_ReferencePrixSemaine.[Unité prix], Avg(R4_ReferencePrixSemaine.PrixRef) AS MoyenneDePrixRef, R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit FROM R4_ReferencePrixSemaine GROUP BY R4_ReferencePrixSemaine.TarifSelect, R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source , R4_ReferencePrixSemaine.[Unité prix], R4_ReferencePrixSemaine.[Bio/Conventionnel], R4_ReferencePrixSemaine.ID_Produit 

HAVING  " & strWhereUnite & " And " & strWhereBioconv & " 

And [ID_Produit] = 4  ORDER BY R4_ReferencePrixSemaine.CategoriePrix, R4_ReferencePrixSemaine.PositionPrix, R4_ReferencePrixSemaine.Source, Avg(R4_ReferencePrixSemaine.PrixRef);
Donc un résultat sans ce filtre..

Quelle est la syntaxe pour faire fonctionner cette requête vba?

Bien cordialement.
Julien