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 :

Créer un sous formulaire dans une nouvelle fenêtre


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Créer un sous formulaire dans une nouvelle fenêtre
    Bonjour.
    J'ai beau chercher, je pense que la solution est évidente, mais je ne trouve pas.

    J'ai créé une table "concert", dans laquelle je stocke diverses données relatives aux concerts que l'on donne avec un groupe musical.
    Identifiant : "ConcID"

    J'ai créé une autre table, baptisée "Etat de Contrat", dans laquelle je stocke les différents état de tractation en cours avec les organisateurs de concert.
    Exemple d'états de contrat : "Contrat envoyé", "contrat reçu", "A rédiger", etc...
    Dans cette table, j'ai donc les champs "EtatID" (Identifiant), "Date", "Etat", "ConcertID"

    J'ai bien lié les deux champs Concerts.ConcID et [Etat de Concert].ConcertID

    Je voudrais que dans mon formulaire "Concerts", en cliquant sur un bouton, un deuxième formulaire s'affiche qui me donne Tous les etats en cours pour le concert, et me permette d'en ajouter, bref qu'il se comporte comme un sous-formulaire, mais dans une nouvelle fenêtre.
    Voici le code utilisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stDocName = "Etats de contrat"
        stLinkCriteria = "[ConcertID]=" & Me.TxtConcID
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    Où TxtConcID contient le ConcID actif.

    Il ouvre le formulaire avec les bonne données, mais au moment d'ajouter un enregistrement, laisse le champs ConcertID à 0 et me renvoie une erreur.

    Je pourrais évidemment mettre un sous formulaire (là, ça fonctionne bien), mais j'aimerais ne pas surcharger mon formulaire concert.

    Je sèche, et pourtant je suis sûr que je brûle.
    Aidez-moi

  2. #2
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Tu peux faire cela "assez simplement" avec les évènements...

    Voilà ce que je te suggère :
    Tu as un formulaire frmConcerts et un formulaire frmEtatsDeConcert.
    (Tu auras noté que j'ai mis des préfixes frm ... c'est plus facile à retrouver dans les listes de noms, et que j'ai viré les espaces dans les noms ... c'est plus facile de coder sans espaces )
    On est d'accords ?

    Alors, dans le formulaire frmEtatsDeConcert, tu copies-colles le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private WithEvents m_frmParent      As Form
    Property Set MyParent(f As Form)
        Set m_frmParent = f
    End Property
    Private Sub m_frmParent_Current()
        Me.Filter = "ConcertID=" & m_frmParent.TxtConcID
        Me.FilterOn = True
    End Sub
    Dans le formulaire frmConcerts, tu ajoutes le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Dans la zone de déclarations, après les options :
    Dim m_frmChild As Form
     
    Private Sub Form_Current()
    ' je ne sais si tu as déjà cette procédure, mai il faut ajouter la ligne suivante :
        Me.Refresh
    End Sub
    Et tu ajoutes le code suivante sur l'évènement Click de ton bouton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Set m_frmChild = New Form_frmEtatsDeConcert
        m_frmChild.Visible = True
        Set m_frmChild.MyParent = Me
    Bon... il peut y avoir un bug, quand tu n'auras aucun enr. à afficher, mais... je te laisse marner un peu à ce sujet
    On se retrouvera peut-être pour traiter ce détail après !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Pas de filtre
    Bonjour Maxence, et merci de ta réponse.
    J'ai essayé ton code plusieurs fois, allant jusqu'à recréer deux nouveaux formulaires affichant simplement les données des 2 tables avec les mêmes noms que toi.
    Lorsque je clique sur le bouton, il se contente d'afficher frmEtatDeConcert avec tous les enregistrements de la table, sans tenir compte du formulaire parent. J'ai essayé d'afficher le filtre qui était produit dans une msgbox, et là je constate qu'il ne va jamais dans la fonction m_frmParent_Current() définie dans EtatDeConcert.
    Bref, il ne filtre point du tout
    Ne comprenant pas toutes les subtilités de ton code (et notamment comment agit le Property set du formulaire "enfant"), je me sens un peu démuni. J'ai pourtant envie de comprendre.
    Merci quand même et appel à toutes les âmes de bonnes volonté, Maxence y compris.
    PS : Je travaille sous Acces 2000. Au cas où ça pourrait poser problème.
    PS2 : Argh, j'ai cliqué là.

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Bonsoir Maxence et Zangor,

    tu as essayé peut-être avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Current()
        Me.Filter = "ConcertID=" & m_frmParent.TxtConcID
        Me.FilterOn = True
    End Sub
    au lieu de:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub m_frmParent_Current()
        Me.Filter = "ConcertID=" & m_frmParent.TxtConcID
        Me.FilterOn = True
    End Sub

    Je ne suis vraiment pas sur de comprendre toutes les subtilités mais bon essayons

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Erreur
    J'obtiens
    Erreur d'exécution 91
    Variable objet ou variable de bloc with non définie

    Je cherche, je cherche

  6. #6
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Oui,

    en fait si j'ai bien saisi le code:

    cela veut dire que sur click du bouton dans ton form frmConcert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set m_frmChild = New Form_frmEtatsDeConcert
        m_frmChild.Visible = True
        Set m_frmChild.MyParent = Me
    l'evenement current du form frmEtatDeConcert

    se produit avant l'affectation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set m_frmChild.MyParent = Me
    donc probablement au moment de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set m_frmChild = New Form_frmEtatsDeConcert
    ce qui explique le message d'erreur sur current de frmEtatDeConcert:
    puisque la variable m_frmParent n'a pas encore été affecté


    et pour le code de Maxence ya certainement une subtilité pour affecter frmConcert à m_frmParent avant le current mais la je ne vois pas...

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Suite
    En fait, le plus proche de ce que je veux obtenir, c'est en créant un nouveau formulaire avec l'assistant et le filtrant, tojours avec celui-ci.
    Mais je n'arrive toujours pas à ce que l'ajout d'un enregistrement se fasse avec le bon ConcertID.
    Peut-être en programmant le bouton d'ajout.
    J'essaie cet aprem'

  8. #8
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 261
    Points : 19 424
    Points
    19 424
    Billets dans le blog
    63
    Par défaut
    Rebonjour,

    Si je reprends les hypotheses de Maxence, et en reprenant ton code sur click dans ton frmConcerts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stDocName = "Etats de contrat"
        stLinkCriteria = "[ConcertID]=" & Me.TxtConcID
        DoCmd.OpenForm stDocName, , , stLinkCriteria
    et apres sur beforeInsert de ton form frmEtatsDeConcerts:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Form_BeforeInsert(Cancel As Integer)
     
    Me!ConcertID=forms!frmConcerts!TxtConcID 
     
     
    End Sub

    ou alors avec la propriete OpenArgs de ton form frmEtatsDeConcerts:


    dans ton form frmConcerts sur click:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stDocName = "Etats de contrat"
        stLinkCriteria = "[ConcertID]=" & Me.TxtConcID
        DoCmd.OpenForm stDocName, , , stLinkCriteria,,,Me.TxtConcID
    et apres sur beforeInsert de ton form frmEtatsDeConcerts:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Form_BeforeInsert(Cancel As Integer)
     
    Me!ConcertID=Me.OpenArgs
     
    End Sub
    je suppose que tu as un textbox ConcerID dans ton form frmEtatsDeConcerts

    A+
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Résolu
    Bien vu.
    Ca fonctionne très bien.
    Merci à tous, vous êtes super!

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

Discussions similaires

  1. [AC-2003] Comment ouvrir une formulaire dans une nouvelle fenêtre ?
    Par mmedhat dans le forum IHM
    Réponses: 11
    Dernier message: 21/05/2009, 23h29
  2. Ouverture formulaire dans une nouvelle fenêtre
    Par biloute13 dans le forum IHM
    Réponses: 3
    Dernier message: 31/08/2007, 08h17
  3. Sous-formulaire dans une nouvelle fenêtre
    Par Satch dans le forum IHM
    Réponses: 2
    Dernier message: 21/06/2007, 08h40
  4. [Débutant][HTML]Ouvrir le résultat d'un formulaire dans une nouvelle fenêtre
    Par virgul dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/09/2006, 12h26
  5. Ouvrir un lien dans une nouvelle fenêtre
    Par Le Lézard dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/12/2004, 14h43

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