Il y a deux parties à ce que vous avez demandé:
une . Je veux dire, ayant la zone de liste déroulante pré-chargé avec des valeurs ...
Pour cela, il n'y a rien que vous devez faire - il suffit de régler la rowsource appropriée. Pour ajouter des valeurs à la liste, vous devrez faire un peu de travail, mais pour éviter cela, vous n'avez absolument rien à faire.
b. et forçant l'utilisateur à ne sélectionner qu'une seule de ces valeurs sans pouvoir taper lui-même.
Comme expliqué dans les autres réponses, vous devez définir la propriété LimitToList sur TRUE. Maintenant, les messages d'erreur que vous obtiendrez ne sont pas si bons, donc vous voudrez probablement définir l'événement NotInList pour qu'il soit plus convivial pour l'utilisateur. Quelque chose comme cela pourrait être approprié:
Private Sub MyCombo_NotInList(NewData As String, Response As Integer)
MsgBox Chr(34) & NewData & Chr(34) & _
" is not one of the choices in the list.", _
vbInformation, "Select from the list"
Me!MyCombo.Undo
Response = acDataErrorContinue
End Sub
Si vous voulez ajouter à la liste, c'est là que vous souhaitez gérer cela aussi, mais puisque vous n'avez pas, il vous suffit de vous préoccuper d'informer l'utilisateur du problème (c'est-à-dire, les protéger du message d'erreur par défaut cryptique).
On appelle généralement une « liste déroulante » au lieu d'un "zone de liste déroulante" –
Not in Access.Et, en effet, le nom montre les origines du contrôle dans les outils de développement Microsoft, comme dans Windows 16 bits, la fonctionnalité a été fournie à l'origine par une zone de texte en combinaison avec une liste, d'où "combo box" la zone de texte et la zone de liste dans un seul contrôle. –