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 :

[VBA] Comment désigner un controle indépendament de la hierarchie affichée


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut [VBA] Comment désigner un controle indépendament de la hierarchie affichée
    Bonjour,

    le titre est peut être un peu compliqué mais je vais tenté de l'eclaicir :

    J'ai un formalaire A qui quand on clique sur une zone affiche un formulaire indépendant en forme de boite de dialogue (appelons B).

    Quand l'utilisateur fini de saisir ses données dans B et qu'il valide alors les champs de controle de A sont mis à jour. Tout fonctionne correctement.

    Une fois la mise au point du formulaire A et B, j'introduit le formulaire A dans un formulaire accueil avec des "controles onglet".

    Et la catastrophe. Plus rien ne fonctionne. Je n'arrive pas à dire au formulaire A ou est le controle du formulaire B à mettre à jour.

    Alors^, après mainte essai et recherche, je ne comprend pas la manière dont access gère la hierarchie des formulaires et je suis preneur d'explication, certe, mais surtout d'une manière de rendre indépendante mon code VBA de la construction de mon application.

    J'espère que celà existe. Merci pour votre aide.

    A+

  2. #2
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Je rajoute un exemple plus simple pour que mon discours soit compris :

    Dans le fichier joint, il y a Un formulaire Frm_Suivi_Session qui fonctionne très bien lorsqu'on le lance tout seul.

    Lorsqu'il est lancé depuis Frm_Accueil alors on a un problème au niveau de la mise à jour de la seconde liste déroulante.

    En espèrant que celà eclaire plus les choses et qu'une solution peut être proposée pour un novice qui se pert dans les méandres pas clairs d'Access
    Fichiers attachés Fichiers attachés

  3. #3
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Evidemment il existe une approche qui sépare le code, l'interface et les données. Cela s'appelle Modèle Vue Controleur (MVC) mais pour l'utiliser dans Access, il faut te pencher du côté des modules de classes, évènements personnalisés.

    En gros pour ta problématique, il faudrait que le formulaire B tire un évènement quand l'utilisateur a fini de l'utiliser et que le formulaire A soit à l'écoute de cet évènement afin de réagir de manière appropriée.

    Dit comme ça c'est simple, mais à programmer c'est plus complexe.
    Regardes du côté de WithEvents et Event. Et n'oublies pas que seule une instance d'un module de classe (autrement dit un objet) peut être source d'évènement.

    J'ai peur que la formation nécessaire à cette technique soit bcp trop longue pour être écrite ici.

  4. #4
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Argh !!!! Y'a pas plus simple comme méthode.

    C'est moi qui ai l'esprit tordu ou chacun galère comme moi lors de la mise au point de son appli?

    Merci quand même pour cette réponse et je reste à l'écoute d'autres conseils avisés.

    A+

  5. #5
    Expert confirmé
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Par défaut
    Bonjour,

    J'espère avoir tout compris.

    Ta clause where pose problème car la référence à la liste n'est plus la même quand elle est dans un un sous-formulaire.

    Essaie de modifier le contenu de "ListeSession" avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Tbl_Session.Date FROM Tbl_Formation INNER JOIN Tbl_Session ON Tbl_Formation.ID_Formation=Tbl_Session.IE_Formation WHERE (((Tbl_Formation.Nom)=Formulaires!Frm_Accueil!Choix1_Formulaire.Form!ListeFormation.Value));
    Domi2

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Par défaut
    Bonjour,

    La solution de Domi2 fonctionne correctement, mais seulement dans une configuration où la liste ListeFormation est affichée dans un sous-formulaire qui est contenu dans le contrôle Choix1_Formulaire du formulaire Frm_Acceuil.
    Citation Envoyé par Domi2
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Tbl_Session.Date FROM Tbl_Formation INNER JOIN Tbl_Session 
    ON Tbl_Formation.ID_Formation=Tbl_Session.IE_Formation 
    WHERE (((Tbl_Formation.Nom)=Formulaires!Frm_Accueil!Choix1_Formulaire.Form!ListeFormation.Value))
    ;
    Il y a plus simple et qui fonctionne dans toutes les configurations.

    Puisque le contrôle ListeSession fait référence au contrôle ListeFormation placé dans le même formulaire, on peut se contenter d'utiliser la "référence" Formulaire.

    Je m'explique...

    Avec Formulaire on désigne le formulaire "dans le contexte" en cours.
    Or, ici le contexte est celui du contrôle ListeSession.
    Donc, dans ce contexte, Formulaire désigne le formulaire qui contient le contrôle ListeSession.

    Ce qui donne:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Tbl_Session].[Date] FROM Tbl_Formation INNER JOIN Tbl_Session 
    ON [Tbl_Formation].[ID_Formation]=[Tbl_Session].[IE_Formation] 
    WHERE (([Tbl_Formation].[Nom])=Formulaire!ListeFormation.Value);

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/01/2015, 08h41
  2. Réponses: 1
    Dernier message: 15/09/2007, 17h50
  3. [VBA-E] Comment créer un control sur une liste de choix ?
    Par Soulsurfer dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2007, 12h42
  4. Réponses: 5
    Dernier message: 13/09/2006, 16h47
  5. comment faire un controle de transaction ???
    Par Oxygene dans le forum Oracle
    Réponses: 4
    Dernier message: 22/02/2005, 15h04

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