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 :

lier un sous-formulaire à un formulaire à contrôle variable


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut lier un sous-formulaire à un formulaire à contrôle variable
    Bonjour à toutes et tous!

    J’ai un formulaire Menu contenant un grand nombre de boutons. J’ai besoin qu’un click sur l’un de ces boutons ouvre un formulaire puis (ou et) son sous-Formulaire associé. L’idée est de faire apparaître dans le formulaire un seul champ (obtenu selon requête SELECT DISTINCT) et de toujours lui associer le même sous-Formulaire… Mon probléme (cf ci-dessous module3) est de réussir à créer le lien entre le champ variable de mon formulaire et le champ adéquate contenu dans le sous-formulaire (à noter: le sous-formulaire contient la totalité des champs qui pourront être appelé par un click sur bouton).

    Détails :

    Module 1 :
    En cliquant sur un bouton J’active à chaque fois une variable différente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Commande58_Click()	‘click sur bouton subord
    Call ChampRef("Subord")
    End Sub 
     
    Private Sub Commande59_Click()	‘click sur bouton Décl
    Call ChampRef("Décl")
    End Sub
    etc.

    module 2:
    Cette variable est transmise à la procédure ChampRef :

    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
    49
    50
    51
    52
    53
    Option Compare Database
     
    Public Static Sub ChampRef(NomChamp As String)
    'avec ou sans static selon portée variables
    'Public Static Sub ChampRef(NomChamp As String)
     
    Dim stDocName As String, stLinkCriteria As String
    Dim ChampVar As String
     
    'recupérer dans une variable le nom du champ pointé
    ChampVar = NomChamp
     
    Call Eff_RF_SchemasUniq
     
    Dim Db As Database, req As QueryDef, s As String, NewNom As String
    Dim rs As Recordset
    Set Db = CurrentDb
     
    'Mettre ici n'importe quel nom de champ, issu de la table T_ExElementaires ou T_Exemples
    'NomChamp = "SchemaSubord"
     
    'créons la requête
     
    'SOIT attribuer un nom invariant de type ChpBaseForm au champ créé :
    ‘j’ai préféré ce moyen qui me permet de ne pas avoir à agir sur le formulaire (pas de changement de nom de contrôle) 
    s = "SELECT DISTINCT [" & NomChamp & "] AS ChpBaseForm FROM T_Exemples INNER JOIN T_ExElementaires ON T_Exemples.N°Exemple = T_ExElementaires.N°Exemple ORDER BY [" & NomChamp & "];"
     
    'SOIT laisser le nom de la variable au champ créé : 
    's = "SELECT DISTINCT [" & NomChamp & "] FROM T_Exemples INNER JOIN T_ExElementaires ON T_Exemples.N°Exemple = T_ExElementaires.N°Exemple ORDER BY [" & NomChamp & "];"
     
    Set req = Db.CreateQueryDef("RF_SchemasUniq", s)
     
    'affichons les données qu'elle génère
    Set rs = Db.OpenRecordset("RF_SchemasUniq")
     
    Do Until rs.EOF
     
        'Debug.Print rs(NomChamp)
        Debug.Print rs![ChpBaseForm]
        rs.MoveNext
    Loop
     
        stDocName = "F_SchemasUniq"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_Ad_Schema_A__Click:
        Exit Sub
     
    Err_Ad_Schema_A__Click:
        MsgBox Err.Description
        Resume Exit_Ad_Schema_A__Click
     
    End Sub
    Module 3 : ouverture du sous formulaire
    = MON PROBLEME et mes questions :
    ‘je n’arrive pas à accéder dans ce module à la variable (ChampVar) mémorisée en module 2. Est-ce possible d’accéder à cette variable ? Si oui comment y faire référence et comment l'utiliser?
    ‘Comment puis-je faire pour déterminer stLinkCriteria de manière à ce que le sous formulaire s’ouvre sur le champ voulu : c’est-à-dire décl (si le click dans le menu initial se fait sur décl), subord (si click… sur subord), etc etc
    ‘faut-il utiliser une boucle if ChampVar = Décl then stLinkCriteria .... ?

    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
    Private Sub OuvSsForm_Click()
    On Error GoTo Err_OuvSsForm_Click
     
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        stDocName = "SsF_SchemasUniq"
     
        stLinkCriteria = "[Décl]=" & "'" & Me![ChpBaseForm] & "'"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_OuvSsForm_Click:
        Exit Sub
     
    Err_OuvSsForm_Click:
        MsgBox Err.Description
        Resume Exit_OuvSsForm_Click

    Je désespère... Ce qui se traduit par un message très long, je m'en excuse mais j'espère qu'il a l'avantage d'être clair.
    Merci beaucoup pour l’aide que vous pourriez m’apporter.

    MarLoZ

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    J'ai résolu mon problème en procédant ainsi :
    J'ai ajouté dans module 2 sous "loop" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'mettre le nom de la variable en étiquette
    DoCmd.OpenForm "F_SchemasUniq", acNormal
    DoEvents
    Forms![F_SchemasUniq]![ChpBaseForm_Étiquette].Caption = ChampVar
    Module 3 :

    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
    Private Sub OuvSsForm_Click()
    On Error GoTo Err_OuvSsForm_Click
     
    Dim stDocName As String
    Dim stLinkCriteria As String
    Dim ChpVar As String
     
        stDocName = "SsF_SchemasUniq"
     
    'récupérer le nom de la variable (ajouter crochets et signe =)
    ChpVar = "[" & Forms![F_SchemasUniq]![ChpBaseForm_Étiquette].Caption & "]="
     
        stLinkCriteria = ChpVar & "'" & Me![ChpBaseForm] & "'"
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    Exit_OuvSsForm_Click:
        Exit Sub
     
    Err_OuvSsForm_Click:
        MsgBox Err.Description
        Resume Exit_OuvSsForm_Click
     
    End Sub
    En espérant que cela ne soit pas trop "farfelu!".
    Si quelqu'un en pense quelquechose... Tout commentaire est le bien venu!

    Marloz

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

Discussions similaires

  1. Lier deux sous formulaire dans un formulaire
    Par Ormani dans le forum IHM
    Réponses: 11
    Dernier message: 02/07/2007, 11h21
  2. Lier un sous-formulaire à une liste déroulante
    Par nadia68 dans le forum IHM
    Réponses: 15
    Dernier message: 15/05/2007, 10h00
  3. Réponses: 3
    Dernier message: 23/04/2007, 10h26
  4. Réponses: 3
    Dernier message: 23/01/2007, 17h13
  5. Formulaire continu et contrôles variables...
    Par guen dans le forum Access
    Réponses: 5
    Dernier message: 27/01/2006, 09h15

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