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 :

comment synchroniser une zone de listes modifiable avec des sous-formulaires.


Sujet :

IHM

  1. #1
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut comment synchroniser une zone de listes modifiable avec des sous-formulaires.
    Bonjourà tous,

    Voici le petit problème qui m'occupe actuellement:

    Je développe une application destinée à gérer (achats, abonnements, etc) les ouvrages de la dr (insee) où je travaille.

    J'ai fait un formulaire 'doc' avec 3 sous-formulaires 'periodiques', 'ouvrages', 'divers'.
    ils contiennent une table dont chaque enregistrement est un livre (magasines, parutions, etc) avec tous ce qui le concerne; achats, fournisseurs, abonnements, prix ttc,, tva, etc, etc.

    Une zone de listes modifiable contenant le nom des fournisseurs permettra de pointer rapidement à un endroit voulu dans les sous-formulaires, car les enregistrements sont nombreux.

    Je voudrais synchroniser la zone de liste modifiable avec les enregistrements des sous-formulaires de manière à ce que, quand on clique sur un fournisseur, on aille directement sur la 1e occurrence dudit fournisseur dans le sous-formulaire.

    J'ai mis ça dans un évènement sur clic de la zone de liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim rs As Object
    Set rs = Me.RecordsetClone
    rs.findfirst "[fournisseur] = '" & [fournisseurs] & "'"
    DoCmd.RunCommand acCmdRecordsGoToNew
    Mais ça ne fonctionne pas; le sous-formulaire reste sur l'enregistrement initial.
    Y a qq'chose qui m'échappe, ce qui est normal vu que je suis nul en vba!

    A dichat sans faute!
    DonQuiShoote.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 009
    Points : 24 580
    Points
    24 580
    Par défaut
    Bonjour l'insee !

    Pourquoi ne pas utiliser le code fournisseur dans les liens entre le form et chaque sous-form, le filtre sera alors automatique ?

    Sinon pour ce que tu souhaite mettre en place.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim rst As Recordset
    Set rst = Me.NomDuSousForm.Form.Recordset
    rst.FindFirst "monchamp='" & Me.maliste & "'"

    Tout simplement
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Salut loufab,
    Je n'utilise access et vba que depuis qq mois; avant je suis resté de nbses années scotché à sas et au C, ce qui fait que je suis néophyte en la matière.

    Le problème est que je ne sais pas dans quel sous-formulaire se trouve l'utilisateur quand il clique dans la zone de listes. donc comment mettre 'Me.NomDuSousForm.Form.Recordset'
    Tu dis, si je te comprends bien, qu'il suffirait que je lie le champs fournisseur de la table qui remplit la zone de liste avec le champ fournisseur de la table principale pour que la synchronisation soit automatique ?
    J'aurais peut-être pu remplir la zone de listes directement avec le champ fournisseurs de la table principale mais comme il y a parfois des 10e d'enregistrements du même fournisseur, je me suis dit (peut-être à tort) que ça n'irait pas

  4. #4
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Je reprends après être allé casser la croûte.
    Le morceau de code que tu m'as donné merde parce que la zone de listes est au niveau du formulaire principal et si je met dans ce code le nom d'un sous-formulaire, il ne la trouve plus.

    et si je fais ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Dim rs As Recordset
    Set rs = Me.Form.periodiques1.Recordset
    rs.FindFirst "[fournisseur] = '" & [Form_Abonnements 2007 onglets.fournisseurs] & "'"
    End Sub
    j'ai un message de méthode inconnu pour findfirst !
    Mon code ne doit pas être très orthodoxe (bien que je n'ai rien contre eux)!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    L'acces au formulaire parent se fait par Donc pour accéder à un contrôle du parent cela donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.parent!nomDu Controle

  6. #6
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    en utilisant parent et fils cela me résoudrait le problème que je ne sais pas au moment du clic dans la zone de listes sur quel sous formulaires se trouve l'utilisateur.
    Mais pour le moment ça ne marche pas.
    peut-être dois-je mettre fils à la place de nomdusousform dans le set ?

    Il doit y avoir un problème au niveau de DAO;
    quand j'écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set rs = Me.periodiques1.Form.Recordset
    rs.findfirst "fournisseur = '" & Me.Parent!fournisseurs & "'"
    Il ne reconnait plus la méthode findfirst, par contre il reconnait find ???

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Citation Envoyé par DonQuiShoote
    Le problème est que je ne sais pas dans quel sous-formulaire se trouve l'utilisateur quand il clique dans la zone de listes. donc comment mettre 'Me.NomDuSousForm.Form.Recordset'
    Si ta zone de liste est dans le formulaire principal, l'utilisateur (le focus réellement) est sur celui-ci.
    Citation Envoyé par DonQuiShoote
    J'aurais peut-être pu remplir la zone de listes directement avec le champ fournisseurs de la table principale mais comme il y a parfois des 10e d'enregistrements du même fournisseur, je me suis dit (peut-être à tort) que ça n'irait pas
    Avec un group by sur le nom, tu ne devrais récupérer qu'une seule entrée par fournisseur.

  8. #8
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Et si je fais ainsi; prendre directement le champ fournisseurs de la table principale pour remplir ma zone de liste, et en utilisant group; cela résoudra le problème de synchro ? Quand je cliquerai sur un item de la liste, les sous formulaire pointeront direct dessus sans que j'ai autre chose à faire ?
    ça me semble trop paradisiaque!

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 009
    Points : 24 580
    Points
    24 580
    Par défaut
    On peut éventuellement "triché".

    Pour cela il te faut d'une part mettre comme source du form principal la table Fournisseur.
    Place un controle contenant le n° unique du fournisseur (que tu cache).

    Crée une zone de liste modifiable (déroulante) avec l'assistant ou tu choisira la 3ème option (rechercher....)

    Quand ceci est fait tu n'a plus qu'a mettre pour chaque sous form le champ père N° fournisseur / et champ fils le champ N° fournisseur du sous-form.

    Lorsque tu change de fournisseur par la liste déroulante les sous-form font automatiquement le lien et n'affiche que les enregistrements concernant ce fournisseur.

    Cette solution te va-t-elle ?

    PS : C'est quand que vous publiez le ICHTTS ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Non; ça me complique trop, car les sous-form sont destinés à afficher les enregistrements par genre (periodiques, ouvrages, magasines, etc).
    Je pourrais donc en rester à ma solution bancale à condition de comprendre pourquoi le debug ne reconnait pas findfirst; il accepte par contre find.
    Je n'y connait que pouic dans l'histoire dao.

    C'est les indices mensuels que tu veux ?
    C'est un autre service qui s'en occupe.
    Je suis assistant technique aux etudes. et comme je suis célibataire j'en ai rien à faire (des indices).
    Par contre les divorcés en sont très friands!
    Ad talure,
    DonQuiShoote

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Le marqueur du genre est-lié au fournisseur ou à une autre zone de liste?
    Si il est lié au fournisseur tu peux le rajouter dans la zone de liste en deuxième ou troisième colonne est y accéder par NomDeZone.column(i)
    Sinon tu peux lier tes sous form par le n° de fournisseur et le genre.

  12. #12
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    A un autre champ de la table; il y a un champ genre avec une liste de 3 choix périodiques, ouvrages et divers. au démarrage, des requêtes balancent dans les sous-formulaires en fonction de ce qu'il y a dans le champ genre.

    La table existe depuis longtemps. Mais depuis peu les responsables des études ont décidés de se servir d'access pour gerer des données telles que les clients, les ouvrages qu'on achète et des trucs comme ça, et c'est moi qui ait hérité du bébé.

    Y a un raseur qui vient de me tenir la jambe pendant 1h au téléphone ce qui explique la lenteur de la réaction!

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 009
    Points : 24 580
    Points
    24 580
    Par défaut
    Citation Envoyé par DonQuiShoote
    Non; ça me complique trop, car les sous-form sont destinés à afficher les enregistrements par genre (periodiques, ouvrages, magasines, etc).
    Je pourrais donc en rester à ma solution bancale à condition de comprendre pourquoi le debug ne reconnait pas findfirst; il accepte par contre find.
    Je n'y connait que pouic dans l'histoire dao.

    C'est les indices mensuels que tu veux ?
    C'est un autre service qui s'en occupe.
    Je suis assistant technique aux etudes. et comme je suis célibataire j'en ai rien à faire (des indices).
    Par contre les divorcés en sont très friands!
    Ad talure,
    DonQuiShoote
    Pour reconnaitre le findfirst il faut déclarer la référence Ms DAO 3.6 dans l'éditeur VBA menu Outils/références...
    Soit on le place avant ADOX soit on précise à la déclaration de l'objet que c'est du DAO.
    Comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim rst as DAO.recordset
    Le Find c'est de l'ADO findfirst c'est du DAO. c'est bête non ?!

    l'ICHTTS ne sert pas qu'au divorcé heureusement ! on s'en sert également pour la revalorisation de certain contrat et je l'attend avec impatience...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  14. #14
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Là, tu m'aides! J'y cours essayer ça!
    Après je m'en go to the chez moi;
    ce sera donc la suite au prochain n°.
    Bonne soirée et à dichat sans faute.

    ps: çui-là qui m'a demandé un truc sur l'insee, je sais plus si c'est toi, ne m'a pas répondu; est-ce les indices mensuels de la consommation qu'il veut ?

  15. #15
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Bon, avec Dim rst as DAO.recordset
    le debug me dit type défini par l'utilisateur non défini.
    Je suis en réseau local, et les administrateurs réseaux ne sont pas mes amis; donc je ne peux pas utiliser l'option 'outils' (dans mon outil y a pas de références).
    Chuis coincé alorssse !?!
    Je vais regarder ce que ça donne en liant mon petit fichier de la zone de liste avec le fichier principal.
    Allez à demain! Gigot!

    Je n'avais pas vu la réponse sur les indices :
    Voilà le lien sur l'internet national; il sont du 25/02/2007.
    http://www.insee.fr/fr/indicateur/in...indic_cons.asp
    Je sais bien qu'ils ne servent pas que pour les divorcés! M'enfing!

    Ad talure,
    DonQuiShoote

  16. #16
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Salut,
    Et nous voilà au lendemain de la veille; étonnant, non !?!

    J'ai rempli la zone de listes avec le champ fournisseurs de la table principale; avec group by, il ne me met pas les doublons; c'est ok, mais quand je clique sur un fournisseur dans la zone de listes, rien ne se passe. C'est sans doute parce que les sous-formulaires pointent sur un clone de la table principale, et non sur la table elle-même; io no sè !?!

    Je continue mes investigations; passionnant! On voit de ces chÔses!
    DonQuiShoote.

  17. #17
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Oleff
    Le marqueur du genre est-lié au fournisseur ou à une autre zone de liste?
    Si il est lié au fournisseur tu peux le rajouter dans la zone de liste en deuxième ou troisième colonne est y accéder par NomDeZone.column(i)
    Sinon tu peux lier tes sous form par le n° de fournisseur et le genre.
    Ca je ne comprends pas une fois !?!

    Je remplis mes sous-formulaires avec des requêtes; dans la table principale j'ai donc un champ 'genre' qui offre 3 cas; periodiques, ouvrages et divers, et je filtre avec ça; dans le 1er sous-formulaires (je les ai mis dans des onglets), j'ai les periodiques, dans le 2e les ouvrages et dans le 3e les divers.
    Je ne comprends pas le marqueur du genre ce que c'est; je suis très limité en vba; je ne travaille sur access que depuis 3 mois.
    Merci pout ton aide.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 427
    Points : 520
    Points
    520
    Par défaut
    Désolé de ce manque de clarté.
    Pour essayer de faire mieux :
    visiblement le genre est marqué par un champ texte,
    si pour un fourniseur tu n'as qu'un genre, tu peux ajouter à la source de ta zone de liste "SELECT idFournisseur, nomFournisseur, genre FROM taTable"
    Dans les sources de tes sous-formulaires, tu mets "SELECT taTable.* FROM taTable WHERE genre = 'leGenre'"
    Et tu lies sur l'id ou le nom du fournisseur.

  19. #19
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    En ce qui concerne le problème que le debug me dit 'type défini par l'utilisateur non défini' quand je mets dim as DAO.recordset;
    J'ai déjà utilisé cette instruction dans une autre application et là elle est acceptée sans discussion !?! J'ai dû faire une boulette qq'part !

  20. #20
    Nouveau membre du Club Avatar de DonQuiShoote
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Oleff
    Désolé de ce manque de clarté.
    Pour essayer de faire mieux :
    visiblement le genre est marqué par un champ texte,
    si pour un fourniseur tu n'as qu'un genre, tu peux ajouter à la source de ta zone de liste "SELECT idFournisseur, nomFournisseur, genre FROM taTable"
    Dans les sources de tes sous-formulaires, tu mets "SELECT taTable.* FROM taTable WHERE genre = 'leGenre'"
    Et tu lies sur l'id ou le nom du fournisseur.
    Au premier coup d'oeil; ça a l'air d'être le cas; apparemment, on commande qu'un genre à chaque fournisseur, je n'en suis pas trop sûr, car la table est relativement grosse.
    Je vais essayer; pas sûr que j'y arrive!
    Je n'ai pas d'id fournisseur; juste un champ fournisseur.
    A quel endroit du code des sous-form je mets le select ?
    Comme je n'ai qu'un champ fournisseur; je ne peux pas faire de lien !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Réponses: 10
    Dernier message: 21/09/2010, 16h53
  2. Réponses: 0
    Dernier message: 10/10/2007, 16h40
  3. Réponses: 2
    Dernier message: 27/08/2007, 12h19
  4. Réponses: 1
    Dernier message: 18/02/2007, 11h07
  5. Réponses: 5
    Dernier message: 06/09/2005, 02h50

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