[RESOLU] Filtre sql macro VBA

bobby5169

XLDnaute Nouveau
Bonjour à tous;
Voici mon problème que je vais essayer d'expliquer simplement.
J'ai un userform avec:
un treeview​
18 checkbox​
une listbox​

Mon objectif est de créer une chaine SQL afin de filtrer des données dans un classeur fermé et d'insérer ces données dans une listbox.

J'ai une procédure pour compter le nombre de checkbox sélectionnées et en suite concatener les noms pour obtenir ma chaine de nom à rechercher dans ma requete SQL
Code:
j = Empty
champs_valides = Empty


'compte les cases cochées
For Each ctrl In consultation.Controls
    If TypeName(ctrl) = "CheckBox" _
        Then
        If ctrl.Value = True Then
            champs_valides = champs_valides + 1
            'crée la chaine de caractaire pour l'extraction sql
            strsql = strsql & ctrl.Name & ", "
        End If
    End If
        
Next

'supprime le ' et l'espace en fin de chaine
strsql = Left(strsql, Len(strsql) - 2)
strsql = strsql & " "

Dans une seconde procédure je récupère ma chaine SQL (strsql) et le nombre de checkbox sélectionnées

Code:
BDD = ThisWorkbook.Path & "\BDD_devis.xls"
feuille = "BDD"
metier = tw.SelectedItem.parent.Text & " - " & tw.SelectedItem.Text
i = Empty
nbrenrg = Empty
liste.Clear
liste.ColumnCount = champs_valides

'connexion au classeur
Set cn = New ADODB.Connection

With cn
    .Provider = "MSDASQL"
    .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & "DBQ=" & BDD & ";ReadOnly=False;"
    .Open
End With

recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = '" & metier & "'")

Set rsc = cn.Execute(recherche)
champs = Split(strsql, ", ")


n = 1
rsc.MoveFirst
While Not rsc.EOF
    While champs(n) <> ""
        liste.AddItem rsc!champs(n)
    Wend
n = n + 1
Wend

cn.Close

Mon problème vient de
Code:
 recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = '" & metier & "'")

Je ne sais pas comment insérer ma variable strsql afin de remonter les valeurs correspondantes.

Lorsque je remplace strsql par un nom de champs il n'y a pas de problème je remonte bien des valeurs par contre en mettant le nom de ma variable j'ai des erreurs.

Si quelqu'un peut me donner des explications sur la syntaxe cela serai super.

En vous remerciant par avance.
 
Dernière édition:

bobby5169

XLDnaute Nouveau
Re : Filtre sql macro VBA

Merci Papou pour ta réponse.

Le -2 me sert à supprimer les 2 derniers caractères de ma chaine.

Lorsque j'exécute ma requete j'ai un message d'erreur: Trop peu de parametres. 2 attendus.

J'ai essayé plusieurs syntaxes pour la requete
'" & strsql & "'
" & strsql & "
' strsql '
.
.
.
Mais à chaque fois j'ai le même message d'erreur :mad:

J'ai l'impression que à chaque fois c'est ma chaine qui est cherchée et non pas sa "valeur".
 

bobby5169

XLDnaute Nouveau
Re : Filtre sql macro VBA

1° piste de résolution.

Dans mes noms de de textbox des _ qui à priori sont très mal supportés.

Maintenant que cette partie marche je n'ai pas de réponse à ma requete avec ma variable '" & metier & "'.

Par contre là ca ne vient pas des caractères car quand je remplace metier par une de ses valeur j'ai des réponses.

Quelqu'un aurait'il une idée?
 

Paritec

XLDnaute Barbatruc
Re : Filtre sql macro VBA

Bonsoir Bobby
sans fichier pour tester pas facile, mais une chose est sure tu n'es pas loin
mets voir un message box lorsque ta strsql est composée du style msgbox=strsql
pour voir comment est ta compil, car tu dois avoir exemple "Client.factures, Client.lignes"
si tu n'as pas cette mise en page cela ne marchera pas c'est sur.
tu dois avoir après chaque éléments un virgule est un espace avant le prochain élément de ta liste, et comme tu as déjà mis un espace derrière Select et un devant From tu dois avoir tes quottes juste devant la première lettre du premier élément, et juste derrière la dernière lettre du dernier éléments de ta requête. "Client.factures, Client.lignes"
à te relire
a+
papou
:)
 

bobby5169

XLDnaute Nouveau
Re : Filtre sql macro VBA

Ci joint les deux fichiers me permettant de travailler.

BDD est celui qui me sert de base de données (comme c'est original!!!! :) )

L'autre est celui ou j'ai mes macros et tout un tas de choses qui finalement ne me servent plus des masses.

Pour te répondre Papou mon problème ne se situe plus sur la chaine strsql mais sur la recherche de la variable metier.

La variable métier a pour valeur: le parent de la valeur sélectionnée dans le treeview - valeur sélectionnée.

Si je met:
Code:
recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = 'bâtiment bureau, vestiaire, refectoire - chauffage'")

Set rsc = cn.Execute(recherche)

Dans ce cas là je remonte des valeurs

Par contre si je met
Code:
recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = '" & metier & "'")

Set rsc = cn.Execute(recherche)
Où métier est une variable qui a été définie prédement et qui a la valeur bâtiment bureau, vestiaire, refectoire - chauffage alors là je ne remonte rien comme enregistrement.

Je pense qu'il s'agit uniquement d'une déclaration de variable entre les différents caractère ' " &, mais là je sèche.
 

Pièces jointes

  • Consultation devis.zip
    145.8 KB · Affichages: 83

bobby5169

XLDnaute Nouveau
Re : Filtre sql macro VBA

J'ai retapé ma chaine de recherche et maintenant ça marche.

La seule différence avec l'ancienne chaine est un espace entre le dernier ' et le " à la fine de la recherche.

pour info
Code:
recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = '" & metier & "'")

est devenu
Code:
recherche = ("SELECT " & strsql & " FROM [BDD$] WHERE lot = '" & metier & "' ")

Merci quand même à tous d'avoir pris le temps de m'aider
 

Paritec

XLDnaute Barbatruc
Re : Filtre sql macro VBA

Bonsoir Bobby,
Content que tu ais trouvé mais le problème tournait bien autour de ce que je t'avais dit avec Strsql
les requêtes sql c'est assez chiant avec les point les virgules et les espaces un de trop et la château s'écroule
bonne soirée
Papou :)
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 902
Membres
103 404
dernier inscrit
sultan87