Je suppose que le Me.Key fait référence à un contrôle situé dans la section des détails de votre formulaire. Dans ce cas, et afin de lister toutes les valeurs prises par le contrôle, vous devrez parcourir tous les enregistrements. L'une des façons de le faire peut être:
Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
me.seltop = m_position
debug.print me.key
next m_position
Malheureusement, votre verrez votre blincker tout en naviguant sur toutes les lignes. Vous pouvez bien sûr trouver des utilitaires 'screenFreezer' pour VBA sur le net (il y en a un appelé LockWindowUpdate, aussi loin que je me souvienne).
Une autre solution consiste à parcourir le clone du jeu d'enregistrements sous-jacent (l'exploration du jeu d'enregistrements provoquera le même comportement d'écran que précédemment). En supposant que le contrôle Me.Key est lié à la colonne du jeu d'enregistrements, le code pourrait être « clé »:
Dim rsClone as DAO.recordset
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
rsClone.moveFirst
Do while not rsClone.EOF
debug.print rsCLone.fields("Key")
rsClone.moveNext
Loop
Endif
set rsClone = nothing
Mon préféré est le premier, avec l'option « geler » ajouté. Votre code peut gérer les valeurs seltop et selheight du formulaire. Cela signifie que vous pouvez parcourir spécifiquement les enregistrements sélectionnés par les utilisateurs et/ou, une fois que tous les enregistrements ont été consultés, revenir à la sélection d'enregistrement d'origine.
EDIT:
Après @ commentaire de Ben, j'ajoute que si votre « myControl » le contrôle est dans la section des détails et est non liée, alors vous ne serez pas en mesure de gérer une valeur par ligne. Le contrôle aura la même valeur pour toutes les lignes lorsque le formulaire est affiché comme "continu". Si votre contrôle "myControl" est lié au champ "myField" d'un jeu d'enregistrements, l'un des codes suivants incrémenteront en même temps la valeur de contrôle "myControl" et la valeur du champ "myField". Vous serez que en mesure d'avoir une valeur différente sur chaque ligne:
Solution 1:
Dim m_position as Long
for m_position = 1 to Me.recordset.recordcount
me.seltop = m_position
me.controls("myControl") = m_position
next m_position
Solution 2:
Dim rsClone as DAO.recordset, _
i as long
set rsClone = Me.recordsetclone
if rsClone.EOF and rsClone.BOF then
Else
rsClone.moveFirst
i = 1
Do while not rsClone.EOF
rsClone.fields("myField") = i
rsClone.update
rsClone.moveNext
i = i+1
Loop
Endif
set rsClone = nothing
Vous pouvez naviguer dans les enregistrements du formulaire via la navigation dans le jeu d'enregistrements. Mais je suggère que vous pourriez considérer s'il vaut mieux ouvrir le jeu d'enregistrements une fois et naviguer via .FindFirst ou s'il est préférable d'ouvrir vos enregistrements limités aux enregistrements pour chaque ligne. –