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 :

ouvrir formulaire depuis formulaire de recherche


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut ouvrir formulaire depuis formulaire de recherche
    Bonjour,

    Possédant 3 formulaires et leurs tables associées : frm_Sources > Sources, frm_Tableaux > Tableaux, et frm_Organes > Organes, frm_Organes étant un sous formulaire continu de frm_Tableaux.
    J'ai un 4e formulaire, frm_Main, possédant un sous formulaire qui est soit frm_Tableaux, soit frm_Sources (en jouant sur la propriété Subform.SourceObject)

    J'ai également un formulaire de recherche qui me permet de cliquer sur un résultat :
    - une recherche sur la table Organes ou Tableaux doit ouvrir le formulaire frm_Tableaux (dans frm_Main)
    - une recherche sur la table Sources doit ouvrir frm_Sources (toujours dans frm_Main)

    Quand il s'agit d'une source ou d'un organe, tout va bien, mais lorsque je clique sur un résultat qui est un tableau, le frm_Main s'ouvre mais sans le frm_Tableaux, ce qui génère une erreur type "objet fermé ou inexistant" lorsque le programme veut chercher l'enregistrement voulu.

    Voici le code de l'événement :

    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
    Private Sub Lst_Resultats_DblClick(Cancel As Integer)
     
    Dim StrCriteria As String
    Dim strForm As String
     
    If IsNull(Me.Lst_Resultats) Then Exit Sub 
     
    'MyTable étant déclarée dans la zone de déclaration du module de classe
    If MyTable = "Sources" Then 
        strForm = "frm_Sources"
    Else: strForm = "frm_Tableaux"
    End If
     
        DoCmd.OpenForm "frm_Main"
        Forms.frm_Main.Subform.SourceObject = strForm
        Forms.frm_Main.Subform.SetFocus
     
        StrCriteria = "'" & Me.Lst_Resultats.Value & "'"
     
    GotoThisRecord Forms.frm_Main.Subform.Form, StrCriteria, "Nom", "l'élément"
     
    If strForm = "frm_Tableaux" Then Affiche_Arrivees (Me.Lst_Resultats)
     
    End Sub
    L'erreur 2467 se produit à l'appel de la fonction GoToThisRecord.
    GoToThisRecord étant une fonction que j'ai trouvé quelque part sur le site ou le forum de developpez.com, qui permet de se positionner sur un ID spécifique (et que j'ai très légèrement modifié et que je remets ici, si ça peut servir à quelqu'un)

    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
    Public Function GotoThisRecord(ByRef TargetForm As Form, ByVal WhatRecordID As Variant, ByVal FieldName As String, ByVal ItemMessage As String)
        Dim oRS As DAO.Recordset
     
        On Error GoTo ErrGotoRecord
     
        Set oRS = TargetForm.Recordset.Clone
        With oRS
            .FindFirst "[" & FieldName & "] = " & WhatRecordID
            If .NoMatch = False Then
                TargetForm.Bookmark = .Bookmark
            Else
                Err.Raise 3021
            End If
            .Close
        End With
    ExGotoRecord:
        Set oRS = Nothing
        Exit Function
    ErrGotoRecord:
        MsgBox "Il n'existe pas d'enregistrement pour " & ItemMessage & " ayant " & WhatRecordID & " comme valeur de champ " & FieldName & " !", vbExclamation
        Resume ExGotoRecord
    End Function

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonsoir,
    Il faut noter que les sous-formulaires ont une limite, ils ne peuvent être continu que si ils sont placés dans un formulaire principal et non dans un sous-formulaire.
    D'après l'énoncé, le formulaire frm_tableaux a lui-même un sous-formulaire en mode continu. Pour que frm_Tableaux s'ouvre en tant que sous-formulaire, il faut son propre sous-formulaire s'affiche en mode feuille de données ou autre mais pas en mode continu.
    Bref, essaie en modifiant le mode d'affichage du sous-formulaire du formulaire tableaux.

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Tout d'abord, je précise que mon frm_Organe possède des boutons de commande que j'ai rajoutés, je ne peux donc pas le mettre en mode datasheet (ou alors il faut revoir la structure)

    J'ai effectivement un sous-formulaire en mode continu dans un sous-formulaire, et contrairement à ce que tu dis, tout fonctionne à part ce bémol. Quand j'ouvre simplement mon formulaire principal, j'ai bien mon sous-formulaire frm_Tableaux et son sous-formulaire qui s'affichent.

    Ce que je ne comprends pas c'est pourquoi le sous-formulaire frm_Tableaux s'ouvre pour le cas d'un résultat d'une recherche d'organes mais pas dans le cas d'un résultat d'une recherche de tableaux, alors que dans les deux cas la valeur retournée par Lst_Resultats est un nom de tableau.

    J'ai effectué un debug pas à pas et cas par cas.
    Pour le cas d'une recherche sur un organe, le programme ouvre bien le frm_Main comme il l'était avant, et quand il change la propriété Subform.SourceObject par "frm_Tableaux" le sous-formulaire s'affiche correctement avec son sous-formulaire continu.
    Par contre dans le cas d'une recherche de tableau, quand le programme change la propriété Subform.SourceObject, le sous-formulaire ne s'ouvre pas !

    Le programme devrait effectuer les deux actions à l'identique, non ?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur VBA Access
    Inscrit en
    Avril 2006
    Messages
    1 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur VBA Access

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 109
    Points : 1 535
    Points
    1 535
    Par défaut
    Bonjour,
    tu as raison, j'ai oublié le mode continu, un sous-formulaire ne peut être en mode continu s'il contient déjà un sous-formulaire en mode continu.
    Maintenant, ce qui reste flou c'est la notion de tableau.
    Dans le cas d'une recherche de Tableau que devient alors le sous-formulaire frm_organe.
    Les sous-formulaires étant chargés avant le formulaire principal, il faut sûrement commencer par vérifier le formulaire frm_organe lorsque tu fais une recherche tableau. Bref, surveille pas à pas le chargement de chacun des sous-formulaires
    le frm_Organe puis le Frm_Tableau et enfin le Frm_Main.

Discussions similaires

  1. [AC-2010] Ouvrir un sous formulaire via formulaire avec valeur par défaut
    Par Sami Xite dans le forum Access
    Réponses: 2
    Dernier message: 30/07/2010, 18h13
  2. Réponses: 1
    Dernier message: 17/10/2008, 06h23
  3. Lancer sous formulaire depuis formulaire
    Par rjcab dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/06/2008, 16h22
  4. Réponses: 4
    Dernier message: 11/04/2007, 18h46
  5. formulaire/sous formulaire/sous formulaire
    Par aimejielle dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 22h48

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