Compléments pour Microsoft Access

http://access.fr.free.fr/

Recherche sur plusieurs champs (Formulaire)

Description 

Cette fonction permet de retourner une chaîne de texte contenant les données déjà saisie dans une table en fonction de critères portant sur plusieurs champs.

 
Synthaxe 

fVerifMultiValue(strTable, strFld)

La synthaxe de la fonction fVerifMultiValue comprend les éléments suivants :

ElémentsDescription
strTableExpression de chaîne correspondant au nom de la table contenant les données.
strFldTableau contenant des valeurs qui marchent par 2, en premier le nom du champ, en deuxième la valeur du champ. Cet argument peut donc être constitué de 2 ou 4 ou 6 ou 8 ou ... données.
 
Exemple 


Imaginons la table "tblPersonne" avec les données suivantes :


images des données de la table


Ensuite, imaginons la saisie suivante dans un formulaire :


exemple du formulaire


Maintenant, si l'on place le code suivant sur le bouton OK :

Private Sub btnOK_Click()
    MsgBox fVerifMultiValue("tblPersonne", _
        "NomPers", Me.NomPers, "PrenomPer", Me.PrenomPer)
End Sub


On obtiendra le message suivant :


Message affiché

 

Code de la fonction 


Function fVerifMultiValue(strTable$­­­­­­­­­­­, ParamArray strFld() As Variant) As Variant

    Dim rst As DAO.Recordset
    Dim fld As DAO.Field
    Dim inFld As Integer
    Dim strRst As String
    Dim strWhere As String
    Dim strMsg As String
    Dim strRecord As String


    strRst = "Select * From " & strTable
    strWhere = ""

    For intFld = 0 To UBound(strFld) Step 2
        If intFld = 0 Then
            strWhere = " WHERE [" & strFld(intFld) & "] = "
            If IsNumeric(strFld(intFld + 1)) Then
                strWhere = strWhere & strFld(intFld + 1)
            Else
                strWhere = strWhere & """" & strFld(intFld + 1) & """"
            End If
        Else
            strWhere = strWhere & " AND [" & strFld(intFld) & "] = "
            If IsNumeric(strFld(intFld + 1)) Then
                strWhere = strWhere & strFld(intFld + 1)
            Else
                strWhere = strWhere & """" & strFld(intFld + 1) & """"
            End If
        End If
    Next

    strRst = strRst & strWhere

    Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)

    With rst
        If Not .BOF Then
            strMsg = "La table contient les données similaires suivantes :" & vbCrLf
            .MoveFirst
            Do Until .EOF
                For Each fld In .Fields
                    strRecord = strRecord & fld.Value & vbTab
                Next
                strMsg = strMsg & vbCrLf & vbTab & strRecord
                strRecord = ""
                .MoveNext
            Loop
        Else
            strMsg = "Aucun élément similaire..."
        End If
    End With
    rst.Close: Set rst = Nothing

    fVerifMultiValue = strMsg

End Function