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

Contribuez Discussion :

Trier les valeurs d'une ZDL en fonction du choix dans une autre ZDL dans le même sous-formulaire continu


Sujet :

Contribuez

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité à 65 ans
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité à 65 ans

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut Trier les valeurs d'une ZDL en fonction du choix dans une autre ZDL dans le même sous-formulaire continu
    Bonjour à toutes et tous,

    Je pensais poster une question pour un problème (lire infra) et puis la solution est venue...

    En fait, je souhaitais pouvoir sélectionner pour chaque ligne d'un sous-formulaire en continu, une valeur dans une première zone de liste déroulante (ZDL) et en fonction de celle-ci, la seconde ZDL aurait d'abord présenté les valeurs liées puis le reste des autres valeurs.

    Après pas mal d'essais et errances, je viens d'y arriver, aidé par des informations obtenues sur ce site et ma question peut se transformer en contribution qui pourrait aider d'autres développeurs.

    Utilisant Access 2010 (mais rien n'empèche de voir pour les autres versions) pour mon application personnelle "ACHATS", j'ai la table "Dépense" dont la clef est "dDépens_K" et la table subordonnée "Ligne" dont la clef est composée de "dDépens_Kn" (lié 1 à plusieurs à "dDépens_K") et "oLigne_K".

    Pour chaque ligne, je dois préciser la Nature et l'Usage, qui dans mon cas particulier, me sont utiles pour établir et suivre mon budget pour la rénovation d'un bâtiment. Dans la majorité des cas, un Usage est sélectionné en fonction de la Nature. Par ex. pour la Nature = "10, Outils", il y a plusieurs Usages "1010, Outils électriques", "1020, Outils de peinture", etc. Certains Usages ne sont pas liés à une Nature précise (comme "6090 Divers divers").

    Pour gèrer mes données, le formulaire "frmDépense" permet de sélectionner la Dépense à traiter et d'en afficher les lignes liées dans un sous-formulaire "sfrmLigne", contenu dans le contrôle "ctlSFrmLigne", avec les champs liés père : "dDépens_K" et fils : "dDépens_Kn".
    Le sous-formulaire est en continu, chaque ligne ayant 2 ZDL : "cboNature" pour la Nature et "cboUsage" pour l'Usage.
    Dans la requête "qscboUsage" alimentant "cboUsage", j'ai placé un champ calculé, non visible et premier trié en croissant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Champ : TRI: VraiFaux(([Forms]![frmDépense]![sfrmLigne].[Form]![cboNature]>0) Et ([Forms]![frmDépense]![sfrmLigne].[Form]![cboNature]<100) Et (Int([iUsage_K]/100)=[Forms]![frmDépense]![sfrmLigne].[Form]![cboNature]); Vrai; Faux)
    Cela fonctionne et même mieux qu'un simple filtre lors de mes étapes préliminaires. D'avance, je remercie celui ou celle qui m'indiquerait des améliorations à apporter ou des avis sur les essais précédents.

    En effet ma première étape fut de filtrer les Usages en fonction de Nature, mais alors je ne pouvais sélectionner d'autres Usages. Dans la requête "qscboUsage", j'ai utilisé un champ calculé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Champ : NatID: Int([iUsage_K]/100)
    Critères : Forms![frmDépense]![sfrmLigne].[Form]![cboNature]
    Cela fonctionnait plus ou moins bien mais j'avais des problèmes d'affichage incomplet : seules certaines lignes affichent l'Usage, les autres ont une ZDL vide. Dès que je place le curseur sur un champ de cette ligne, la ZDL affiche correctement ses informations. Et les lignes (in)complètes sont différentes dès que je sélectionne un champ dans une autre ligne. J'ai quand même tenté ma formule Filtre+Tri qui n'a pas ce problème d'affichage. Quelqu'un peut-il m'expliquer ?

    Pour information "A Ne Pas Faire", j'ai eu plusieurs essais infructueux où j'obtenais pour chaque ligne de la dépense une question du style requête paramétrée avec un libellé comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Formulaires!frmDépense!ctlSFrmLigne.cboNature
    et parfois la fermeture immédiate du formulaire sans autre avis. J'ai fini par utiliser la bonne syntaxe en incluant ".[Form]" et en utilisant le nom du sous-formulaire au lieu du nom du contrôle le contenant.
    Syntaxes ne fonctionnant pas :
    Forms]![frmDépense]![ctlSFrmLigne]![cboNature] (pas de [Form])
    Forms]![frmDépense]![ctlSFrmLigne].[cboNature] (idem et un point au lieu de "!")
    Forms![frmDépense]![ctlSFrmLigne].[Form]![cboNature] (usage du nom du contrôle au lieu du nom de formulaire)

    Merci de m'avoir lu...

    Michel-H.

  2. #2
    Membre du Club
    Homme Profil pro
    Retraité à 65 ans
    Inscrit en
    Juin 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité à 65 ans

    Informations forums :
    Inscription : Juin 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut Précision utile : requery
    Bonjour,

    Après avoir utilisé mes formulaires et sous-formulaires, j'ai constaté qu'au premier passage lors de la création d'un nouvel enregistrement, après avoir précisé la Nature, la ZDL des Usages n'est pas triée en fonction de la Nature juste sélectionnée.

    La solution avec l'évènement "Après MAJ" de cette cboNature :
    La ZDL des Usages tient alors immédiatement et parfaitement compte de mon choix de Nature.

    Cela m'a fait aussi penser à la solution d'un problème que j'avais lorsque j'ajoutais une entrée à une table qui alimente une ZDL de mon formulaire actif. L'évènement "Sur double clic" de cette ZDL contient le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub cboNature_DblClick(Cancel As Integer)
    strSource = Me.cboNature.RowSource
    DoCmd.OpenForm "frm_Maint_Nature"
    Me.cboNature.RowSource = strSource
    End Sub
    A la fermeture du formulaire de maintenance de cette table, la nouvelle entrée ne se trouvait (presque jamais) dans ma ZDL, même avec la 3ème ligne qui est censée rafraichir le contenu de la ZDL. Question de synchronicité peut-être ? Mon truc était de refaire double-clic sur la ZDL pour réouvrir ce formulaire de maintenance, le fermer immédiatement et ainsi ma nouvelle entrée apparaissait dans la ZDL.
    J'ai maintenant une solution efficace en ajoutant à la fin du code de l'évènement ci-dessus la ligne :
    Le contenu de la ZDL reflète immédiatement l'ajout d'une entrée.

    Bonne journée,

    Michel

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/02/2015, 10h46
  2. Réponses: 0
    Dernier message: 31/07/2013, 05h13
  3. Réponses: 4
    Dernier message: 23/06/2010, 10h17
  4. Réponses: 11
    Dernier message: 08/01/2010, 22h10
  5. Réponses: 4
    Dernier message: 20/08/2009, 03h22

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