Share via


Méthode Application.DLookup (Access)

Utilisez la fonction DLookup pour obtenir la valeur d’un champ particulier à partir d’un jeu d’enregistrements spécifié (un domaine).

Syntaxe

expression. DLookup (Expr, Domain, Criteria)

expressionUne variable qui représente un objetApplication.

Paramètres

Nom Requis/Facultatif Type de données Description
Expr Obligatoire Chaîne Expression qui identifie le champ dont vous souhaitez renvoyer la valeur. Il peut s'agir d'une expression chaîne identifiant un champ dans une table ou une requête, ou d'une expression qui effectue un calcul sur les données de ce champ. Dans expr, vous pouvez inclure le nom d'un champ de table, un contrôle de formulaire, une constante ou une fonction. Si expr inclut une fonction, elle peut être intégrée ou définie par l’utilisateur, mais pas une autre fonction d’agrégation de domaine ou SQL.
Domaine Obligatoire Chaîne Expression chaîne identifiant les enregistrements qui constituent le domaine. Il peut s'agir d'un nom de table ou d'un nom de requête qui ne requiert aucun paramètre.
Criteria Facultatif Variant Expression chaîne facultative servant à limiter la plage des données sur laquelle porte la fonction DLookup. Par exemple, criteria est souvent équivalent à la clause WHERE d'une expression SQL sans le mot WHERE. En cas d'omission de criteria, la fonction DLookup évalue expr par rapport à l'intégralité du domaine. Tout champ inclus dans les critères doit également être un champ dans le domaine ; sinon, la fonction DLookup retourne une valeur Null.

Valeur renvoyée

Variant

Remarques

Utilisez la fonction DLookup pour afficher la valeur d’un champ qui n’est pas dans la source d’enregistrement de votre formulaire ou état. Par exemple, supposez que vous disposez d'un formulaire fondé sur une table Détails Commandes. Le formulaire affiche les champs OrderID, ProductID, UnitPrice, Quantity et Discount . Toutefois, le champ ProductName se trouve dans une autre table, la table Products. Vous pouvez utiliser la fonction DLookup dans un contrôle calculé pour afficher le ProductName sur le même formulaire.

La fonction DLookup retourne une valeur de champ unique en fonction des informations spécifiées dans critères. Bien que critère soit un argument facultatif, si vous ne fournissez pas de valeur pour les critères, la fonction DLookup retourne une valeur aléatoire dans le domaine.

Si aucun enregistrement ne répond aux critères ou si le domaine ne contient aucun enregistrement, la fonction DLookup renvoie une valeur Null.

Si plusieurs champs répondent aux critères, la fonction DLookup retourne la première occurrence. Il est recommandé de choisir un critère qui garantira l'unicité de la valeur de champ renvoyée par la fonction DLookup. Vous pouvez utiliser une valeur de clé primaire pour ce critère, comme [EmployeeID] dans l'exemple suivant pour garantir que la fonction DLookup renvoie une valeur unique :

Dim varX As Variant 
varX = DLookup("[LastName]", "Employees", "[EmployeeID] = 1")

Que vous utilisiez la fonction DLookup dans une macro ou un module, une expression de requête ou un contrôle calculé, vous devez construire l’argument critère avec soin pour vous assurer qu’il sera évalué correctement.

Utilisez la fonction DLookup pour spécifier des critères dans la ligne Critères d’une requête, dans une expression de champ calculé dans une requête ou dans la ligne Mettre à jour vers dans une requête de mise à jour.

Vous pouvez aussi utiliser la fonction DLookup dans une expression de contrôle calculé d’un formulaire ou d’un état, si le champ à afficher ne fait pas partie de la source d’enregistrements sur laquelle le formulaire ou l’état est fondé. Par exemple, supposons que vous ayez un formulaire Détails de commande basé sur une table Détails de commande avec une zone de texte appelée ProductID qui affiche le champ ProductID . Pour rechercher ProductName à partir d’une table Products en fonction de la valeur de la zone de texte, vous pouvez créer une autre zone de texte et définir sa propriété ControlSource sur l’expression suivante :

=DLookup("[ProductName]", "Products", "[ProductID] =" _ 
     & Forms![Order Details]!ProductID)

Conseil

  • Bien que la fonction DLookup vous permette d’afficher la valeur d’un champ dans une table externe, il peut s’avérer plus efficace de créer une requête contenant les champs nécessaires et de baser votre formulaire ou votre état sur cette requête.
  • Vous pouvez aussi utiliser l'Assistant Recherche pour trouver des valeurs dans une table externe.

Exemple

L’exemple suivant retourne les informations de nom du champ CompanyName de l’enregistrement répondant aux critères. Le domaine consiste en la table Shippers (Messagers). L’argument critère limite le jeu d’enregistrements résultant à ceux pour lesquels ShipperID est égal à 1.

Dim varX As Variant 
varX = DLookup("[CompanyName]", "Shippers", "[ShipperID] = 1")

Dans l'exemple qui suit, extrait de la table Shippers, le contrôle ShipperID du formulaire fournit l'argument critère pour la fonction DLookup. Remarquez que la référence au contrôle n'est pas entourée des guillemets caractérisant les chaînes. Ceci garantit qu'à chaque appel de la fonction DLookup, Microsoft Access extraira la valeur en cours de ce contrôle.

Dim varX As Variant 
varX = DLookup("[CompanyName]", "Shippers", "[ShipperID] = " _ 
    & Forms!Shippers!ShipperID)

L’exemple suivant utilise une variable, intSearch, pour obtenir la valeur .

Dim intSearch As Integer 
Dim varX As Variant 
 
intSearch = 1 
varX = DLookup("[CompanyName]", "Shippers", _ 
    "[ShipperID] = " & intSearch)

Les exemples suivants montrent comment utiliser différents types de critères avec la fonction DLookup.

    ' ***************************
    ' Typical Use
    ' Numerical values. Replace "number" with the number to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = number")

    ' Strings.
    ' Numerical values. Replace "string" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= 'string'")

    ' Dates. Replace "date" with the string to use.
    variable = DLookup("[FieldName]", "TableName", "[Criteria]= #date#")
    ' ***************************

    ' ***************************
    ' Referring to a control on a form
    ' Numerical values
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = " & Forms!FormName!ControlName)

    ' Strings
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = '" & Forms!FormName!ControlName & "'")

    ' Dates
    variable = DLookup("[FieldName]", "TableName", "[Criteria] = #" & Forms!FormName!ControlName & "#")
    ' ***************************

    ' ***************************
    ' Combinations
    ' Multiple types of criteria
    variable = DLookup("[FieldName]", "TableName", "[Criteria1] = " & Forms![FormName]![Control1] _
             & " AND [Criteria2] = '" & Forms![FormName]![Control2] & "'" _
            & " AND [Criteria3] =#" & Forms![FormName]![Control3] & "#")
    
    ' Use two fields from a single record.
    variable = DLookup("[LastName] & ', ' & [FirstName]", "tblPeople", "[PrimaryKey] = 7")
            
    ' Expressions
    variable = DLookup("[Field1] + [Field2]", "tableName", "[PrimaryKey] = 7")
    
    ' Control Structures
    variable = DLookup("IIf([LastName] Like 'Smith', 'True', 'False')", "tableName", "[PrimaryKey] = 7")
    ' ***************************
```The following example shows how to use **DLookUp** in a Do Loop. It demonstrates how to build the Criteria string on each pass through the loop.

```vba
' The loop verifies data from an input data set, in this case Operating System names, 
' against those contained in a Master List.

Do Until I1 > NRec1
    ' An apostrophe is concatenated at the beginning and at the end of a datum referenced by "rs1!OS", 
    ' which is then concatenated to build the entire criteria string.
    Str_2 = "'" & rs1!OS & "'"
    Str_1 = "[OS] = " & Str_2
    
    J1 = DLookup("[ID]", "tbl_81_Operating_Systems_Master_List", Str_1)
    
    If IsNull(J1) = True Then
        ' If an OS name is not found, then a flag is set and the name of the unknown OS is output to a table.
        rs3.AddNew
        rs3.OS = rs1!OS
        rs3.Update
        Err_Fl = False

    End If

    rs1.MoveNext
    I1 = I1 + 1

Loop

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.