Récapitulons.
Pour une combobox (liste déroulante), on a les propriétés suivantes :
- Source contrôle (.ControlSource) = nom du champ de table qui sera mis à jour quand tu vas sélectionner ta valeurs dans la liste (ne sert que si ton formulaire est lié à une table)
- Origine source (.RowSourceType) = nature du contenu de ta liste (Table/Requête, valeurs fixes « en dur » ou encore une liste de champs d'une table). Cette propriété permet d'interpréter correctement la propriété Contenu.
- Contenu (.RowSource) = nom d'une table ou d'une requête existante dans MSAccess ou requête SQL écrite explicitement. Les données récupérées servent à remplir la liste.
Et la propriété .Value = valeur dépendante de la colonne liée (= .BoundColumn) et du choix sélectionné dans la liste.
Logiquement, chaque fois que tu changes la propriété RowSource, une mise à jour de l'affichage de la liste (son contenu) doit se faire.
S'il ne se fait pas, il faut utiliser .Requery.
Dans le cas de l'utilisation d'une fonction de remplissage, elle ne doit pas apparaître dans les propriétés .RowSource ou .SourceControl.
Ta fonction doit être lancée au chargement du formulaire (Form_Load) ou chaque fois que nécessaire (changement de contenu dans conPubs ?).
Si ton formulaire n'est lié à aucune table, .ControlSource doit être vide.
J'ai pas trop le temps de détailler mais j'espère t'avoir un peu éclairé.