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 :

Création d'un formulaire à partir des champs sélectionnés dans un formulaire [AC-2013]


Sujet :

IHM

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Par défaut Création d'un formulaire à partir des champs sélectionnés dans un formulaire
    Bonjour,

    Avant de commencer je précise que je suis une totale noob dans Access, que j'ai pris le temps de lire beaucoup de chose et de passer par la partie modélisation pour modéliser ma base d'optique. J'ai fait quelques modif en cours de validation (pourvu que je me sois pas trop loupée), mais je me pose une question à laquelle j'espère que vous pourrez répondre.

    Voilà une idée que j'ai eu, et on m'a dit que tout ou presque était possible avec les Bases de données donc je fais des rêves

    Voilà l'idée: J'aimerai savoir s'il était possible de créer un formulaire A à partir d'un formulaire B qui permettrait de sélectionner les champs du formulaire A.

    Exemple pour mieux comprendre, du moins je l'espère:
    J'ai des optiques de différents type (miroir, lentille, réseau,...) qui ont des caractéristiques différentes et qui ne sont pas pertinentes pour toutes les optiques. Par exemple, il est inutile de demander la focale d'un miroir plan => je ne veux pas faire apparaître le champs Focale dans mon formulaire pour les optiques de Type Miroir plan. Ça c'est pas très compliqué en soit.

    Mais là où je suis vicieuse, c'est que je me dis "Et si je n'avais pas pensé à tous les types d'optiques?" (ce qui est plus que probable), serait-il possible de créer simplement un formulaire pour ce nouveau type d'optique en utilisant un formulaire que je pourrai appeler Nouveau type d'optique.
    J'avais imaginé des cases à cocher contenant toutes les caractéristiques possibles pour sélectionner uniquement celles qui sont pertinentes. Et ainsi créer un nouveau formulaire contenant le nom du type d'optique, et où je pourrais remplir les valeurs des caractéristiques pertinentes.

    Je sais pas si tout ceci est clair, sinon n'hésitez pas.
    En tout cas merci d'avance pour vos réponses.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Si c'est ponctuel et que tu veux un formulaire par type, ex : Form_Optique_Miroir_Plan, le plus simple est d'utiliser l'assistant de création de formulaire.

    Sinon je te suggère cela : tu mets sur 1 seul formulaire TOUS les champs pour TOUS les types d'optique, puis à l'ouverture tu caches le champ dont tu n'as pas besoin.
    Tu peux paramétré cela dans une table externe.

    Ex :

    tblChampCache
    ClefChampCache
    ClefTypeOptique
    NomChamp

    à l'ouverture (ou au chargement, fait un test) tu parcours ta table et tu affiches ou masque les champs. Ci-dessous un exemple de code.

    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
    dim db as dao.databse:set db=currentdb
    dim r as dao.recordset:set r=db.openrecordset("tblChampAffiche", dbOpenSnapshot)
    dim critere as string
     
    dim c as control:for each c in me.controls
       critere="[ClefTypeOptique]=" & me.ClefTypeOptique & " and [" & c.name & "]"
       call rFindFirst(critere)
     
       if not r.nomatch then
          c.visible=false
       end if
     
    next c
     
    r.close:set r=nothing
    db.close:set db=nothing
    Attention il me semble que certains contrôles ne supporte pas .Visible.

    Enfin tu peux te lancer dans la création dynamique de contrôles mais c'est plus complexe et n'est pas toujours possible.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre confirmé
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Par défaut
    Bonjour,

    Merci pour cette réponse. Je précise que je ne connais pas (encore), le langage de programmation utilisé, mais ayant déjà programmé (pas pour des bases de données en C), j'arrive à peu près à lire le programme, sauf les "dao.recordset", me.controls... Mais je me plongerais là-dedans après.

    Ce que tu me proposes me semble intéressant, par contre tu dis
    à l'ouverture tu caches le champ dont tu n'as pas besoin
    .
    Le truc, c'est qu'il y a potentiellement plusieurs champs dont je n'aurai pas besoin à chaque fois.

    Du coup est-ce qu'on peut mettre plusieurs NomChamp dans la Table ChampCache?

    J'ai fait un schéma de mon idée en espérant que ça soit plus clair.
    Nom : Schéma explicatif Formulaires.png
Affichages : 404
Taille : 11,3 Ko

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Bonjour.

    Si tu viens du C en effet VBA va te dérouter un peu. Le code est plus verbeux et le compilateur plus sévère :-).

    Me. refère à l'objet courant (ici ton formulaire).
    .Controls est la collection des contrôles (champ texte, trait, étiquette. ...) utilisés par l'objet.

    Pour la table, tu peux mettre autant de champs que tu en as besoin (avec 1 enregistrement (une ligne) par champ). La seule limite est qu'une base Access ne peut pas dépasser 2 Go.

    Si tu garde l'idée de ne conserver que les champs cachés, je t'invite à utiliser une liste déroulante au lieu des cases à cocher, cela simplifiera ton interface.

    L'assistant de création de contrôle dans la création d'un formulaire t'aidera à le faire.

    Si tu tiens aux cases à cocher tu peux utiliser la table suivante :

    tblChampOptique
    ClefChampOptique
    ClefTypeOptique
    NomChamp (texte)
    EstVisible (Oui/Non)

    Il faudra créer autant d'enregistrements que tu as de champs x types d'optique. (ex 10 champs, 5 types d'optique => 50 enregistrements)

    Afin de simplifier les contrôles qui ne sont pas dans la table (ex : traits de séparation, boutons) sont utilisés tel que :

    Le code ressemble à :

    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
    dim db as dao.databse:set db=currentdb 'Défini un objet Database, y assigne la BD courante
    dim r as dao.recordset:set r=db.openrecordset("tblChampOptique", dbOpenSnapshot) 'Crée un objet de type "Liste d'enregistrements", y assigne a table
    dim critere as string
     
    dim c as control:for each c in me.controls
       critere="[ClefTypeOptique]=" & me.ClefTypeOptique & " and [" & c.name & "]"
       call rFindFirst(critere)
     
       if r.nomatch then
             'Ne rien faire à ce contrôle, il n'est pas dans la liste
          else
             'Il est dans la liste, applique la valeur du champ EstVisible à la propriété Visible.
             c.visible=r![EstVisible]
       end if
     
    next c
     
    r.close:set r=nothing 'Ferme et libère explicitement la mémoire
    db.close:set set db=nothing 'Ferme et libère explicitement la mémoire
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 410
    Par défaut
    Attention en procédant par masquage simple le résultat dans ton exemple sera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Caract1 :
     
    Caract3 :
    Donc tu vas voir des "trous" dans ton formulaire.

    Une alternative est de rendre les champs inactifs. Ils sont là mais on ne peut rien mettre dedans. Le principe est le même que pour le visible avec la propriété "Activé" (Enabled).

    On peut aussi "boucher" les trous au moment de l'ouverture du formulaire en jouant sur les positions des champs mais c'est un peu plus compliqué.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre confirmé
    Femme Profil pro
    Ingénieur laser
    Inscrit en
    Septembre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur laser
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2014
    Messages : 98
    Par défaut
    Merci à vous pour ces infos, j'ai l'impression que vous m'apportez la solution que je recherche, et que donc c'est possible. Il me reste à me plonger dans tout ça.. Je reviendrai vous dire si "mon problème" est résolu...
    Et vous demander de l'aide dans la mise en place si besoin, car comme tu le dis le langage est un peu déroutant, mais je commence à comprendre des trucs. J'avais déjà compris que "me" se référai à l'objet courant. Merci pour "Controls".

    J'apprends plein de trucs intéressants sur ce forum ^^
    Merci.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/08/2014, 18h14
  2. contrôles des champs saisis dans un formulaire
    Par barouz dans le forum Servlets/JSP
    Réponses: 14
    Dernier message: 06/12/2013, 13h55
  3. Réponses: 20
    Dernier message: 27/07/2010, 15h52
  4. Réponses: 13
    Dernier message: 22/10/2008, 09h19
  5. Réponses: 4
    Dernier message: 31/07/2006, 09h13

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