Outil de recherche multi-critères. Corrigez mon code SVP ! Urgent

cs_garoul Messages postés 5 Date d'inscription lundi 13 juin 2005 Statut Membre Dernière intervention 27 avril 2007 - 23 avril 2007 à 16:49
farouk_ch Messages postés 12 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 20 février 2009 - 24 avril 2007 à 15:43
Voici mon outil de recherche en Image et voici en bas le code complet que j'ai utilisé.



>> Les case à cocher sont nommés : cocheNom ( par exemple cocheMatière, cocheAuteur, cocheOuvrage..)
>> Les zones de texte sont nommées : texteNom ( par exemple texteMatière, texteCote, texteInventaire)
>> Base de donnée est nommée : Gestion livres

Problème constaté :

En fait je veux en cochant un critère et en le remplissant la requtte Sql se met à jour et montre le résultat en temps réel. Le code me semble correcte parce que j'ai suivi à la lettre un tuto sur internet mais lorsque je remplie une zone de texte la zone de résultat n'affiche rien quoique ma base Gestion Livres est remplie de donnée.

Veuillez svp me préter un peu de votre temps pour trouve la lacune qui se trouve dans mon code. Je vous en serez très reconnaissant

Niveau de connaissances en VB et Sql est presque nul.

Code utilisé :

Private Sub Form_Load()

Dim ctl As Control

For Each ctl In Me.Controls

    Select Case Left(ctl.Name, 5)

        Case "coche"

           ctl.Value = 0

        Case "texte"

            ctl.Visible = False

    End Select
    
Next ctl

End Sub
Private Sub rafraichir()

Dim SQL As String

SQL = "SELECT [Gestion Livres].[titre de l'ouvrage], [Gestion Livres].auteur, [Gestion Livres].n_cote, [Gestion Livres].n_inventaire, [Gestion Livres].année, [Gestion Livres].quantité FROM [Gestion Livres]"

If cocheAuteur Then

On Error Resume Next
    SQL = SQL & "And [Gestion Livres]!Auteur like '*" & texteAuteur.Text & "*' "

End If

If cochematière Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Matière like '* " & texteMatière.Text & "*' "

End If
If cocheClés Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Clés like '* " & texteClés.Text & "*' "

End If
If cocheOuvrage Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Ouvrage like '* " & texteOuvrage.Text & "*' "

End If
If cocheEdition Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Edition like '* " & texteEdition.Text & "*' "

End If
If cocheAnnée Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Année like '* " & texteAnnée.Text & "*' "

End If
If cocheCote Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Cote like '* " & texteCote.Text & "*' "

End If
If cocheInventaire Then

On Error Resume Next
    SQL = SQL & "And Gestion Livres!Inventaire like '* " & texteInventaire.Text & "*' "

End If

SQL = SQL & ";"

listeRésultats.RowSource = SQL

listeRésultats.Requery

End Sub

Private Sub cocheMatière_Click()
texteMatière.Visible = Not texteMatière.Visible
rafraichir
End Sub
Private Sub cocheAuteur_Click()
texteAuteur.Visible = Not texteAuteur.Visible
rafraichir
End Sub
Private Sub cocheOuvrage_Click()
texteOuvrage.Visible = Not texteOuvrage.Visible
rafraichir
End Sub
Private Sub cocheEdition_Click()
texteEdition.Visible = Not texteEdition.Visible
rafraichir
End Sub
Private Sub cocheAnnée_Click()
texteAnnée.Visible = Not texteAnnée.Visible
rafraichir
End Sub
Private Sub cocheCote_Click()
texteCote.Visible = Not texteCote.Visible
rafraichir
End Sub
Private Sub cocheInventaire_Click()
texteInventaire.Visible = Not texteInventaire.Visible
rafraichir
End Sub
Private Sub cocheClés_Click()
texteClés.Visible = Not texteClés.Visible
rafraichir
End Sub
Private Sub texteAuteur_KeyUp(KeyCode As Integer, Shift As Integer)
rafraichir
End Sub
Private Sub texteMatière_KeyUp(KeyCode As Integer, Shift As Integer)
rafraichir
End Sub
Private Sub texteAnnée_KeyUp(KeyCode As Integer, Shift As Integer)
rafraichir
End Sub

5 réponses

chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
23 avril 2007 à 23:16
Bonsoir,
 à première vue il y a deus anomlies dans tes expressions:

1° espace manquant avant le And
2° astérisque en trop après like si le critère est
    ...commençant par...

Correction proposée
SQL = SQL & " And [Gestion Livres]!Auteur like '" & texteAuteur.Text & "*' "

pareil pour toutes les autres...
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
23 avril 2007 à 23:20
à part la première expression, des crochets manquent
au nom de la table Gestion Livres
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
23 avril 2007 à 23:28
en période de test, il ne faut jamais utiliser
de On Error Resume Next, sinon tu ne sauras jamais
ou est ce que ça bloque...


Vires tout les On Error...
Remplaces les par un seul On Error Goto MonErreur à ce niveau


If cocheClés Then



On Error Goto MonErreur

    SQL = SQL & "And Gestion Livres!Clés like '* " & texteClés.Text & "*' "
...


En Fin de la procédure Rafraichir, rajoutes ces lignes

listeRésultats.Requery
Exit Sub
MonErreur:
MsgBox Err.Description
End Sub
cs_byob Messages postés 35 Date d'inscription vendredi 27 janvier 2006 Statut Membre Dernière intervention 15 décembre 2008
24 avril 2007 à 14:21
Un site qui peut t'aider
http://cafeine.developpez.com/access/tutoriel/recherchemulti/

Il suffit juste d'appliquer à ton cas, car tu as juste des textbox.


Les modifs se font en tps reel.


a la fin du lien de la page tu trouvera un .mdb de se qui a été fait


si ça peut t'aider

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
farouk_ch Messages postés 12 Date d'inscription jeudi 22 mars 2007 Statut Membre Dernière intervention 20 février 2009
24 avril 2007 à 15:43
Salut à tous,
Je commence par l'erreur de construction de la requete:
Prenant le cas où seule cochematière est cochée, la requete sera alors "select ... from "[Gestion Livres] And Gestion Livres!Matière like ..." !

Solution proposée:
Private Sub rafraichir()

Dim SQL As String

SQL = "SELECT [Gestion Livres].[titre de l'ouvrage], [Gestion Livres].auteur, [Gestion Livres].n_cote, [Gestion Livres].n_inventaire, [Gestion Livres].année, [Gestion Livres].quantité FROM [Gestion Livres]"
dim t as integer
t=0
If cocheAuteur Then
t=1
    SQL = SQL & " where [Gestion Livres]!Auteur like '*" & texteAuteur.Text & "*' "
End If

If cochematière Then
if t=1 then
    SQL = SQL & " And Gestion Livres!Matière like '* " & texteMatière.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Matière like '* " & texteMatière.Text & "*' "
t=1
end if
End If

If cocheClés Then
if t=1 then
    SQL = SQL & "And Gestion Livres!Clés like '* " & texteClés.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Clés like '* " & texteClés.Text & "*' "
t=1
end if
End If

If cocheOuvrage Then
if t =1 then
SQL = SQL & " And Gestion Livres!Ouvrage like '* " & texteOuvrage.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Ouvrage like '* " & texteOuvrage.Text & "*' "
t=1
end if
End If

If cocheEdition Then
if t=1 then
SQL = SQL & " And Gestion Livres!Edition like '* " & texteEdition.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Edition like '* " & texteEdition.Text & "*' "
t=1
end if
End If

If cocheAnnée Then
if t=1 then
SQL = SQL & " And Gestion Livres!Année like '* " & texteAnnée.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Année like '* " & texteAnnée.Text & "*' "
t=1
end if
End If

If cocheCote Then
if t=1 then
SQL = SQL & " And Gestion Livres!Cote like '* " & texteCote.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Cote like '* " & texteCote.Text & "*' "
t=1
end if
End If

If cocheInventaire Then
if t=1 then
SQL = SQL & " And Gestion Livres!Inventaire like '* " & texteInventaire.Text & "*' "
else
SQL = SQL & " where Gestion Livres!Inventaire like '* " & texteInventaire.Text & "*' "
t=1
end if
End If

SQL = SQL & ";"

listeRésultats.RowSource = SQL

listeRésultats.Requery

End Sub

Je vous conseil d'afficher la requete avant son exécution pour déterminer facilement la source d'erreur.(msgbox(SQL)).
Rejoignez-nous