OVH Cloud OVH Cloud

Demande conseil

2 réponses
Avatar
Laetitia
Bonjour,

J'aimerai trouver un moyen de faire une recherche Multiple
- depuis un unique formulaire
- depuis plusieurs listes d=E9roulantes (en contr=F4le source=20
je r=E9cup=E8re les donn=E9es stock=E9es dans la table)

- qui en selectionnant les valeurs des listes d=E9roulantes
construit une requ=EAte =E0 exporter sous excel

Auriez-vous une id=E9e de la mani=E8re de s'y prendre ?

Merci par avance

2 réponses

Avatar
Piotr
Bonjour,

Cela n'est pas très comliqué, mais c'est un peu délicat à programmer.
J'opérerais comme cela :

- Tu créés une requête ("Ma_Requete" par exemple) qui sélectionne par défaut
toute la table ("Select * from Ma_Table").
- Tu créés un formulaire ("Critères_Recherche" par exemple) avec tes
contrôles listes déroulantes qui servent de critère : Liste1, Liste2, ....
- Tu créés une fonction (dans le module du formulaire ou dans un module
global) qui contruit la requête SQL correspondant aux critères (exemple de
fonction à suivre).
- Tu créés un bouton qui exécute la fonction et exporte la requête
"Ma_Requete" au format Excel.

Tu peux également afficher le résultat intermédiaire de chaque modification
de critères dans un sous-formulaire ("Mon_Resultat"). Dans ce cas, pour
chaque contrôle "critère", sur l'événement "MAJ", tu dois exécuter la
fonction et recalculer le sous-formulaire ("Me.Mon_Resultat.Requery").

Exemple de fonction :
Function BuildSQLString() As Boolean

Dim strSQL As String
Dim strSELECT As String
Dim strFROM As String
Dim strWHERE As String

strSELECT = "Ma_Table.*"
strFROM = "Ma_Table"

If Forms![Critères_recherche].Liste1 <> "" Then
strWHERE = strWHERE & " AND ((Ma_Table.ChampListe1) Like
[Formulaires]![Critères_recherche]![Liste1] & ""*"")"
End If
If Forms![Critères_recherche].Liste2 <> "" Then
strWHERE = strWHERE & " AND ((Ma_Table.ChampListe2) Like
[Formulaires]![Critères_recherche]![Liste2] & ""*"")"
End If
'... etc pour tous les critères

strSQL = "SELECT " & strSELECT
strSQL = strSQL & " FROM " & strFROM
If strWHERE <> "" Then strSQL = strSQL & " WHERE " & Mid$(strWHERE, 6)
strSQL = strSQL & " ORDER BY Ma_Table.Champ1"

CurrentDb.QueryDefs("Ma_Requete").SQL = strSQL

BuildSQLString = True

End Function

Cela te convient-il ?

Pierre.


"Laetitia" a écrit dans le message de
news:06b501c3ceb9$cab72e20$
Bonjour,

J'aimerai trouver un moyen de faire une recherche Multiple
- depuis un unique formulaire
- depuis plusieurs listes déroulantes (en contrôle source
je récupère les données stockées dans la table)

- qui en selectionnant les valeurs des listes déroulantes
construit une requête à exporter sous excel

Auriez-vous une idée de la manière de s'y prendre ?

Merci par avance
Avatar
Laetitia
Oui, merci Pierre, je pense pouvoir m'en sortir avec ton
exemple.

Salutations

BONNE FETES ET BON NOUVEL AN

Laetitia

-----Message d'origine-----
Bonjour,

Cela n'est pas très comliqué, mais c'est un peu délicat
à programmer.

J'opérerais comme cela :

- Tu créés une requête ("Ma_Requete" par exemple) qui
sélectionne par défaut

toute la table ("Select * from Ma_Table").
- Tu créés un formulaire ("Critères_Recherche" par
exemple) avec tes

contrôles listes déroulantes qui servent de critère :
Liste1, Liste2, ....

- Tu créés une fonction (dans le module du formulaire ou
dans un module

global) qui contruit la requête SQL correspondant aux
critères (exemple de

fonction à suivre).
- Tu créés un bouton qui exécute la fonction et exporte
la requête

"Ma_Requete" au format Excel.

Tu peux également afficher le résultat intermédiaire de
chaque modification

de critères dans un sous-formulaire ("Mon_Resultat").
Dans ce cas, pour

chaque contrôle "critère", sur l'événement "MAJ", tu
dois exécuter la

fonction et recalculer le sous-formulaire
("Me.Mon_Resultat.Requery").


Exemple de fonction :
Function BuildSQLString() As Boolean

Dim strSQL As String
Dim strSELECT As String
Dim strFROM As String
Dim strWHERE As String

strSELECT = "Ma_Table.*"
strFROM = "Ma_Table"

If Forms![Critères_recherche].Liste1 <> "" Then
strWHERE = strWHERE & " AND ((Ma_Table.ChampListe1)
Like

[Formulaires]![Critères_recherche]![Liste1] & ""*"")"
End If
If Forms![Critères_recherche].Liste2 <> "" Then
strWHERE = strWHERE & " AND ((Ma_Table.ChampListe2)
Like

[Formulaires]![Critères_recherche]![Liste2] & ""*"")"
End If
'... etc pour tous les critères

strSQL = "SELECT " & strSELECT
strSQL = strSQL & " FROM " & strFROM
If strWHERE <> "" Then strSQL = strSQL & " WHERE " &
Mid$(strWHERE, 6)

strSQL = strSQL & " ORDER BY Ma_Table.Champ1"

CurrentDb.QueryDefs("Ma_Requete").SQL = strSQL

BuildSQLString = True

End Function

Cela te convient-il ?

Pierre.


"Laetitia" a écrit
dans le message de

news:06b501c3ceb9$cab72e20$
Bonjour,

J'aimerai trouver un moyen de faire une recherche
Multiple

- depuis un unique formulaire
- depuis plusieurs listes déroulantes (en contrôle source
je récupère les données stockées dans la table)

- qui en selectionnant les valeurs des listes déroulantes
construit une requête à exporter sous excel

Auriez-vous une idée de la manière de s'y prendre ?

Merci par avance


.