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 :

Cacher des champs non utilisés lors du changement de la source d'un formulaire


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Cacher des champs non utilisés lors du changement de la source d'un formulaire
    Bonjour à tous,

    Contexte
    Je suis en train de mettre en place un outil permettant à l'utilisateur de questionner la base de données.
    Sur un formulaire, l'utilisateur clique sur des étiquettes lui permettant de créer sa question en requete SQL. Cette Requete est ensuite executée et son resultat gardé dans une table temporaire "Table Temp".

    Présentation des résultats de la requete
    Dans un sous formulaire (format feuille de données), j'ai mis autant de controle texte que de champs qui peuvent faire partie d'une requete.
    Quand l'utilisateur lance la Requete : la source de ce sous formulaire est changé : on lui affecte la Table Temp.

    Problème
    Tous les champs non utilisés dans la requete apparaissent quand meme dans le sous formulaire, les champs etant noté "#Nom?" .
    donc je voulais tester l'existence de la source du champ et si elle n'existe pas : mettre la largeur du champs à 0...
    Mais je ne trouve pas la propriété du controle à tester .... quelqu'un aurait-il une idée ?

    Ps : Je ne sais pas si je me suiis bien exprimé

  2. #2
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 575
    Points : 2 550
    Points
    2 550
    Par défaut
    Bonjour Julie,

    mets le contrôle "auto réductible" à "oui" dans les propriétés / format.

    Tiens nous au courant.

    Curt

  3. #3
    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,
    je n'arrive pas à comprendre comment les contrôles du sous-formulaire peuvent être liés à un champ source de la table TEMP.

    En fait, si la table Temp contient X colonnes, les X premiers contrôles du formulaire ont une source les autres doivent avoir leur propriété ColumnHidden=True.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous ,

    Merci beaucoup pour vos réponses rapides Curt et Ilank !

    A propos de la suggestion de Curt :
    Alors j'ai mis les format des textbox à Autoreductible mais ca ne marche pas, même avec un refresh et un repaint sur l'evenement "après MAJ" du sous formulaire... je reste avec mes colonnes "#Nom?"

    A propose de la remarque d' Ilank :
    En fait la structure meme de la table Temp change à chaque requete. Par exemple: un utilisateur veut lister tous les codes identifiants et les superficies des zones. Alors la table Temp (Code, Superficie) est créée par requete création de table.
    Si il avait voulu lister seulement les codes identifiant, la table Temp créée serait la suivante Temp (Code)
    Seulement, je veux faire apparaitre le résultat de la table Temp dans le même sous formulaire qui doit donc se modifier a chaque requete.
    Pour cela, dans le sous formulaire (avant requete), j'ai des controles representant tous les champs possible que l'on peut interroger. Exemple : txtCode, txtSuperficie; txtNom; txtDate. La source est TableFake (Code,Superficie,Nom, Date)
    Suite à la requete, le sous formulaire change de Source et lui donne la table Temp en source. Ex Temp (code)
    Mais alors tous les autres controles du sous formulaire n'ont plus de source ! ils s'affichent à l'écran "rempli" de "#Nom".
    Je voudrais pouvoir repérer les champs sans source et les cacher ou réduire leur largeur à 0 mais pour l'instant ca ne fonctionne pas !

    Si cela vous inspire des idées ou remarques, n'hesitez pas !
    Merci

  5. #5
    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,
    une idée, oui. Les colonnes de la table se trouve dans RecordSet.Fields(n) du formulaire, les contrôles du formulaire Section(0).Controls(n) (Section(0) est la section Détail du formulaire).


    Pour l'exemple, la procédure fait partie du formulaire principal, et j'appelle le contrôle sous-formulaire SsFormTemp. La procédure est appelé après le changement de source.

    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
    Sub MasqueColonne()
     Dim FormFld As DAO.Field, FormCtrl As Access.Control
     'Masquer toutes les colonnes
    With SsFormTemp
     For each FormCtrl In .Form.Section(0).Controls
        If FormCtrl.ControlType=AcTextBox Then FormCtrl.ColumnHidden=True
     Next 
     'Montrer les colonnes présentes
     For each FormFld In .Form.Recordset.Fields
        SsFormTemp.Form.Section(0).Controls("Txt" & FormFld.name).Columnhidden=False
     Next 
    End with
     
    '=====================================
    'Ou encore une autre procédure
    '=====================================
    ' Dim FldFound As Boolean, FormCtrl as Access.Control, FormFld As DAO.Field
    ' With SsFormTemp
    '    For Each FormCtrl In .Form.Section(0).Controls
    '       If formCtrl.ControlType=AcTextBox Then  
    '       fldfound=false
    '       For each FormFld in .form.Recordset.fields
    '           if formfld.name=formctrl.ControlSource Then FldFound=true: exit for
    '       Next
    '       If Not fldFound then FormCtrl.Columnhidden=True
    '      End if
    '    Next
    'End width
    End sub
    =====================================
    Une autre idée plus simple; est de cacher/montrer les colonnes pendant que l'utilisateur fait ses choix.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bonjour à tous, Bonjour Ilank,

    Merci, je n'avais pas pensé à la fonction Column.hidden
    et en effet, ca marche bien !
    Je ne l'ai pas encore tester completement mais je pense mettre des indice lorsque l'utilisateur sélectionne un champ et aprés avoir lancer la requete, selon la valeur de ces indices, mettre la colonne adequate cachée ou non.

    Encore merci

    Julie

  7. #7
    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 Julie!!!,
    mais puisque l'utilisateur indique quels sont les champs qu'il souhaite, tu connais, en même temps que le SQL de la requête à créer, les colonnes à masquer.

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

Discussions similaires

  1. [AC-2003] Problème lors du changement de la source d'un formulaire
    Par DeFCrew dans le forum IHM
    Réponses: 3
    Dernier message: 03/12/2010, 15h53
  2. afficher/cacher des champs
    Par chifo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/02/2007, 15h54
  3. Cacher des champs de formulaire au chargement
    Par ColonelHati dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/01/2007, 13h51
  4. Moyenne des champs non vide dans un état
    Par loutsky dans le forum Access
    Réponses: 4
    Dernier message: 05/04/2006, 17h26
  5. Réponses: 2
    Dernier message: 07/11/2005, 18h54

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