Carte du site
 Remerciements
 Netiquette
 Bugs
 Tables
 Requêtes
 Formulaires
 États (rapports)
 Modules
 APIs
 Chaînes
 Date/Time
 Général
 Ressources
 Téléchargeables

 Termes d'usage

Forms: Fonction de rappel pour une zone de liste à plusieurs colonnes

Author(s)
Dev Ashish

Fonction de rappel pour une zone de liste à plusieurs colonnes

    Les zones de liste d'Access (List Boxes) ont toujours supportées les fonctions de rappel (callback) comme spécification à leur propriété  RowSourceType. Une fonction de rappel vous donne plus de latitude sur la présentation (la fonction de rappel est invoquée pour chaque colonne) et permet également de circonvenir aux limitations de nombre maximal de caractères dans une liste de valeurs. Pour plus d'informations, voir le fichier d'aide sous Miscallaneous Constants.

    Remplir une zone de liste à multiples colonnes est légèrement différent du code présenté dans le fichier d'aide. Nous utilisons encore une fonction de rappel, mais y ajoutons quelques détails:

  1. acLBGetColumnCount: Retourne le nombre de colonne désiré, 1 ou plus.
  2. acLBGetRowCount:  Si on utilise une entête, ajouter un au nombre réel de lignes désirées.
  3. acLBGetColumnWidth: Retourne la largeur, en twips, de chaque colonne.

    Dans tous les cas, il faut considérer la colonne et la ligne dont Access s'enquiert. Access vous fourni ces informations au travers des arguments varRow et varCol. Pour un cas où il y a trois colonnes, vous constatez qu'on doit se référer à ces paramètres pour bien identifier la valeur à être retournée par notre fonction.

 ' ************* Code Start **************
Function fListFill(ctl As Control, varID As Variant, varRow As Variant, _
                varCol As Variant, varCode As Variant) As Variant
'Fonction "Callback" pour remplir une liste
'
Dim varRet As Variant
Const TWIPS = 1440
Const COLUMN_COUNT = 3
 
    On Error GoTo ErrHandler
    Select Case varCode
 
        Case acLBInitialize
            varRet = True
 
        Case acLBOpen
            varRet = Timer
 
        Case acLBGetRowCount
            varRet = UBound(atResults)
 
        Case acLBGetColumnWidth
           varRet = True
 
        Case acLBOpen
            varRet = Timer
 
        Case acLBGetRowCount
            varRet = UBound(atResults)
 
        Case acLBGetColumnWidth
            'La largeur de chaque colonne
            'en TWIPS, conversion faite à l'aide de
            'unités de mesure VBA.
            Select Case varCol
                Case 0:
                    varRet = 2.8 * TWIPS
                Case 1:
                    varRet = 0.5 * TWIPS
                Case 2:
                    varRet = 0.5 * TWIPS
            End Select
 
        Case acLBGetColumnCount
            varRet = COLUMN_COUNT
 
        Case acLBGetValue
            'Retourne la valeur à passer selon la colonne
            'qui est à remplir
            Select Case varCol
                Case 0:
                    ' La première ligne contient l'entête
                    If varRow = 0 Then
                        varRet = "Path"
                    Else
                        varRet = atResults(varRow).strFullPath
                    End If
                Case 1:
                    If varRow = 0 Then
                        varRet = "Size"
                    Else
                        varRet = atResults(varRow).lngSize
                    End If
                Case 2:
                    If varRow = 0 Then
                        varRet = "Type"
                    Else
                        varRet = atResults(varRow).strTypeName
                    End If
            End Select
    End Select
 
    fListFill = varRet
ExitHere:
    Exit Function
ErrHandler:
    Resume ExitHere
End Function
' ************* Code End **************

© 1998-2001, Dev Ashish, All rights reserved. Optimized for Microsoft Internet Explorer