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

VBA Access Discussion :

Concevoir une liste qui en alimente une autre (d'un formulaire vers un sous formulaire)


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut Concevoir une liste qui en alimente une autre (d'un formulaire vers un sous formulaire)
    Bonjour
    Dans le but de faire évoluer une base de donnée (de type gestion de collections ...... Initialement mono- collection que je désire faire évolué en multi-collection) et après un certain nombre de recherches je suis tombé sur un excelent Tuto "Concevoir une liste qui en alimente une autre" (http://argyronet.developpez.com/offi...ectitemlistAB/) qui décrit et correspond exactement à mes besoins.
    J'ai réalisé le Pas à Pas pour bien la comprendre avant d'implanter cette méthode dans ma propre base.
    Toutefois si la méthode est opérationnelle sur un formulaire unique, mon besoin est que "cmbCatégorie" mette à jour "cmbMetiers" qui ce trouve sur un sous-formulaire (appelé "SFMetier", le formulaire accueillant "cmbCatégorie" s'appelle quand à lui "FCatégorie")

    D'approche autodidacte je possède des manques dans mon approche et progresse de manière irrégulière en fonction des besoins de l'évolution des bases que je réalise. J'ai bien conscience, après un certain temps de recherche que la solution ce trouve à partir de la ligne : ...cmbMetier3.RowSource = SQL en y insérant "Forms!" .... Mais je ne suis pas arrivé à l'implanter dans cet exemple. Pourriez vous m'aider SVP.
    Je vous remercie d'avance de l’intérêt que vous pourrez porter à mon problème

    Cordialement

    Descriptif des éléments :
    Les tables : TBLCategorie (Clé primaire IDCategorie) et TBLMetier (Clé primaire IDMetier)
    Les listes de choix : cmbCategorie3 et cmbMetier3
    Les formulaires : FCategorie et SFMetier

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub cmbCategorie3_AfterUpdate()
    ''SELECT TBLCategorie.IDCategorie, TBLCategorie.Categorie FROM TBLCategorie ORDER BY TBLCategorie.Categorie;
    ''SELECT TBLMetier.IDMetier, TBLMetier.Metier FROM TBLMetier ORDER BY TBLMetier.Metier;
    Dim lngIDCat   As Long
    Dim SQL        As String
      '' Vérifie que l'on a cliqué sur une catégorie pour éviter le NULL
      If Not IsNumeric(Me!cmbCategorie3) Then Exit Sub
      '' Affecte la valeur de IDCategorie à la variable lngIDCat
      lngIDCat = Me!cmbCategorie3
      '' Construit la chaîne SQL avec la catégorie concernée
      SQL = "SELECT IDMetier, Metier, IDCategorie FROM TBLMetier WHERE IDCategorie =" & lngIDCat & " ORDER BY Metier"
       MsgBox "Vous venez de changer de collection"
      '' Affecte la chaîne SQL à la liste des métiers
    cmbMetier3.RowSource = SQL
      '' Déverrouille la liste des métiers
    cmbMetier3.Enabled = True
      '' Donne le focus la liste des métiers
    cmbMetier3.SetFocus
      '' Déroule la liste des métiers
      Me!cmbMetier3.Dropdown
    End Sub

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonsoir,

    Si tu peux poster un zip de ta BDD dans une version compatible avec Access2000, je veux bien t'accompagner dans ta progression.

    PS : Vois cette documentation

    Les syntaxes d'appel : Interaction des formulaires et états. (loufab)

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Bonsoir,
    avant tout merci de votre réponse .... cela fait 2 jours que je dépouille les forums (dont le lien que vous m'avez donné en PJ) et fais moultes essais totalement stériles.
    Je joint le fichier d'essais converti en Access2000 ...... Malheureusement ayant travaillé sur Access2007 la conversion semble ne plus rendre compatible le code.
    Toutefois voici le descriptif des éléments.
    Le formulaire "00_pas a pas" est le formulaire d'essais (et fonctionnel ... en 2007 du moins)
    Le formulaire "FCategorie" est le formulaire de base qui supportera le sous formulaire
    Le formulaire "SFMetier" est le sous-formulaire.
    Le code est implanté sur le menu déroulant "catégorie" du formulaire "FCategorie" / Evenement "Après MAJ"

    Cordialement

  4. #4
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    C'était bien un problème de référencement.

    Voici la syntaxe de l'évènement "Àprès Mise à Jour" de cmbCategorie3 (formulaire principal)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub cmbCategorie3_AfterUpdate()
    Dim lngIDCat   As Long
    Dim SQL        As String
     
      '' Vérifie que l'on a cliqué sur une catégorie pour éviter le NULL
      If Not IsNumeric(Me!cmbCategorie3) Then Exit Sub
      '' Affecte la valeur de IDCategorie à la variable lngIDCat
      lngIDCat = Me!cmbCategorie3
      '' Construit la chaîne SQL avec la catégorie concernée
     
      SQL = "SELECT IDMetier, Metier, IDCategorie FROM TBLMetier WHERE IDCategorie =" & lngIDCat & " ORDER BY Metier"
       MsgBox "Vous venez de changer de collection"
      '' Affecte la chaîne SQL à la liste des métiers
    Me.[SF pour Formulaire3].Form.Modifiable3.RowSource = SQL
      '' Déverrouille la liste des métiers
    Me.[SF pour Formulaire3].Form.Modifiable3.Enabled = True
      '' Donne le focus la liste des métiers
    Me.[SF pour Formulaire3].Form.Modifiable3.SetFocus
      '' Déroule la liste des métiers
    Me.[SF pour Formulaire3].Form.Modifiable3.Dropdown
    End Sub
    Autres points :

    - évite les caractères spéciaux dans le nom des contrôles. À ce sujet : conventions typographiques ;
    - demande le compactage systématique de tes BDD lors de la fermeture
    Outils/Options/onglet Général : cocher la case Compacter lors de la fermeture.

    À la prochaine.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 12
    Par défaut
    Bonsoir
    Un grand merci pour les modifications apportées au code de base ……… Il est parfaitement fonctionnel et il ne me reste plus qu’a bien le comprendre pour l’implanter correctement dans ma base.

    Quelques petits constats malgré tout :

    Lors du premier essai, le couple formulaire/sous-formulaire fonctionnait correctement. Toutefois après fermeture et ouverture (compactage réalisé) le formulaire ce bloque avec le message ci-dessous en guise d’explication.

    Pour contourner le problème j’ai placé une MsgBox sur l’événement « Sur chargement » du formulaire principal ce qui semble « Dégripper » le formulaire qui ne pose plus dès lors de difficulté à l’ouverture (effectivement, c'est une solution un peut biscornue). Il est a noter que ce phénomène était déjà présent sur mon « pas à pas » issue du tuto (d’où la MsgBox qui s’ouvre à chaque changement de liste Catégorie) ……… Bon, je pense que le problème doit venir de mon environnement.

    Un autre point qui tiens plus de l’affinage pour rendre le couple formulaire/sous-formulaire plus efficace serait de ne pas dérouler la seconde liste automatiquement mais d’appeler directement le 1er enregistrement proposé. En effet, lorsque l’on sélectionne une catégorie, la liste Métier propose des choix (c’est sa fonction après tout) ….. que l’on valide. Mais à ce moment-là les données de la table attachées au sous-formulaire ne sont pas encore chargées (on le remarque bien en surveillant le compteur d’enregistrement) et donc les données résultantes du choix sont fausses … il faut re-sélectionner une seconde fois pour enfin avoir les données adéquates. Pareillement si l’on referme la liste métier sans faire de choix et que l’on désire par la suite y faire une sélection … les données dans le menu reste visibles mais ne permettent plus de mettre à jour le sous formulaire (il faut resélectionner la catégorie pour pouvoir rendre de nouveau la liste métier opérationnelle) …… D’où mon impression qu’il serait mieux de « forcer » l’affichage du premier enregistrement que proposera la liste métier ……… A ce niveau je vais dans un premier temps essayer de trouver la solution (après tout … le plaisir du résultat se trouve en partie dans l’effort pour y parvenir.)

    Enfin, et cela reste à confirmer, j’ai l’impression que plus le nombre de métiers est grand dans une catégorie donnée, plus le chargement des données est long …… si cela s’avère exact ce système sera-t-il compatible avec ma base qui comprend plusieurs milliers de fiches.

    Voilà pour ce bilan de fin de post. Je laisse en PJ une version fonctionnelle (convertie en Access2003) de cette base d’essais pour qui voudrez s’en inspirer.

    Encore une fois je vous remercie pour votre aide.

    Cordialement.
    Fichiers attachés Fichiers attachés

  6. #6
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 596
    Par défaut
    Bonjour,

    Cette fois, je ne peux plus lire ta BDD jointe avec ma version Access2000.
    Peux-tu y remédier ?

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

Discussions similaires

  1. Concevoir une liste qui en alimente une autre
    Par argyronet dans le forum IHM
    Réponses: 17
    Dernier message: 14/08/2020, 18h21
  2. [AC-2010] Question pour Concevoir une liste qui en alimente une autre
    Par ThaHardy dans le forum Access
    Réponses: 14
    Dernier message: 15/06/2015, 12h14
  3. [AC-2007] Concevoir une liste qui en alimente une autre, probleme
    Par Gauthier33 dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/02/2015, 09h53
  4. Réponses: 13
    Dernier message: 06/02/2013, 15h53
  5. [AC-2007] Inserer la valeur dans une table avec une liste qui en alimente une autre
    Par DidoFido dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/12/2009, 12h39

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