#1 Tue 18 July 2006 11:59
- mimi
- Juste Inscrit !
- Date d'inscription: 18 Jul 2006
- Messages: 3
formulaire multicritère sous access
Bonjour,
Je suis novice en programmation. Je suis en train de réaliser une base de données. Je suis bloquée au niveau des formulaires de recherche multicritère. J’ai un gros pavé d’access sur lequel j’ai un exemple de formulaire en VBA. J’ai également consulté les tutoriaux de developpez.com et caféine mais je ne m’en sort pas. Je souhaiterai réaliser une requête sur 5 critères. 4 d’entre eux sont des listes déroulantes et le dernier est un champ libre à saisir. Je voudrai que le résultat apparaisse sous forme de tableau dans le même formulaire. Voici mes lignes de commandes de mon bouton de recherche.
Private Sub Commande20_Click()
Dim strFiltre As String
Dim avarMotsClefs As Variant
Dim varMotsClefs As Variant
'Filtre sur le departement
' On Error Resume Next
strFiltre = ""
If Not IsNull(Me.cmddept) Then
strFiltre = "([num_dept]='" & Me.cmddept & "')"
End If
'Filtre sur le canton
strFiltre = ""
If Not IsNull(Me.cmdcanton) Then
If strFiltre <> "" Then strFiltre = strFiltre & "AND"
strFiltre = strFiltre & "([chef_lieu]='" & Me.cmdcanton & "')"
End If
'Filtre sur la commune
strFiltre = ""
If Not IsNull(Me.cmdcommune) Then
If strFiltre <> "" Then strFiltre = strFiltre & "AND"
strFiltre = strFiltre & "([nom_commune]='" & Me.cmdcommune & "')"
End If
'Filtre sur le type
strFiltre = ""
If Not IsNull(Me.cmdtype) Then
If strFiltre <> "" Then strFiltre = strFiltre & "AND"
strFiltre = strFiltre & "([type]='" & Me.cmdtype & "')"
End If
'Filtre sur le nom
avarMotsClefs = Split(Nz(Me.cmdnom), " ")
For Each varMotsClefs In avarMotsClefs
If Trim(varMotsClefs) <> "" Then
If strFiltre <> "" Then strFiltre = strFiltre & "AND"
strFiltre = strFiltre & "([nom] LIKE '*" & varMotsClefs & "*')"
End If
Next
' Afficher le resultat
Me.lblSQL.Caption = strFiltre
'Filtrer le sous-formulaire
With Me.resultat.Form
.Filter = strFiltre
.FilterOn = True
End With
End Sub
Est-ce que quelqu’un pourrait me donner un coup de main ?
Merci par avance.
Hors ligne
#2 Mon 24 July 2006 12:13
- PierreF
- Juste Inscrit !
- Lieu: MARSEILLE
- Date d'inscription: 21 Jul 2006
- Messages: 6
Re: formulaire multicritère sous access
Une piste ...
> 'Filtre sur le departement
> ' On Error Resume Next
> strFiltre = ""
> If Not IsNull(Me.cmddept) Then
> strFiltre = "([num_dept]='" & Me.cmddept & "')"
> End If
- Vérifier que "Me.cmddept" retourne bien un numéro de département et non pas son nom par exemple. Idem pour les autres critères.
Hors ligne
#3 Wed 26 July 2006 00:05
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3185
- Site web
Re: formulaire multicritère sous access
Bonjour,
PierreF a raison , vous testez si le champ cmddept de l'objet Me (not is null)ne vaut pas "null" mais il peut valoir n'importe quoi.
Et Me c'est quel objet ?
Le "formulaire" conteneur ?, la requete ?
Ensuite je ne vois pas comment la requete est executée ?
il vaut mieux sous Access utiliser le DAO 3.6 et un code comme suit:
Dim db as database
Dim rq as querydef
Dim rst as recordset
Dim SQL$
Set db = currentdatabase() ' base de donnée en cours
'cherche si MaRequete existe
for each rq in db.querydefs
if rq.name = "MaRequete" then
msgbox("la requete existe déjà")
exit sub
end if
next rq
' fabrication de la chaine SQL à partir des listes déroulantes et autre
'qui sera du type Select ... Where etc ...
SQL$= lachainesqlfabriquee
'creation de MaRequete dans la BD
set rq= db.createquerydef("Marequete", sql$)
'Ouvre la requete
set rst = rq.openrecordset
si requete non vide affiche sous debug le champ champ1
If not(rst.bof and rst.eof) then
rst.movefirst
do while not rst.eof
debug.print rst("champ1")
rst.movenext
loop
end if
A+
Christophe
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#4 Wed 26 July 2006 00:09
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3185
- Site web
Re: formulaire multicritère sous access
....
oups!
Ajouter à la fin :
set db = nothing
set rq = nothing
set rst = nothing
Pour détruire les objets crées.
Christophe
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Fri 28 July 2006 14:44
- mimi
- Juste Inscrit !
- Date d'inscription: 18 Jul 2006
- Messages: 3
Re: formulaire multicritère sous access
Bonjour tout le monde,
Je vous remercie pour votre aide. En effet, PierreF avait raison. J'ai pu résoudre mon problème. Par contre pour la suite de mon formulaire, je rencontre d'autres soucis. Si quelqu'un veut bien m'aider, j'ai posé un autre message au nom de "Access 2003 ouverture d'un formulaire à partir d'un tableau résultat ".
Merci encore.
Hors ligne