Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Encore un problème de recherche multi-critère...

5 réponses
Avatar
gdubois
Bonjour =E0 tous,

Je suis un novice total sur access et en particulier VB. J'ai d=E9j=E0
fait des macro Excel mais c'est tout. Je poste donc un =E9ni=E8me sujet
sur la recherche multi crit=E8re, ne trouvant pas la r=E9ponse =E0 mon
probl=E8me.

J'ai trouv=E9 pas mal de code sur d'autre topic comme celui ci qui est,
pour moi le plus clair.

If Nz(Me.txtNOM,"") <> "" Then
If Nz(strFiltre, "") <> "" Then
strFiltre =3D strFiltre & " AND "
End If
strFiltre =3D strFiltre & "([NOM] LIKE '*" & Me.txtNOM & "*')"
End If

Cependant mes connaissances ne me permettent pas de savoir o=F9 le
placer. Faut il le mettre sur une requ=EAte? sur une text box? sur le
bouton du formulaire qui lance la requ=EAte?

Ce que je veux faire est simple, j'ai trois champs (trois text box),
une requ=EAte et un bouton pour la lancer depuis le fomulaire. Je
voudrais que l'on puisse faire une recherche avec n'importe lequel des
trois champs ind=E9pendamment ou conjointement.

Merci pour votre aide pr=E9cieuse

5 réponses

Avatar
Gilbert
Bonjour,

Voici un exemple de code que j'utilise pour faire une recherche semblable à
la tienne.
J'ai mis le Form_Open car le formulaire peut être ouvert à partir de
plusieurs formulaires différents. La recherche ne se fait donc pas sur les
mêmes tables.

Ajoute un bouton Rechercher sur ton formulaire (ici cmdSearch) et adapte à
tes besoins la procédure ci-dessous.

Option Compare Database
Option Explicit

Dim strNom As String
Dim strNum As String
Dim strSalle As String
Dim strAdrIP As String
Dim strMarque As String
Dim strMateriel As String
'============================= Private Sub Form_Open(Cancel As Integer)
If IsNull(Me.OpenArgs) Then
MsgBox "Paramètre d'ouverture obligatoire.", , Titre_Msg
Cancel = True
Else
Select Case OpenArgs
Case "ordinateurs"
strMateriel = "Ordinateur"
Case "imprimantes"
strMateriel = "Imprimante"
Case "autres Materiels"
strMateriel = "Materiel"
Me.Adresse_IP.Visible = False
Me.Étiquette_Et_IP.Visible = False
Me.Étiquette_IP.Visible = False
Case Else
MsgBox "Paramètre d'ouverture invalide.", , Titre_Msg
Cancel = True
End Select
strNom = "Nom_" & strMateriel
strNum = "Num_serie_" & strMateriel
strAdrIP = "Adresse_IP_" & strMateriel
Me.Etiquette_Titre.Caption = "Recherche d'" & LCase(Me.OpenArgs)

End If
Me.Nom.SetFocus

End Sub
'=============================== Private Sub cmdSearch_Click()
Dim db As Database, rst As Recordset
Dim lngCount As Long, intRtn As Integer
Dim Recherche As String
Dim Msg As String
Dim Style As Integer
On Error GoTo Err_cmdSearch_Click


If Not IsNothing(Me!Nom) Then
If IsNothing(Recherche) Then
Recherche = "[" & strNom & "] Like " & Chr$(34) & Me!Nom
Else
Recherche = Recherche & " AND [" & strNom & "] Like " & Chr$(34) &
Me!Nom
End If
'Ajoute une étoile à la chaine à rechercher si elle n'y est pas
If Right$(Me!Nom, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

If Not IsNothing(Me!Num_serie) Then
If IsNothing(Recherche) Then
Recherche = "[" & strNum & "] Like " & Chr$(34) & Me!Num_serie
Else
Recherche = Recherche & " AND [" & strNum & "] Like " & Chr$(34) &
Me!Num_serie
End If
If Right$(Me!Num_serie, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

If Not IsNothing(Me!Salle) Then
If IsNothing(Recherche) Then
Recherche = "[Nom_Salle] Like " & Chr$(34) & Me!Salle
Else
Recherche = Recherche & " AND [Nom_Salle] Like " & Chr$(34) &
Me!Salle
End If
If Right$(Me!Salle, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

If Not IsNothing(Me!Adresse_IP) Then
If IsNothing(Recherche) Then
Recherche = "[" & strAdrIP & "] Like " & Chr$(34) & Me!Adresse_IP
Else
Recherche = Recherche & " AND [" & strAdrIP & "] Like " & Chr$(34) &
Me!Adresse_IP
End If
If Right$(Me!Adresse_IP, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

If Not IsNothing(Me!Marque) Then
If IsNothing(Recherche) Then
Recherche = "[" & OpenArgs & "].[Ref_Fabricant] = " & Me!Marque
Else
Recherche = Recherche & " AND [" & OpenArgs & "].[Ref_Fabricant] = "
& Me!Marque
End If
' If Right$(Me!Marque, 1) = "*" Then
' Recherche = Recherche & Chr$(34)
' Else
' Recherche = Recherche & "*" & Chr$(34)
' End If
End If

If Not IsNothing(Me!Fournisseur) Then
If IsNothing(Recherche) Then
Recherche = "[Ref_Fournisseur] = " & Me!Fournisseur
Else
Recherche = Recherche & " AND [Ref_Fournisseur] = " & Me!Fournisseur
End If
' If Right$(Me!Fournisseur, 1) = "*" Then
' Recherche = Recherche & Chr$(34)
' Else
' Recherche = Recherche & "*" & Chr$(34)
' End If
End If


' Si pas de critère, rien à faire!
If IsNothing(Recherche) Then
MsgBox "Aucun critère de recherche n'a été spécifié.", vbExclamation,
Titre_Msg
Me!Nom.SetFocus
Else
'Rends invisible le formulaire de recherche
Me.Visible = False
DoCmd.Hourglass True
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCTROW " & _
"[" & OpenArgs & "].[" & strNom & "] " & _
"FROM [" & OpenArgs & "]" & _
" WHERE " & Recherche & ";")
'Si rien trouvé
If rst.RecordCount = 0 Then
DoCmd.Hourglass False
MsgBox "Aucune fiche ne correspond à vos critères de recherche",
vbExclamation, Titre_Msg
Recherche = ""
Me.Visible = True
rst.Close
Else
' Move to last row to get an accurate record count
rst.MoveLast
lngCount = rst.RecordCount
' If more than 20, then ask if they want to only see a summary
If lngCount > 20 Then
Msg = lngCount & " fiches correspondent à vos critères de
recherche." & vbCrLf & _
"Cliquez sur OK pour accéder aux fiches sélectionnées." &
vbCrLf & _
" sur Annuler pour modifier les critères de
recherche."
' " sur Non pour voir la liste récapitulative des
fiches trouvées." & vbCrLf &
Style = vbOKCancel + vbExclamation + vbDefaultButton1

intRtn = MsgBox(Msg, Style, Titre_Msg)
Select Case intRtn
Case vbCancel ' Cancel - Try again
Me.Visible = True
GoTo Exit_cmdSearch_Click
Case vbOK ' Yes - show summary form
DoCmd.OpenForm FormName:=OpenArgs,
WhereCondition:=Recherche
DoCmd.Close acForm, Me.Name
' Forms![ordinateurs].SetFocus
GoTo Exit_cmdSearch_Click
End Select
End If
' Replied NO or not more than 10, show full details
DoCmd.OpenForm FormName:=OpenArgs, WhereCondition:=Recherche
' Close me, and we're done
DoCmd.Close acForm, Me.Name
End If
End If

Exit_cmdSearch_Click:
DoCmd.Hourglass False
Exit Sub

Err_cmdSearch_Click:
MsgBox err.Description
Resume Exit_cmdSearch_Click

End Sub


--
Gilbert


a écrit dans le message de news:

Bonjour à tous,

Je suis un novice total sur access et en particulier VB. J'ai déjà
fait des macro Excel mais c'est tout. Je poste donc un énième sujet
sur la recherche multi critère, ne trouvant pas la réponse à mon
problème.

J'ai trouvé pas mal de code sur d'autre topic comme celui ci qui est,
pour moi le plus clair.

If Nz(Me.txtNOM,"") <> "" Then
If Nz(strFiltre, "") <> "" Then
strFiltre = strFiltre & " AND "
End If
strFiltre = strFiltre & "([NOM] LIKE '*" & Me.txtNOM & "*')"
End If

Cependant mes connaissances ne me permettent pas de savoir où le
placer. Faut il le mettre sur une requête? sur une text box? sur le
bouton du formulaire qui lance la requête?

Ce que je veux faire est simple, j'ai trois champs (trois text box),
une requête et un bouton pour la lancer depuis le fomulaire. Je
voudrais que l'on puisse faire une recherche avec n'importe lequel des
trois champs indépendamment ou conjointement.

Merci pour votre aide précieuse
Avatar
J'ai-Du-Bois
Merci beaucoup pour ton aide...

Vu la taille de ton code je suis sûr d'y avoir ma réponse ;-).

Encore merci,

GD
Avatar
J'ai-Du-Bois
Bonjour,

J'ai trouvé une source interessante pour régler mon problème, source
qui s'avère beaucoup proche du résultat que je veux obtenir in fine.

Le lien du tuto est le suivant :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/

Le lien de la source est celui-ci :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/fichiers/baset uto.zip

J'ai cependant (encore) un problème à finaliser cette deuxième
solution et je n'arrive pas à ouvrir le fichier source car je suis
sous access 97.

Est ce que quelqu'un pourrait ouvrir basetuto.zip et l'enregistrer au
format access 97, si possible?

En vous remerciant d'avance!

GDUBOIS
Avatar
Eric
Bonjour,

là : http://cjoint.com/?gtreACCIjc la base convertie en A97

Bonjour,

J'ai trouvé une source interessante pour régler mon problème, source
qui s'avère beaucoup proche du résultat que je veux obtenir in fine.

Le lien du tuto est le suivant :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/

Le lien de la source est celui-ci :
http://cafeine.developpez.com/access/tutoriel/recherchemulti/fichiers/basetuto.zip

J'ai cependant (encore) un problème à finaliser cette deuxième
solution et je n'arrive pas à ouvrir le fichier source car je suis
sous access 97.

Est ce que quelqu'un pourrait ouvrir basetuto.zip et l'enregistrer au
format access 97, si possible?

En vous remerciant d'avance!

GDUBOIS



--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
J'ai-Du-Bois
Merci beaucoup!!

Enfin une source qui marche!!!

Merci merci merci,

GDUBOIS