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 :

Champ non affiché dans un sous formulaire


Sujet :

IHM

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Champ non affiché dans un sous formulaire
    Bonjour

    J'ai un problème d'affichage de requête dans un sous formulaire.
    L'objectif que je dois réaliser est de mettre en place un sous formulaire qui affiche, en fonction d'un groupe d'option, le résultat d'une requête.

    Le soucis, c'est que lors de l'ouverture de mon formulaire, le sous formulaire contient les enregistrements de la requête sélectionné, mais les champs ne sont pas affichés. J'ai testé différente requête avec un nombre de champs et/ou d'enregistrements différents mais rien
    Je peux également parcourir les enregistrements (sans les connaître visuellement).

    Auriez vous une idée du problème en question? J'ai cherché pendant pas mal de temps, sans résultat concluant, si quelqu'un aurait la possibilité de m'aiguiller sur une solution, je vous en serai reconnaissant

    Merci d'avance pour votre aide,
    Wanaga

  2. #2
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Ce sont toujours les mêmes champs qui sont renvoyés par la requête ?

    Cordialement,
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour pepito

    Non, je modifie le code sql de la requête lorsque l'on change l'option du groupe d'option. Les champs sont modifiés mais ils proviennent des mêmes tables.

    Une fois la modification réalisée, je modifie la source du sous formulaire.
    Voilà le code que j'utilise :
    Dans le formulaire
    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
    'Nom de la requête utilisé
    Const Req_NAME as String = "Reqsb"
    'Table contenant l'ensemble des codes sql pour la requête
    private maTableQuerie(3) as String
     
    private sub refreshForm ()
    '... 
    'modification du code SQL de la requête ReqSbSp [inspiré du cours sur le DAO de Christophe Warin]
    'getTableQueries est une fonction qui renvoie le code sql du tableau maTable en fonction du l'option cochée
            If GestionQueries.ModifRequete(db, getTableQueries(Me.grpOptSb_SP - 1), Req_NAME) Then
                ''On insère le code nouvelle requête dans le sous formulaire
                sousformulaire.setNewSource (getTableQueries(Me.grpOptSb_SP - 1))
            End If
    '...
    end sub
    Et dans le sous formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub setNewSource(source As String)
     
        Set Me.Recordset = CurrentDb.OpenRecordset(source)
        Me.Requery
     
    End Sub
    La requête utilisée à uniquement des codes sql sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'x<20
    SELECT [Champ1], [Champ2], ... [ChampX] 
    FROM maTable1 T1
    INNER JOIN maTable2 T2 
    ON (T1.[Champ1] = T2.[Champ1]) AND (T1.[Champ2] = T2.[Champ2]);
    Merci de m'aider

  4. #4
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Donc ce sont toujours les mêmes champs, qui s'appellent bien :

    Champ1, Champ2, Champ3

    Ou ce n'était qu'un exemple ?

    Ils existent bien tous dans votre sous-formulaire ?
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  5. #5
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Les noms des champs sont des exemples.
    J'ai environ une quarantaine de champs et pour faciliter la naviguation dans le sous-formulaire, je souhaite en afficher uniquement certains en fonction du groupe d'options.

    La requête serait plutot comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Champ3], [Champ7], ... [ChampX] 
    FROM maTable1 T1
    INNER JOIN maTable2 T2 
    ON (T1.[Champ1] = T2.[Champ1]) AND (T1.[Champ2] = T2.[Champ2]);
    Et pour une autre option, j'aurai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [Champ5], [Champ12], ... [ChampX] 
    FROM maTable1 T1
    INNER JOIN maTable2 T2 
    ON (T1.[Champ1] = T2.[Champ1]) AND (T1.[Champ2] = T2.[Champ2]);
    Les champs qui référencent la jointure sont les mêmes pour chaque code SQL mais ne sont pas inclus dans le "SELECT"

    Mon sous formulaire est vierge au départ, lors de son ouverture, la source est initialisée avec le premier code sql (valeur par défaut du groupe d'option)

  6. #6
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Ok

    1) Merci pour le While wend sur l'autre fil

    2) Si je comprend bien (je suis dur à la comprenette), votre sous-formulaire ne contient aucun champ quels qu'ils soient ("vierge au départ") et pour l'instant vous ne changer que la propriété Source de ce sous formulaire ?
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  7. #7
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    C'est exactement ça !

    Aucun control sur le sous formulaire, juste une modification du source lors de l'évènement Form_Open et de la procédure setNewSource quand l'utilisateur séléctionne une autre option.

    (Pas de soucis pour le while wend )

  8. #8
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Donc votre problème c'est que aucun champ ne s'affiche... parce qu'il n'y a aucun champ.

    Quand vous créé un formulaire lié à une source de données, vous devez y déposer des champs ( des contrôles zone de texte, zone de liste,...) liées aux champs de votre table/requête source.

    Donc dans votre cas, vous voulez dynamiquement adapté ces contrôles à votre source de donnée qui elle n'a jamais les mêmes champs.

    Il y a 2,5 pistes :

    1) Soit faire en sorte qu'il est tous les champs possible renvoyés par vos requêtes et masquer les champs inutiles.

    1,5) Soit faire en sorte que vos requête renvoie toujours le même nom de champ grâce à des alias (par exemple [Champ5] AS [Champ_Formulaire_1]. Il vous faudra quand même caché les camps surnuméraire (cas N°1)

    2) Soit créer dynamiquement ces champs

    -

    A moins que je ne vous ai pas bien compris
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  9. #9
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci de m'avoir aiguiller, j'ai compris mon erreur

    Je vais mettre ça immédiatement en application voir si ça marche en me basant plutôt sur ta piste numéro 2

    Merci beaucoup en tout cas

  10. #10
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    On en parle justement par là

    http://www.developpez.net/forums/sho...errerid=391891

    Pensez à mettre résolu le cas échéant.

    Cordialement,
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  11. #11
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour

    J'ai quelques difficultés pour mettre en place la création dynamique des champs.

    J'obtiens en permanence l'erreur 29054
    'Microsoft Office Access ne peut pas ajouter, renommer ou supprimer le ou les contrôles sélectionnés'

    Voici le code que j'ai mise en place :
    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
    Sub creaChamp(SQL As String)
     
        Dim rs As DAO.Recordset
        Dim ctrl(1 To 100) As Control
        Dim frmName As String
        Dim i As Integer
     
        i = 1
        frmName = "sf_Spare_Parts"
     
         DoCmd.OpenForm frmName, acDesign, , , , acHidden 'On ouvre en mode Création et caché
        Set rs = CurrentDb.OpenRecordset(SQL)
    'Parcours de tous les champs du recordset
        While i < rs.Fields.Count
            Set ctrl(i) = Access.CreateControl(frmName, acTextBox, acDetail) 'Création d'un textBox
            ctrl(i).Name = "txt" & rs.Fields(i).Name 'Renomme le control
            i = i + 1
        Wend
        DoCmd.Save acForm, frmName
     
    End Sub
    J'ai également tenté de réinitialiser la source de sous formulaire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.sfSpare_Parts.SourceObject = ""
    Mais j'ai toujours la même erreur

  12. #12
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Il me semble que l'argument Parent doit être de type chaîne et pas objet

    Cordialement,
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  13. #13
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    L'argument parent de quelle fonction? (ou autre si ce n'est pas une fonction)

    (edit du message précédent, faute de frappe dans le code par rapport à Fields.name)

  14. #14
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par wanaga Voir le message
    L'argument parent de quelle fonction? (ou autre si ce n'est pas une fonction)

    (edit du message précédent, faute de frappe dans le code par rapport à Fields.name)
    CreateControl

    acDétail -> "Détail"

    De mémoire hein !
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  15. #15
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Le acDetail est dans l'argument "Section", l'argument "Parent" est le suivant.

    Je viens de tester avec l'argument "Parent" plutot que "Section"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set ctrl(i) = Access.CreateControl(frmName, acTextBox, ,"Détail")
    Mais toujours la même erreur

  16. #16
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Chez moi ce code fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim cmdX As TextBox
     
    Set cmdX = CreateControl("frmContrat", acTextBox, , "Détail", "ID_Contrat", _
                                                         250, 250, 500, 500)
    Est créé un TextBox dans "Détail" relié au champ "ID_Contrat"

    Avez vous essayer sans affectation à un tableau de contrôles dans un premier temps ?

    Cordialement
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  17. #17
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    J'ai adapté votre code, et cela fonctionne chez moi.

    Petit bonus, il ajoute une étiquette lié au contrôle (grâce à la légende définie dans les tables), ce qui devrait impacter le nom des colonnes !

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Public Sub creaChamp(SQL As String)
     
        Dim rs As DAO.Recordset
        Dim txtX As TextBox, fldX As Field, ctrlX As Control, labelX As Label
        Dim frmName As String
        Dim i As Integer, flgError As Boolean
     
     
     
        i = 300
        frmName = "frmSub"
     
        DoCmd.OpenForm frmName, acDesign, , , , acHidden    'On ouvre en mode Création et caché
     
        'Efface tous les champs existrants
     
         'On va balayer les contôles (For... Next) et le supprimer
            'Cependant quand on supprime un contrôle, la collection est modifiée !
            'On va donc boucler avec Do until et refaire le balayage jusqu'à ce qu'il n'y ait plus de contrôle
     
     
        Do Until Application.Forms(frmName).Controls.Count = 0
            For Each ctrlX In Application.Forms(frmName).Controls
     
     
                    DeleteControl frmName, ctrlX.Name    'Suppression du contrôle
     
     
            Next ctrlX
        Loop
     
           'Fin effaçage
     
        Set rs = CurrentDb.OpenRecordset(SQL)
     
     
        For Each fldX In rs.Fields
     
     
     
            Set txtX = Access.CreateControl(frmName, acTextBox, , "Détail", fldX.Name)    'Création d'un textBox
     
      txtX.Name = fldX.Name    'Met le nom du controle = au nom du champ
     
            Set labelX = Access.CreateControl(frmName, acLabel, , txtX.Name, fldX.Name, 150, i, 1000, 300) 'Création d'une étiquette associée au champ
     
            labelX.Name = "Label_" & fldX.Name
     
            'Met l'étiquette avec la légende du champ ou si erreur avec le nom du champ
            flgError = False
            On Error GoTo Err_Label
            labelX.Caption = fldX.Properties("Caption")    'récupère la légende du champ
            On Error GoTo 0
            If flgError Then labelX.Caption = fldX.Name
     
     
            txtX.Move labelX.Left + labelX.Width + 75, i, 1000, 300 'Met le champ à droite de l'étiquette
     
     
            i = i + 600
        Next fldX
     
        DoCmd.Save acForm, frmName
     
        Exit Sub
    Err_Label:
        flgError = True
        Resume Next
    End Sub
    Tenez nous au courant !
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  18. #18
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour Pepito

    Hélas, le code me renvoit encore une fois cette erreur ...
    Elle se situe à la ligne où j'utilise le createControl
    L'ajout des champs se fait dans mon formulaire qui contient le sous formulaire. Ca peut poser problème?

    Ou faut il une référence spécifique pour utiliser le CreateControl?

  19. #19
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2010
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Octobre 2010
    Messages : 205
    Points : 360
    Points
    360
    Par défaut
    Bonjour,

    Si votre sous-formulaire est chargé (par le formulaire "parent"), la modification est en effet impossible.

    L'objet qui contient votre sous-formulaire dans le formulaire Parent (le "container") a une propriété "Objet source", "SourceObject" en vba

    Donc avant et après l'appel de votre procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form_FormuaireParent.NomDuContanier.SourceObject="" 'Nom tel qu'il apparait dans l'explorateur VBA
    creaChamp "SELECT ...."
    Form_FormulaireParent.NomDuContanier.SourceObject="MonSousFormulaire" 'Nom tel qu'il apparait dans l'explorateur Access
    Pierre.

    Dans un monde passablement absurde, il y a quelque chose qui ne l'est pas, c'est ce qu'on peut faire pour les autres.

    André Malraux


    Ce message vous a aidé ? alors

    Votre souci est résolu ? alors

  20. #20
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Même en appliquant la fonction SourceObject sur le sous formulaire, l'erreur persiste

    J'ai silloné l'ensemble des propriétés du sous formulaire et du container, mais tout me semble correct ...

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/07/2014, 09h59
  2. Réponses: 9
    Dernier message: 12/03/2014, 21h28
  3. [AC-2007] Champ non affiché dans un état
    Par Lireas dans le forum IHM
    Réponses: 0
    Dernier message: 06/07/2010, 17h05
  4. Afficher dans un sous-formulaire
    Par nevil dans le forum IHM
    Réponses: 4
    Dernier message: 17/08/2007, 12h40
  5. [Programmation]champ pere contenu dans un sous formulaire
    Par TheBlackReverand dans le forum IHM
    Réponses: 8
    Dernier message: 30/04/2007, 22h39

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