Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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

 

Pied de page des forums

Powered by FluxBB