Bonjour à tous,
Je reviens avec le même problème !
J'utilise Access 2007.
J'ai un formulaire sans source avec un contrôle liste contenant une liste de personnes et 2 boutons, l'un appelant un formulaire en mode ajout et l'autre appelant ce même formulaire en mode modification. Lorsque je sélectionne une ligne dans ma zone de liste, la valeur de la clé primaire de ma table usagers est stockée en mémoire (id_usager). Je me sert donc de cette valeur pour appeler mon formulaire de modification.
Jusque là je n'ai pas de soucis, je tenais juste à détailler le fonctionnement de mon formulaire.
Mon problème est toujours lié à ce satané contrôle liste.
Je vais essayer d'être le plus clair possible. Imaginons que j'ai dans ma liste 2 noms trié par ordre alphabétique :
Albert (id_usager = 1), Bernard (id_usager = 2)
J'ouvre mon formulaire et sur Form Load, j'exécute la ligne de code suivante :
lstUsagers.Selected(0) = True
Ce qui a pour effet de sélectionner la première ligne (encore bien !) mais également de se positionner sur l'enregistrement de la personne sélectionnée.
Donc la valeur stockée en mémoire est celle de Albert (id_usager = 1). Si je clique sur le bouton qui appelle le formulaire basé sur ma table usagers en mode modification, ce sont bien les données d'Albert qui s'affichent. Jusque là, pas de problème donc.
Revenons sur mon formulaire avec le contrôle liste. J'ai un champ texte qui me permet de rechercher dans la liste un usager par son identifiant. Cela a pour effet de changer le rowsource de la zdl et de n'y afficher que l'usager recherché. Après chaque changement de rowsource, j'exécute ces lignes de code :
1 2
| lstUsagers.Requery
lstUsagers.Selected(0) = True |
Il y a un bouton permettant de réafficher tous les usagers. Jusque là, ça fonctionne aussi.
Au chargement de mon formulaire c'est donc Albert qui est sélectionné. Si je tape dans mon champ de recherche son identifiant, la liste n'affiche plus que lui et en cliquant sur le bouton modifier, ce sont bien ses informations qui s'affichent dans le formulaire de modification. C'est donc l'effet désiré.
Bien, imaginons que je viens d'ouvrir mon formulaire principal et que je tape l'identifiant de Bernard (id_usager = 2) dans mon champ de recherche. Ma liste n'affiche plus que lui et il est sélectionné (en surbrillance donc) mais je n'ai pas cliqué dessus. C'est là que ça se corse car si je clique sur le bouton modifier, ce sont les données d'Albert qui s'affichent dans mon formulaire de modif. Mais si je clique sur Bernard dans la liste et que je clique à nouveau sur le bouton modifier, là ça fonctionne !
En gros, le fait de sélectionner une ligne dans le contrôle liste par le code n'a pas du tout le même effet que lorsque l'on clique sur une ligne. La valeur de la clé primaire stockée en mémoire ne change pas.
Est-ce que quelqu'un a une solution à ce problème qui me hante 
Merci d'avance pour votre aide
Partager