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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 007
    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 007
    Points : 24 578
    Points
    24 578
    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 007
    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 007
    Points : 24 578
    Points
    24 578
    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

+ Répondre à la discussion
Cette discussion est résolue.

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