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 :

Problème: d'un clic sur 1 formulaire, ouvrir X fois un autre formulaire sur différents enregistrements


Sujet :

IHM

  1. #1
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut Problème: d'un clic sur 1 formulaire, ouvrir X fois un autre formulaire sur différents enregistrements
    Bonjour.
    Après des recherches infructueuses, ou plutôt une incapacité à appliquer ce que j'ai pu lire à mon cas particulier, je poste ici en espérant que quelqu'un pourra m'aider.


    Voilà ce que j'ai:

    - J'ai deux tables: une tables des évènements et une table des jeunes. La table des évènement contient un champ à valeurs multiples [IDE-X] contenant pour chaque évènement une valeur correspondant à la clé primaire (appelée [IDE]) de la table des jeunes pour ceux concernés par l'évènement.

    - Je dispose d'un premier formulaire, qui permet d'enregistrer les évènements. Dans ce formulaire, il y a une zone de liste à choix multiple nommée [cmbjeune] , qui permet de choisir les jeunes concernés par l'évènement par leur nom et sauvegarde la valeur dans le champ [IDE-X] de la table. C'est cette zone de liste qui permet d'enregistrer les jeunes concernés par l'évènement, dans le champ [IDE] de la table des évènements.

    - Je dispose d'un autre formulaire permettant de consulter la fiche d'un jeune. Dans celui-ci, il y a une zone de liste déroulante [recherchejeune] qui permet de choisir le jeune dont on veut consulter la fiche. C'est un contrôle indépendant le la table: les données n'y sont pas sauvegardées, il permet juste d'atteindre le bon enregistrement, grâce au code suivant qui recherche la valeur [IDE] dans la table des jeunes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
       Dim rs As Object
         Set rs = Me.Recordset.Clone
        rs.FindFirst "[IDE] = " & Str(Nz(Me![recherchejeune], 0))
        If Not rs.EOF Then Me.Bookmark = rs.Bookmark

    Voilà ce que je souhaite:

    Il faudrait que, après sélection des jeunes dans le formulaire de saisie des évènements, je puisse ouvrir pour chaque jeune la formulaire de consultation le concernant (sans fermer le formulaire des évènements). C'est à dire en un clic sur un bouton du premier formulaire, ouvrir en une seul fois plusieurs fois le même formulaire sur les bons enregistrements.


    Ce que j'ai... Ou pas:

    J'ai trouvé au cours de mes recherches du code VBA qui me permet d'ouvrir plusieurs instances du même formulaire. C'est fonctionnel, dans les grandes lignes. Je ne sais pas encore à ce stade si ce code sera adaptable (et si je saurai le faire) à ce que je vais avoir ensuite.
    J'ai trouvé à plusieurs endroits des indications me faisant penser que ce qu'il me faut c'est d'utiliser les recordset en bouclant, pour ouvrir un par un les formulaire jusqu'à la fin de la liste. Mais je ne parviens pas à adapter ce que j'ai vu à ma situation, par manque de connaissances assurément. C'est compliqué de passer de la théorie à la pratique !



    Merci par avance à ceux qui prendront le temps d'étudier mon problème !

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Bonjour,
    Pour ouvrir plusieurs instance d'un même formulaire :

    un tuto :

    http://mhubiche.developpez.com/Acces...s/formulaires/

    une discution :

    http://www.developpez.net/forums/d82...at-meme-temps/

    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
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    oups ! j'avais raté le passage où tu faisais mention du code pour l'ouverture multiple.

    Si tu cherches pas méthode d'appel, c'est une boucle qu'il faut faire.

    Tu as un embryon de ça sur ce tuto :

    http://loufab.developpez.com/tutorie...teur-in/#LII-A

    L'adapter ne pose pas de problème particulier.
    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

  4. #4
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut
    Bonjour et merci pour les deux tutos !
    J'ai regardé en quoi ils peuvent me servir mais je rencontre des difficultés pour adapter le code.
    En effet, concernant les formulaire multiples, c'est vrai que le tuto ressemble beaucoup à ce que je veux faire en terme de rendu pour l'utilisateur.
    Cependant je galère un peu à adapter car dans mon cas il y a deux tables distinctes avec deux formulaires distincts.
    Pour couronner le tout, si je comprends bien, les deux tutos font référence directement à la table. Hors en ce qui me concerne le formulaire des évènements étant un formulaire de création, l’enregistrement n'est pas encore fait dans la table lors de la sélection des jeunes concernés. Du coup je ne peux pas tester les adaptations du code en l'état.
    Peut-être devrais-je retravailler mon formulaire afin qu'il y ait un nouvel enregistrement dès la sélection d'un jeune? Ce qui va certainement me poser des petits problèmes.
    Ou alors peut-être que je peux procéder autrement pour ne pas faire référence à la table?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut
    Alors j'ai bien avancé grâce à tout ça et à plein de tutos.
    Toutefois je rencontre encore des difficultés pour rendre tout ça effectif.
    Concernant l'ouverture de multiples exemplaires d'un formulaire, ça marche via un bouton qui appelle la fonction contenue dans ce à ce code dans un module:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Option Compare Database
    Option Explicit
     
    ' Constante de placement
    Private Const FORM_OFFSET As Integer = 1000
     
    ' Collection des formulaires
    Private colForms As New VBA.Collection
     
     
    ' ---
    ' AJOUT D'UN FORMULAIRE A LA COLLECTION
    ' ---
    '
    Function NouvFormJeunes()
       Dim frm As Access.Form
        Dim intLeft As Integer, intTop As Integer
     
        ' Position du formulaire courant
        On Error Resume Next
        intLeft = 0
        intTop = 0
        Set frm = Screen.ActiveForm
        If (Err.Number = 0) Then
            intLeft = frm.WindowLeft + FORM_OFFSET
            intTop = frm.WindowTop + FORM_OFFSET
        End If
     
      ' Création du nouveau formulaire
      Set frm = New Form_Fiches_jeunes
     
        ' Déplacement et activation du nouveau formulaire
        If intLeft > 0 Then frm.Move intLeft, intTop
        frm.SetFocus
     
        ' Ajout du formulaire à la collection globale
        colForms.Add frm, Str(frm.Hwnd)
    End Function
     
    ' ---
    ' SUPPRESSION D'UN FORMULAIRE DE LA COLLECTION
    ' ---
    '
    Function FermerFormulaire(ByVal lngId As Long)
      ' Suppression du formulaire de la collection globale
      On Error Resume Next
      colForms.Remove Str(lngId)
      End Function
    Dans le premier formulaire, j'ai mis une sauvegarde automatique dans la table à chaque chargement afin que ma table soit à jour puis j'ai mis ça sur un bouton:

    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
    22
    23
    24
    25
    26
    27
    28
    Private Sub OuvrirFichesJeunes_Click()
     On Error GoTo err_OuvrirFichesJeunes
       Dim rs1 As Recordset
       Dim rs2 As Recordset
           Set rs1 = CurrentDb.OpenRecordset("evenements")
                   rs1.FindFirst "[IDR] = " & Str(Nz(Me![IDR], 0))
          ' Open a Recordset for the multivalued field.
          Set rs2 = rs1![IDE-X].Value
             ' Exit the loop if the multivalued field contains no records.
             Do Until rs2.EOF
                rs2.MoveFirst
     
                 ' Loop through the records in the child recordset.
                 Do Until rs2.EOF
                     ' NouvFormJeunes
                      DoCmd.OpenForm "Fiches_jeunes"
                         Forms![Fiches_jeunes]![recherchejeune].Value = rs2!Value.Value
                         Forms![Fiches_jeunes]![recherchejeune].SetFocus
                     rs2.MoveNext
                 Loop
             Loop
     
    err_OuvrirFichesJeunes:
    If (Err.Number = 2110) Then
    Else
    MsgBox Err.description
    End If
    End Sub

    En l'état, le bouton m'ouvre un exemplaire du formulaire demandé sur le premier enregistrement. A priori, c'est normal.
    Si je modifie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                   ' NouvFormJeunes
                      DoCmd.OpenForm "Fiches_jeunes"
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    NouvFormJeunes
                   '   DoCmd.OpenForm "Fiches_jeunes"
    Je rencontre une erreur sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        Forms![Fiches_jeunes]![recherchejeune].Value = rs2!Value.Value
    Ce message dit qu'Access ne parvient pas à trouver le formulaire [Fiches_jeunes].
    Cela me semble assez logique, vu qu'il y a plusieurs exemplaire du formulaire dans la collection.

    Alors, comment puis-je trouver le nom des formulaires nouvellement créés et surtout, comment puis-je corriger mon code pour que ça fonctionne tout seul SVP?

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 004
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 004
    Points : 24 593
    Points
    24 593
    Par défaut
    Bonjour,

    Je mettrais directement la valeur à écrire en paramètre de la fonction NouvFormJeunes() comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function NouvFormJeunes(vRechercheJeune as variant)
    ...
    'et à la place de la ligne frm.SetFocus qui n'a aucun sens dans cette fonction
    if not ismissing(vRechercheJeune ) then
       frm.controls("recherchejeune").Value = vRechercheJeune
    endif
    ...
    En effet, pour retrouver le formulaire correspondant à l'élève il faudrait l'identifier dans la collection ou rechercher dans l'objet form de la collection le contrôle qui contient le nom de l'élève.
    Possible mais cela nécessite du code.


    Le setFocus doit être fait à la fin du traitement, sur le dernier ouvert par exemple. Quel interet de mettre le focus sur le 1er puisque le suivant va le recevoir à son tour et ainsi de suite...

    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

  7. #7
    Membre à l'essai
    Homme Profil pro
    Néophyte
    Inscrit en
    Octobre 2014
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Néophyte
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2014
    Messages : 24
    Points : 23
    Points
    23
    Par défaut
    Bonjour.
    Merci beaucoup cela fonctionne.
    Cependant j'ai eu des difficultés à mettre en œuvre, pour une raison toute bête: le SetFocus sur chaque formulaire est indispensable (donc dans le module), sinon les fiches ne s'ouvrent pas.
    En plus dans mon cas, après le SetFocus sur le formulaire, j'ai du mettre un SetFocus sur le champ qui permet de naviguer dans les enregistrements, sinon ça ne se mettait pas à jour.

    Dans mon cas, ça donne donc dans le module:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Function NouvFormJeunes(vRechercheJeune As Variant)
        Dim frm As Access.Form
        Dim intLeft As Integer, intTop As Integer
     
        ' Position du formulaire courant
        On Error Resume Next
        intLeft = 0
        intTop = 0
        Set frm = Screen.ActiveForm
        If (Err.Number = 0) Then
            intLeft = frm.WindowLeft + FORM_OFFSET
            intTop = frm.WindowTop + FORM_OFFSET
        End If
     
        ' Création du nouveau formulaire
        Set frm = New Form_Fiches_jeunes
     
        ' Déplacement et activation du nouveau formulaire
        If intLeft > 0 Then frm.Move intLeft, intTop
     
        '
        If Not IsMissing(vRechercheJeune) Then
            frm.Controls("recherchejeune").Value = vRechercheJeune
        End If
        ' Ajout du formulaire à la collection globale
        colForms.Add frm, Str(frm.hwnd)
     frm.SetFocus
     frm.recherchejeune.SetFocus
     
    End Function
    encore merci !

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

Discussions similaires

  1. [A-03] Ouvrir deux fois le meme formulaire
    Par Gandalf24 dans le forum VBA Access
    Réponses: 2
    Dernier message: 09/12/2008, 12h30
  2. Réponses: 3
    Dernier message: 19/04/2007, 17h19
  3. Réponses: 4
    Dernier message: 19/04/2007, 15h36
  4. Réponses: 13
    Dernier message: 16/04/2007, 18h25
  5. Ouvrir plusieurs fois le même formulaire
    Par Kloun dans le forum Access
    Réponses: 9
    Dernier message: 21/03/2006, 20h47

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