[Access] Liste déroulante à partir d'une fonction (syntaxe)

Liste déroulante à partir d'une fonction (syntaxe) [Access] - VB/VBA/VBS - Programmation

Marsh Posté le 30-11-2006 à 15:20:42    

Bonjour,
 
je souhaite créer une liste déroulante à partir de données fournies par une fonction (qui devra ramener des données d'une table Oracle non attachée).
 
- Quels sont les champs à remplir dans l'onglet "Données" de la "zone de liste modifiable" ?
(j'ai rien mis dans Source contrôle ni Origine Source et j'ai indiqué le nom de ma fonction sans "=" ni "( )" dans Contenu, c'est bon ?)
 
- Et surtout à quoi doit ressembler la fonction (paramètres ? valeurs à renseigner ? ...)
Je n'arrive pas à trouver d'exemple sur le net.  :(

Reply

Marsh Posté le 30-11-2006 à 15:20:42   

Reply

Marsh Posté le 30-11-2006 à 15:57:58    

Bon, contrairement à ce que j'avais lu qqpart, c'est plutôt dans Source contrôle qu'il faut indiquer le nom de la fonction (et avec un "=" et des "( )" ), puisque comme ça j'ai des choses qui s'affichent dans ma liste déroulante.
Maintenant, reste à connaître la syntaxe pour renseigner cette fonction.  :sweat:  
 
Je ne comprends vraiment pas le sens de Source contrôle et de Origine source, c'est quoi la différence ?  :??:

Reply

Marsh Posté le 04-12-2006 à 11:42:18    

up !
Qui peut m'indiquer la syntaxe VBA pour remplir une liste déroulante (ils appellent ça une "zone de liste" ) sous Access 97 ?
Ca, ça ne marche pas :

Code :
  1. Function RemplirListe()
  2.     ...
  3.     Set rstTemp = conPubs.OpenRecordset("SELECT...", dbOpenDynamic)
  4.     With rstTemp
  5.         Do While Not rstTemp.EOF
  6.             MsgBox rstTemp.Fields("ID_SYS" )  <= OK
  7.             Me.Modifiable13.Items.Add (rstTemp.Fields("ID_SYS" ))  <= KO !!! (avec ou sans Me)
  8.             rstTemp.MoveNext
  9.         Loop
  10.     End With
  11. End Function


 
Et sur quel évènement lancer la fonction RemplirListe() ? Il n'y a pas un truc genre OnLoad ? (pour le moment j'ai mis sur "Sur Clic" )

Reply

Marsh Posté le 04-12-2006 à 12:34:16    

J'ai remplacé

Code :
  1. Me.Modifiable13.Items.Add (rstTemp.Fields("ID_SYS" ))


par

Code :
  1. Forms![Formulaire1]!Modifiable13.RowSource = Forms![Formulaire1]!Modifiable13.RowSource & ";" & rstTemp("ID_SYS" )
  2. Forms![Formulaire1]!Modifiable13.Requery


Ca a l'air de fonctionner, mais ça ne me paraît pas très simple, il y a sûrement mieux ?
 
J'aimerais bien savoir où trouver la syntaxe à part chercher en tâtonnant.  :??: J'ai trouvé des tonnes de doncs basiques pour baser des formulaires sur des tables mais quand il s'agit de gérer ça dans du code VBA il n'y a pas grand chose.  :(  
 
Et ma question "Et sur quel évènement lancer la fonction RemplirListe() ? Il n'y a pas un truc genre OnLoad ? (pour le moment j'ai mis sur "Sur Clic" )" est toujours d'actualité.  ;)

Reply

Marsh Posté le 04-12-2006 à 15:18:50    

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é.

Reply

Marsh Posté le 05-12-2006 à 11:48:34    

Merci déjà pour ces infos utiles.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed