Partager via


Valeurs d’argument de code de propriété RowSourceType (fonction définie par l’utilisateur)

La fonction Visual Basic que vous créez doit accepter cinq arguments. Le premier doit être déclaré en tant que contrôle et les autres en tant que données de type Variant. La fonction elle-même doit renvoyer une donnée de type Variant.

Functionfunctionname (fldAs Control, idAs Variant, rowAs Variant, colAs Variant, codeAs Variant) As Variant

Les cinq arguments suivants sont indispensables à la procédure Function :

Argument Description
Fld Variable de type contrôle faisant référence à la zone de liste ou à la zone de liste modifiable à compléter.
id Valeur unique identifiant le contrôle à remplir. Cette valeur est particulièrement utile si vous voulez utiliser la même fonction définie par l’utilisateur pour plusieurs zones de liste ou zones de liste modifiable tout en pouvant les différencier. (L’exemple affecte à cette variable la valeur de la fonction Timer).
ramer La ligne à remplir (en partant de zéro).
col La colonne à remplir (en partant de zéro).
code Constante intrinsèque spécifiant le type d’information souhaité.

Remarque

[!REMARQUE] Dans la mesure où pour insérer des éléments dans une liste, Microsoft Access appelle plusieurs fois une fonction définie par l'utilisateur, il est nécessaire d'enregistrer des informations entre les appels. Pour cela, nous vous conseillons d'utiliser des variables Static.

Microsoft Access appelle la fonction définie par l’utilisateur en utilisant successivement des valeurs différentes dans l’argument code pour spécifier les informations requises. L’argument code peut utiliser les constantes intrinsèques suivantes :

Constante Signification Valeur retournée
acLBInitialize Initialize Différente de zéro si la fonction parvient à établir la liste, sinon,False (0) ou Null.
acLBOpen Ouvrir ID différent de zéro si la fonction parvient à établir la liste, sinon False ou Null.
acLBGetRowCount Nombre de lignes Nombre de lignes dans la liste (peut être égal à zéro) ; -1 si inconnu.
acLBGetColumnCount Nombre de colonnes Nombre de colonnes contenues dans la liste (doit être différent de zéro) ; doit correspondre à la valeur de la feuille des propriétés.
acLBGetColumnWidth Largeur de colonne Largeur (en twips) de la colonne spécifiée par l’argument col ; -1 pour utiliser la largeur par défaut.
acLBGetValue Entrée de liste Entrée de la liste affichée dans la ligne et la colonne spécifiées par les arguments lgn et col.
acLBGetFormat Chaîne de format Chaîne de format à utiliser pour mettre en forme l’entrée de liste affichée dans la ligne et la colonne spécifiées par les arguments ligne et col ; -1 pour utiliser le format par défaut.
acLBEnd Fin (cette valeur est toujours utilisée lors du dernier appel d’une fonction définie par l’utilisateur) Rien.
acLBClose (Non utilisé) Non utilisé.

Access appelle votre fonction définie par l’utilisateur une seule fois pour acLBInitialize, acLBOpen, acLBGetRowCount et acLBGetColumnCount. Il initialise la fonction définie par l’utilisateur, ouvre la requête et détermine le nombre de lignes et de colonnes.

Access appelle votre fonction définie par l’utilisateur deux fois pour acLBGetColumnWidth : une fois pour déterminer la largeur totale de la zone de liste ou de la zone de liste déroulante et une deuxième fois pour définir la largeur de colonne.

Le nombre de fois que les constantes acLBGetValue et acLBGetFormat de votre fonction définie par l’utilisateur sont appelées pour saisir les entrées de liste et mettre en forme les chaînes varie en fonction du nombre d’entrées, de la tendance de l’utilisateur à faire défiler la liste et d’autres facteurs.

Access appelle la fonction définie par l’utilisateur pour acLBEnd lorsque le formulaire est fermé ou chaque fois que la zone de liste ou la zone de liste déroulante est interrogée.

Chaque fois qu’une valeur particulière (telle que le nombre de colonnes) est requise, le renvoi de la valeur Null ou d’une valeur non valide entraîne l’arrêt de l’appel de la fonction définie par l’utilisateur avec ce code.

Conseil

Utilisez la structure de code Sélectionner la casse de l’exemple comme modèle pour vos propres fonctions définies par l’utilisateur de propriété RowSourceType .

Exemple

La fonction définie par l’utilisateur suivante retourne la liste des quatre lundis suivants la date du jour. Pour appeler cette fonction à partir d’un contrôle de zone de liste, entrez ListMondays comme paramètre de propriété RowSourceType et laissez le paramètre de propriété RowSource vide.

Public Function ListMondays(fld As Control, id As Variant, _
    row As Variant, col As Variant, code As Variant) _ 
    As Variant 

    Dim Offset      As Integer
    Dim WeekdayDate As Date 
 
    Select Case code 
        Case acLBInitialize     ' Initialize. 
            ListMondays = True 
        Case acLBOpen           ' Open. 
            ListMondays = Timer ' Unique ID. 
        Case acLBGetRowCount    ' Get rows. 
            ListMondays = 4 
        Case acLBGetColumnCount ' Get columns. 
            ListMondays = 1 
        Case acLBGetColumnWidth ' Get column width. 
            ListMondays = -1    ' Use default width. 
        Case acLBGetValue       ' Get the data. 
            Offset = Abs((9 - Weekday(Date)) Mod 7) 
            WeekdayDate = DateAdd("d", _
                Offset + 7 * row, Date) 
            ListMondays = Format(WeekdayDate, _
                "mmmm d") 
    End Select 

End Function

L'exemple suivant utilise un tableau de taille statique pour enregistrer les noms des bases de données du répertoire courant. Pour appeler cette fonction, tapez ListeDesMDBs comme paramètre de la propriété RowSourceType et laissez le paramètre de la propriété RowSource vierge.

Public Function ListMDBs(fld As Control, id As Variant, _ 
    row As Variant, col As Variant, code As Variant) _
    As Variant 
    
    Static dbs(127) As String
    Static Entries  As Integer 
    Dim ReturnVal   As Variant 

    ReturnVal = Null 
    Select Case code 
        Case acLBInitialize     ' Initialize. 
            Entries = 0 
            dbs(Entries ) = Dir("*.MDB") 
            Do Until dbs(Entries) = "" Or Entries >= 127 
                Entries = Entries + 1 
                dbs(Entries) = Dir 
            Loop 
            ReturnVal = Entries 
        Case acLBOpen           ' Open. 
            ' Generate unique ID for control. 
            ReturnVal = Timer 
        Case acLBGetRowCount    ' Get number of rows. 
            ReturnVal = Entries 
        Case acLBGetColumnCount ' Get number of columns. 
            ReturnVal = 1 
        Case acLBGetColumnWidth ' Column width. 
            ' -1 forces use of default width. 
            ReturnVal = -1 
        Case acLBGetValue       ' Get data. 
            ReturnVal = dbs(row) 
        Case acLBEnd            ' End. 
            Erase dbs 
    End Select 
    ListMDBs = ReturnVal 
    
End Function

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.