IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IHM Discussion :

Forcer un clic dans une zone de liste


Sujet :

IHM

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Forcer un clic dans une zone de liste
    Bonjour,

    J'ai quelques soucis avec le controle zone de liste. J'ai un formulaire basé sur une table et une zone de liste (contenant les données de la table) qui me permet de changer d'enregistrement. J'arrive à sélectionner une ligne dans la liste via vba mais je n'arrive pas à forcer un clic afin d'afficher les données de l'enregistrement sélectionné. Mon formulaire me sert à gérer des membres. Par exemple, si je sélectionne un membre dans la liste (ses données sont donc affichées dans les champs) et que je le retire de la liste, je n'ai aucun soucis pour faire disparaitre l'enregistrement de la zone de liste mais les données affichées dans les champs sont celles du membres que je viens d'enlever.

    J'utilise le code suivant pour sélectionner la première ligne de la liste :

    lstmembres.Selected(0) = True
    J'aimerais forcer un clic pour que les données affichées dans les champs soient celles de la ligne sélectionnée et non plus celles du membres que je viens de retirer de la liste.

    J'ai un 2ème problème, je change la requête de la zone de liste selon une sélection dans une liste modifiable qui me sert à filtrer ma liste de membre par "Membres" ou "Ancien membres" (entre autres). J'aimerais trouver un moyen pour mettre à jour le contenu de ma liste si par exemple je change le statut d'un "Ancien membre" en "Membre" et donc celui-ci n'a plus rien à faire dans la liste des "Anciens membre" affichée puisque qu'il ne l'est plus.

    Merci d'avance pour votre aide

  2. #2
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    J'ai pas bien compris
    qu'est ce que tu appelle "enlever de la liste"

    pour la suite essaye quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mon_sous_formulaire.requery
    -------------------Simplifi----------comme si tout était simple--------

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Et fait par "enlever de la liste" j'entends ne plus afficher un des enregistrement parce qu'il ne réponds plus au critère de la requête sur laquelle est basée la zone de liste.

    Je m'explique, ma zdl contient des membres, mais uniquement les membres actifs de l'association. Je n'utilise pas de suppression directement dans la table mais je marque un membre comme ancien et donc ma liste n'affiche pas ces membres.

    Donc si je change le statut d'un membre de la liste en ancien membre, il ne répond plus au critère, je rafraichi mon formulaire et la requête avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    me.refresh
    lstmembres.requery
    Le membre n'est donc plus affiché dans la liste mais les champs affiche toujours les données de ce membres et le fait de sélectionner la première ligne de ma zone de liste après mise à jour de celle-ci n'est pas équivalent à un clic dans la liste.

    Autrement dit, j'aimerais après ma ligne de code "lstmembres.requery" ajouter une commande qui aurait le même effet que si je cliquais moi-même dans la liste.

    Je sais qu'on peut utiliser un call liste_click mais je n'ai pas de code lié à cet évènement. Pour mettre à jour mes champs par rapport à la sélection dans la liste, j'utilise l'évènement AfterUpdate de la liste.

    J'espère avoir été plus clair.

    Encore une question, mais d'abord je vais essayer d'expliquer clairement comment fonctionne mon formulaire. Mon formulaire dispose donc d'une zone de liste basée sur une requête et à côté de champs liés à ma table membres. Lorsque je clique sur un membre dans la liste, les données le concernant s'affiche dans les champs. Je n'ai pas de formulaire supplémentaire pour la gestion des membres, c'est-à-dire que je gère la modification et l'ajout via ces même champs. Quand un enregistrement est affiché, je peux le modifier directement et pour l'ajout j'ai simplement ajouter un bouton via l'assistant pour ajouter un enregistrement et lorsque je clique sur celui-ci, les champs sont vidés et je peux ajouter un nouveau membre sans devoir valider l'ajout avec un bouton. Bien sûr cela me pose des problème notamment pour tester que les champs devant obligatoirement être remplis le soient.

    J'en viens à ma question, comment gérer ce nouvel enregistrement ?

    J'imagine qu'Access considère l'ensemble des champs comme un enregistrement alors quel(s) évènement(s) utiliser afin de tester si les champs obligatoires ont bien été remplis alors que je n'utilise pas de bouton pour valider cet enregistrement.

    En fait je me rend compte que cette façon de gérer mes enregistrement n'est pas évidente et je sais bien qu'en me servant d'un autre formulaire pour gérer l'ajout j'aurais bien plus facile de cadenasser mes tests. Toutefois avant de me résigner à utiliser cette méthode j'aimerais quand même essayer.

    J'espère que vous pourrez m'aider...

  4. #4
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    C'est un peu ce que je pensais,
    tu rafraichis la liste déroulante mais pas le sous formulaire qui affiche, comme tu n'as pas détruit les valeurs du membre qui n'est plus actif, c'est normal qu'il apparaisse encore
    si les données ne sont pas dans le sous formulaire mais dans le fomulaire lui-même alors le petit code se transforme en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    me.requery 'ou bien
    me.rowsource.requery
    je suis pas très sur mais il me semble que refresh est seulement un rafraichissement d'écran et pas une ré-interrogation des tables

    Suite: contrairement à ce que tu crois, chaque champ de formulaire a des évènements associés, tu peux donc dans ton formulaire universel tester à chaque sortie de zone si la case est remplie, si les valeurs te plaisent, etc
    tu peux aussi faire ça directement dans les proprétés de champ dans la définition de la table "null interdit"
    tu peux encore le faire en macros, ou en VB pour les cas sophistiqués
    -------------------Simplifi----------comme si tout était simple--------

  5. #5
    Rédacteur/Modérateur
    Avatar de Jeannot45
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2004
    Messages
    3 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 871
    Points : 8 489
    Points
    8 489
    Par défaut
    Bonjour,

    Si j'ai un peu compris le problème il s'agirait d'une liste déroulante qui "pilote" l'affichage des données du sous formulaire

    As-tu simplement regardé du coté Champ Père (nom de la liste déroulante dans ton formulaire) et Champ Fils (Champ lié dans le sous formulaire - autrement dit le champ CodeMembre)

    Regarde par là avant de te lancer dans l'écriture de lignes de VB
    Jeannot

    Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., Sources VBA

    Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre

  6. #6
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Tout d'abord bonne année 2008, mes meilleurs voeux à tous

    Désolé d'avoir laissé vos réactions sans réponse de ma part si longtemps.

    @ Simplifi :

    En fait, je n'ai pas de sous formulaire mais comme l'a compris Jeannot45 une liste qui "pilote" l'affichage du formulaire (pas de sous formulaire !)

    Bref, j'ai toujours des soucis avec ces "raffraichissements" des données.
    Exemple, la requête affichant la liste des membres dans la zone de liste comporte certains critères comme le fait que le membre ait payé ou pas sa cotisation. Lorsqu'on arrive à une nouvelle année, comme ce fut récement le cas , je remet les cotisation à zéro et donc la liste n'affiche plus aucun membre (logique, c'est le résultat souhaité) mais par contre les champs affiche tout de même les données d'un enregistrement.

    Ce que j'ai changé depuis la dernière fois, c'est que j'ai créer un nouveau formulaire pour ajouter et modifier un enregistrement, beaucoup plus simple pour cadennacer l'encodage (tests des champs obligatoires,...) et les modifications !

    Mon problème reste toujours, dans certains, l'affichage des données incorrectes dans les champs.

    Exemple, lorsqu'un enregistrement ne correspond plus au(x) critère(s) d'affichage de la zone de liste, je la rafraichi, le membre ne s'affiche plus mais bien ses données dans les champs. Je voudrais donc pouvoir sélectionné le premier membre de la liste rafraichie.

    Dite-le moi si je ne suis pas clair

    J'ai déjà donné cet exemple mais je pense qu'il reflète bien mon problème, d'où le titre de mon post : comment forcer un clic dans la zone de liste.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    J'ai été un peu absent du forum! excuses!
    Je reprends mon niveau de compréhension:
    tu as une zone de liste et tu voudrait qu'elle pilote le contenu du formuliare lui-même
    je pense que le souci est là
    à mon sens, il vaut mieux un formulaire avec seulement la (ou les) liste déroulante et un sous formulaire sur lequel on fait le requery
    pour que les affichages correspondent à la liste déroulante, il est nécessaire de travailler le concordance des requêtes. Pour cela, j'enregistre le contenu de la liste. Comme ça, je peux travailler la requête de la liste et la requête du sous formulaire jusqu'à ce que le résultat me convienne.
    il n'est pas obligatoire de passer par du VB pour redéfinir le contenu du sous formulaire, mais si tu choisis VB alors c'est la propriété rowsource qui doit contenir du SQL
    -------------------Simplifi----------comme si tout était simple--------

  8. #8
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour tes éclaircissement, je vais essayer de modifier mon formulaire afin d'avoir un sous-formulaire pour afficher les données.

    Mais qu'entends-tu par : "Pour cela, j'enregistre le contenu de la liste." ?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Bonjour
    si tu rempli la liste déroulante par l'intermédiaire de la fenêtre propriétés, après les trois points de suspension, tu as un générateur de requête et quand tu le ferme, il écrit le SQL dans 'contenu'
    par exemple: "SELECT Entreprises.raison_sociale, Entreprises.Ville_siège, Entreprises.N°_Entreprise FROM Entreprises;"
    (Ici, je n'ai pas mis de balises codes, c'est bien le texte exemple)
    Pour enregistrer, je clique juste sur l'icône enregistrer avant de fermer et dans ce cas Access ne met plus du SQL mais le nom de la requête dans 'contenu'
    par exemple: liste_entreprises
    -------------------Simplifi----------comme si tout était simple--------

  10. #10
    Candidat au Club
    Inscrit en
    Décembre 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Décembre 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

Discussions similaires

  1. Comment se passer du clic dans une zone de liste
    Par fremarnat dans le forum IHM
    Réponses: 3
    Dernier message: 30/10/2013, 08h14
  2. [AC-2003] Envoie d'un mail via un double-clic dans une zone de liste
    Par voyel dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/06/2011, 13h45
  3. [AC-2003] Comment déterminer le clic dans une zone de liste ?
    Par guidav dans le forum IHM
    Réponses: 4
    Dernier message: 19/11/2010, 18h04
  4. Réponses: 7
    Dernier message: 30/10/2008, 18h49
  5. clic dans une zone de liste pour accéder à un enregistrement
    Par emilie-cedatra dans le forum VBA Access
    Réponses: 7
    Dernier message: 19/11/2007, 08h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo