1. #1
    Membre du Club
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    septembre 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2014
    Messages : 86
    Points : 45
    Points
    45

    Par défaut Modification en direct de la requête source d'un sous-formulaire

    Bonjour bonjour,

    Voici mon (nouveau) problème. Je crée un sous-formulaire de recherche et comme les recherches peuvent s'effectuer sur des objets différents, les propriétés qui s'affichent sont différents.
    Voici une image qui pourra aider à comprendre:
    __________________________________________________________________________________
    Nom : Requete et sous form.png
Affichages : 33
Taille : 25,4 Ko
    _____________________________________________________________________________________

    La liste en bas du formulaire est en fait un sous-formulaire donc la propriété "Objet Source" est une requête

    J'ai créé un code sur mise à jour du contrôle Type d'Optique qui modifie cette requête.
    J'arrive à modifier la requête dès que je change le type d'optique; mon problème c'est l'affichage dans le sous-formulaire.

    Les enregistrements affichés sont bien liés à la requête, mais par contre la liste des champs affichés ne change pas.
    Par exemple lorsque je demande d'afficher les miroirs je ne devrais plus avoir la colonne "Focale", mais, par exemple, une colonne "Angle d'incidence".

    Ces colonnes sont bien modifiées dans ma requête mais pas dans mon sous-formulaire...

    Si quelqu'un a une idée... Merci d'avance

    Voici le bout de code concerné (désolée si c'est pas tout propre, je ne suis pas une experte mais j'essaye de m'appliquer):

    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
    '-------------------------------Modification de la Requete R_ListeOptiques------------------------------------
     
      ' Récupération des champs associés au type d'optique
    Set oRds = oDb.OpenRecordset(oString, dbOpenDynaset)
    oChamp = "Tbl_Optique.OptiqueId,Tbl_Optique.OptiqueNum, Tbl_Optique.Etat, Tbl_Optique.Localisation, Tbl_Fabriquants.FabricantNom, Tbl_TypeOptique.IdTypeOptique"
    oRds.MoveFirst
    While Not oRds.EOF
        oChamp = oChamp & ", Tbl_FabriquantReferences." & oRds.Fields("NomCaracteristique").Value
        oRds.MoveNext
    Wend
     
      'Création de la chaine SQL
    oSQL = "SELECT " & oChamp
    oSQL = oSQL & " FROM Tbl_Fabriquants INNER JOIN (Tbl_TypeOptique INNER JOIN (((Tbl_FabriquantReferences INNER JOIN Tbl_FournisseurReference ON Tbl_FabriquantReferences.RefFabrId = Tbl_FournisseurReference.RefFabrId) INNER JOIN Tbl_LigneCommande ON Tbl_FournisseurReference.RefFournId = Tbl_LigneCommande.RefFournId) INNER JOIN Tbl_Optique ON (Tbl_LigneCommande.RefFournId = Tbl_Optique.RefFournId) AND (Tbl_LigneCommande.CommandeId = Tbl_Optique.CommandeId)) ON Tbl_TypeOptique.IdTypeOptique = Tbl_FabriquantReferences.IdTypeOptique) ON Tbl_Fabriquants.FabriquantId = Tbl_FabriquantReferences.FabriquantId"
    oSQL = oSQL & " WHERE Tbl_TypeOptique.IdTypeOptique = " & oNum
     
    oDb.QueryDefs("R_ListeOptiques").SQL = oSQL
     
    Me!sf_ListeOptiques.Form.RecordSource = "R_ListeOptiques"
    Me!sf_ListeOptiques.Requery
    Me!sf_ListeOptiques.Visible = True

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2005
    Messages
    10 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2005
    Messages : 10 495
    Points : 21 352
    Points
    21 352

    Par défaut

    Bonjour,

    Pourquoi tu passes par un objet requête ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     'Création de la chaine SQL
    oSQL = "SELECT " & oChamp
    oSQL = oSQL & " FROM Tbl_Fabriquants INNER JOIN (Tbl_TypeOptique INNER JOIN (((Tbl_FabriquantReferences INNER JOIN Tbl_FournisseurReference ON Tbl_FabriquantReferences.RefFabrId = Tbl_FournisseurReference.RefFabrId) INNER JOIN Tbl_LigneCommande ON Tbl_FournisseurReference.RefFournId = Tbl_LigneCommande.RefFournId) INNER JOIN Tbl_Optique ON (Tbl_LigneCommande.RefFournId = Tbl_Optique.RefFournId) AND (Tbl_LigneCommande.CommandeId = Tbl_Optique.CommandeId)) ON Tbl_TypeOptique.IdTypeOptique = Tbl_FabriquantReferences.IdTypeOptique) ON Tbl_Fabriquants.FabriquantId = Tbl_FabriquantReferences.FabriquantId"
    oSQL = oSQL & " WHERE Tbl_TypeOptique.IdTypeOptique = " & oNum
     
    Me.sf_ListeOptiques.Form.RecordSource = oSQL
    Pourquoi tout le monde se torture à utiliser le point d'exclamation "!" ?

    Le "." apporte plus de souplesse et évite les erreurs.

    Cordialement,
    *
    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
    Membre du Club
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    septembre 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2014
    Messages : 86
    Points : 45
    Points
    45

    Par défaut

    En fait j'ai essayé aussi en passant directement par le SQL mais ça ne marche pas non plus..
    Au départ il faut définir une source à mon sous-formulaire (ça marche pas quand je le laisse indépendant)du coup j'ai défini une requête et j'ai continué à l'utiliser. Mais effectivement je pourrais ne plus passer par elle après.
    Y a-t-il un moyen de changer la source alors que le formulaire est indépendant?

    Quand au point d'exclamation, je reconnais que des fois je le mets et des fois non... En fait ça vient surtout de mon inexpérience.
    Demain j'arrête

  4. #4
    Membre du Club
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    septembre 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2014
    Messages : 86
    Points : 45
    Points
    45

    Par défaut

    Personne n'a d'idée?

    J'ai l'impression que mon formulaire prend la structure de mon sous formulaire à l'ouverture et ne la modifie plus ensuite..
    Si je ferme le formulaire et que je le ré-ouvre, la structure du sous-formulaire a bien changé (les champs affichés ne sont plus les mêmes).

    Je continue de chercher, mais si quelqu'un a une piste... Merci d'avance.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    octobre 2005
    Messages
    9 562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : octobre 2005
    Messages : 9 562
    Points : 14 621
    Points
    14 621

    Par défaut

    Bonjour.

    J'ai l'impression que mon formulaire prend la structure de mon sous formulaire à l'ouverture et ne la modifie plus ensuite..
    C'est très possible, les listes déroulantes marchent un peu comme cela.

    Personnellement je ferai un formulaire qui serait prévu pour afficher tous les champs nécessaires pour tous tes types d'équipement.
    Puis au changement de type je rendrai les champs et les colonnes inutiles invisibles.
    C'est assez simple à faire et plus facile que de gérer une structure variable.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre du Club
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    septembre 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : septembre 2014
    Messages : 86
    Points : 45
    Points
    45

    Par défaut

    En fait je crois que je tiens ma solution: J'ai rusé
    J'ai créé un formulaire vide qui me sert d'objet source de départ (sinon ça bug).
    Je créé un formulaire A qui contient un sous formulaire B de la requête R en question.
    A la mise à jour de ma liste L qui me permet de créer la chaîne SQL de ma requête R, j'ouvre A en mode design et de façon cachée, je change le recordsource de B, je sauve mon formulaire A et je le ferme.

    Afin d'éviter les problèmes en cas de modification de ma première liste L, je recharge le formulaire vide sur réception du focus.

    Voilà voilà! J'ai bien tourné en rond mais je crois que j'ai trouvé ma solution.


    Merci de votre aide!!

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

Discussions similaires

  1. [Sources] Synchroniser 2 sous-formulaires
    Par stigma dans le forum Contribuez
    Réponses: 15
    Dernier message: 26/08/2016, 15h41
  2. Réponses: 7
    Dernier message: 22/01/2013, 09h54
  3. [AC-2003] MAJ d'une requête source pour un sous formulaire
    Par Nom dans le forum IHM
    Réponses: 5
    Dernier message: 05/10/2011, 14h49
  4. Requête filtrée dans des sous-formulaires
    Par Beavis Man dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 16/12/2006, 23h31
  5. source d'un sous-formulaire
    Par Anaxagore dans le forum Access
    Réponses: 2
    Dernier message: 17/05/2006, 12h20

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