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.
En SQL ca donne
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
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.
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);
Si je double quote, j'obtiens
Donc un résultat sans ce filtre..
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);
Quelle est la syntaxe pour faire fonctionner cette requête vba?
Bien cordialement.
Julien
Partager