OVH Cloud OVH Cloud

Recherche multicritère bis

3 réponses
Avatar
Anne Sophie
bonjour,
J'ai une table nommée Parution qui est ainsi faite :
Parution (NumPar #, moisPar, annéePar, archivage, numRev#)
Type
NumPar : Num auto
moisPar : liste déroulante
annéePar : date
archive : case a cocher
numrev : num auto clé étrangère

Je souhaiterai obtenir un formulaire de recherche multicritère qui me
permetrait d'affiner ma recherche.
Par exemple : je oudrais savoir si le magazine "epilepcia" du mois de juin
2005 est dans la bibliothèque.

J'espere que c'est assez explicite.
Merci d'avance
Anne Sophie

3 réponses

Avatar
Gilbert
Bonjour,

Voici un exemple du code que j'utilise pour rechercher des ordinateurs ou
imprimantes (le nom de la table à utiliser est passé dans OpenArgs) dans ma
base

Cordialement

--
Gilbert


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

'Recherche par Nom
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
If Right$(Me!Nom, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

'Recherche par Numéro de série
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

'Recherche par Salle
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

'Recherche par adresse IP
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

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

'Recherche par Fournisseur
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
' Hide myself and turn on Hourglass
Me.Visible = False
DoCmd.Hourglass True
' Find out if any books satisfy the Where clause
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCTROW " & _
"[" & OpenArgs & "].[" & strNom & "] " & _
"FROM [" & OpenArgs & "]" & _
" WHERE " & Recherche & ";")
' If none found, then tell them and make me visible to try again
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


"Anne Sophie" a écrit dans le message de
news:
bonjour,
J'ai une table nommée Parution qui est ainsi faite :
Parution (NumPar #, moisPar, annéePar, archivage, numRev#)
Type
NumPar : Num auto
moisPar : liste déroulante
annéePar : date
archive : case a cocher
numrev : num auto clé étrangère

Je souhaiterai obtenir un formulaire de recherche multicritère qui me
permetrait d'affiner ma recherche.
Par exemple : je oudrais savoir si le magazine "epilepcia" du mois de juin
2005 est dans la bibliothèque.

J'espere que c'est assez explicite.
Merci d'avance
Anne Sophie





Avatar
Anne Sophie
Merci Gilbert
mais pourrais tu me décrire ton formulaire? Table attachée, champs ect...
Merci d'avance
Anne So
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici un exemple du code que j'utilise pour rechercher des ordinateurs ou
imprimantes (le nom de la table à utiliser est passé dans OpenArgs) dans
ma

base

Cordialement

--
Gilbert


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

'Recherche par Nom
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
If Right$(Me!Nom, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

'Recherche par Numéro de série
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

'Recherche par Salle
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

'Recherche par adresse IP
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

'Recherche par Marque
If Not IsNothing(Me!Marque) Then
If IsNothing(Recherche) Then
Recherche = "[" & OpenArgs & "].[Ref_Fabricant] Like " & Chr$(34)
&

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

'Recherche par Fournisseur
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
' Hide myself and turn on Hourglass
Me.Visible = False
DoCmd.Hourglass True
' Find out if any books satisfy the Where clause
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCTROW " & _
"[" & OpenArgs & "].[" & strNom & "] " & _
"FROM [" & OpenArgs & "]" & _
" WHERE " & Recherche & ";")
' If none found, then tell them and make me visible to try again
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


"Anne Sophie" a écrit dans le message de
news:
bonjour,
J'ai une table nommée Parution qui est ainsi faite :
Parution (NumPar #, moisPar, annéePar, archivage, numRev#)
Type
NumPar : Num auto
moisPar : liste déroulante
annéePar : date
archive : case a cocher
numrev : num auto clé étrangère

Je souhaiterai obtenir un formulaire de recherche multicritère qui me
permetrait d'affiner ma recherche.
Par exemple : je oudrais savoir si le magazine "epilepcia" du mois de
juin


2005 est dans la bibliothèque.

J'espere que c'est assez explicite.
Merci d'avance
Anne Sophie









Avatar
Gilbert
C'est un formulaire indépendant (pas de source) dans lequel les contrôles
sont aussi indépendants (1 contrôle par champ de recherche) et un bouton
Rechercher qui exécute le code ci-dessous.

--
Gilbert


"Anne Sophie" a écrit dans le message de
news:
Merci Gilbert
mais pourrais tu me décrire ton formulaire? Table attachée, champs ect...
Merci d'avance
Anne So
"Gilbert" a écrit dans le message de news:

Bonjour,

Voici un exemple du code que j'utilise pour rechercher des ordinateurs ou
imprimantes (le nom de la table à utiliser est passé dans OpenArgs) dans
ma

base

Cordialement

--
Gilbert


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

'Recherche par Nom
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
If Right$(Me!Nom, 1) = "*" Then
Recherche = Recherche & Chr$(34)
Else
Recherche = Recherche & "*" & Chr$(34)
End If
End If

'Recherche par Numéro de série
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

'Recherche par Salle
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

'Recherche par adresse IP
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

'Recherche par Marque
If Not IsNothing(Me!Marque) Then
If IsNothing(Recherche) Then
Recherche = "[" & OpenArgs & "].[Ref_Fabricant] Like " & Chr$(34)
&

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

'Recherche par Fournisseur
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
' Hide myself and turn on Hourglass
Me.Visible = False
DoCmd.Hourglass True
' Find out if any books satisfy the Where clause
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCTROW " & _
"[" & OpenArgs & "].[" & strNom & "] " & _
"FROM [" & OpenArgs & "]" & _
" WHERE " & Recherche & ";")
' If none found, then tell them and make me visible to try again
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


"Anne Sophie" a écrit dans le message de
news:
bonjour,
J'ai une table nommée Parution qui est ainsi faite :
Parution (NumPar #, moisPar, annéePar, archivage, numRev#)
Type
NumPar : Num auto
moisPar : liste déroulante
annéePar : date
archive : case a cocher
numrev : num auto clé étrangère

Je souhaiterai obtenir un formulaire de recherche multicritère qui me
permetrait d'affiner ma recherche.
Par exemple : je oudrais savoir si le magazine "epilepcia" du mois de
juin


2005 est dans la bibliothèque.

J'espere que c'est assez explicite.
Merci d'avance
Anne Sophie