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

  1. #1
    Membre régulier
    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
    Points : 76
    Points
    76
    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 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    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 régulier
    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
    Points : 76
    Points
    76
    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 : 339
Taille : 11,3 Ko

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    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 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    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 régulier
    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
    Points : 76
    Points
    76
    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.

  7. #7
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Je galère depuis hier pour créer mon formulaire, et finalement je suis revenue à la liste de choix pour le moment. C'est moins visuel, mais plus simple à mettre en œuvre, il faut connaître ses limites (déjà que.. ). Il faut dire que j'ai déjà beaucoup de chose à intégrer!

    Bref du coup pour choisir les caractéristiques qui vont s'afficher dans mon formulaire suivant, j'ai fait une liste de choix. Donc en gros je sélectionne les champs que je veux afficher ensuite. Le hic, c'est que je n'arrive pas à mettre plusieurs caractéristiques pour un type d'optique apparamment c'est un problème d'index et de risque de doublon...

    Voici les liens connectant mes tables:
    Nom : 150513-Relations tables.png
Affichages : 413
Taille : 7,9 Ko

    Et la tête de mon formulaire:
    Nom : 150513-Formulaire nouveau type optique.png
Affichages : 304
Taille : 4,4 Ko

    J'ai plein de questions qui arrivent derrière mais il me faudrait déjà régler ce soucis d'index qui ne me permet pas de voir plus avant.
    Merci d'avance et désolée si je suis revenue un pas en arrière..

  8. #8
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    De ce que je vois c'est correct.

    Essaye à la main d'ajouter des données directement dans la table ChampOptique.

    Est-ce que tu es capables de créer plusieurs caractéristiques pour une même optique ? À priori tu devrais.

    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.

  9. #9
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Oui, ça marche tout à fait bien si j'entre directement les valeurs dans ma table "ChampOptique"
    J'ai l'impression qu'en fait, dans la seconde caractéristique que je veux rentrer, il a peur que je remette la même que la première ce qui risquerait d'entrainer un doublon...
    Comment faire pour l'empêcher de croire que je peux mettre deux fois la même caractéristique pour le même type d'optique. Puis-je empêcher les caractéristiques déjà sélectionnées d'apparaître dans ma liste de choix?

    Je sais pas trop si je suis claire..

    Edit:
    Je précise que j'ai créé ce formulaire en utilisant un système père/fils très largement inspiré par le tuto de Claude LELOUP sur ce sujet. Mon formulaire fils étant basé sur la table "ChampOptique" et le formulaire père sur la table "TypeOptique"

  10. #10
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    En fait la structure que tu as choisie est parfaite. Elle garantie que tu ne pourras pas mettre 2 fois la même caractéristique.

    Je pense que c'est dans la façon dont tu as créé ton formulaire que réside le problème.

    Voici comment j'aurai procédé :

    Créer un formulaire basé sur la table [TypeOptique]
    Créer un sous-formulaire basé sur la table [ChampOptique] (en utilisant l'assistant c'est assez facile)
    Dans le sous-formulaire [sfrmChampOptique] remplacé le champ [IdCaracteristique] par une liste déroulante basée sur la [Caracteristique].

    Cela va te faire un formulaire qui pour chaque type d'optique vas afficher la liste des caractéristiques associées.

    Puis-je empêcher les caractéristiques déjà sélectionnées d'apparaître dans ma liste de choix?
    Oui mais cela va compliquer les choses et je ne suis pas certain que cela vaille le travail nécessaire. Surtout qu'il me semble que cet outil ne sera pas utilisé très souvent.

    Laisse moi savoir si tu souhaites vraiment l'avoir.


    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.

  11. #11
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    En fait la structure que tu as choisie est parfaite. Elle garantie que tu ne pourras pas mettre 2 fois la même caractéristique.
    Merci beaucoup, je suis toute fière là ^^

    Voici comment j'aurai procédé :

    Créer un formulaire basé sur la table [TypeOptique]
    Créer un sous-formulaire basé sur la table [ChampOptique] (en utilisant l'assistant c'est assez facile)
    Dans le sous-formulaire [sfrmChampOptique] remplacé le champ [IdCaracteristique] par une liste déroulante basée sur la [Caracteristique].

    Cela va te faire un formulaire qui pour chaque type d'optique vas afficher la liste des caractéristiques associées.
    Et bien c'est ce que j'ai fait justement (cf mon édit sur le post précédent).
    Ainsi, dans mon idée, lorsque je rentre un nouveau type d'optique, je choisis mes caractéristiques pertinentes en même temps.

    Mais j'ai dû louper un truc dans ma requête de création de formulaire ou dans la création du sous formulaire, qui fait que j'ai l'impression qu'Access a peur que j'entre un doublon et bloque donc dès le premier enregistrement.
    D'où ma question précédente.

    Edit encore:
    Je viens de remarquer un truc: Malgré ce que j'ai entré à la main dans ma table "ChampOptique", ces caractéristiques n'apparaissent pas dans mon formulaire.. C'est pas normal ça.. Je continue de fouiller, mais si vous avez une idée, je prends ^^

    Edit bis:
    J'ai trouvé une piste sur la définition de l'index de ma double de clé primaire. fsmrel en parle dans mon post sur la modélisation de ma base de données. Je vais me pencher la-dessus lundi. J'espère que je tient le bon bout.
    Bon week-end!

  12. #12
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Bon j'avoue qu'il y a un truc que je ne pige pas.
    J'ai entré quelques données dans ma tables ChampOptique:

    Nom : 150518-Données ChampOptique.png
Affichages : 380
Taille : 7,9 Ko

    Mais quand j'ouvre mon formulaire pour entrer des propriétés supplémentaires, voici ce que je vois:

    Nom : 150518-Formulaire nouveau type.png
Affichages : 301
Taille : 8,2 Ko

    Je ne comprends pas pourquoi ça ne m'affiche pas les fameuses caractéristiques que j'ai déjà entré dans ma table, ni même le Type de l'optique dans mon sous-formulaire... Est-ce que ça peut être dû au fait que ce soit une liste de choix?
    Pourtant dans le tuto de Claude Leloup sur les formulaires père/fils, ça marche... Bon en même temps c'est normal, lui il écrit les tutos

    Edit: J'ai posé la question directement dans le sujet du tuto, je reviens quand j'ai résolu ce soucis.

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Bonjour.

    Vérifie les champs Pére/Fils (voir propriété de l'objet Sous-Formulaire) utilisés pour faire la liaison entre le formulaire et le sous-formulaire. Il devrait contenir le champ [ClefTypeOptique] ou quelque chose comme cela.

    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.

  14. #14
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Merci, j'ai demandé directement à la source du tuto pour m'en sortir et la solution était toute bête, j'm'étais compliqué la vie pour rien (comme d'hab...).
    Donc maintenant je n'ai plus de case à cocher, je fais juste la liste des caractéristiques utiles...

    Je vais relire ce que vous m'aviez dit plus haut et essayer d'avancer comme une grande. Je reviens vite
    En tout cas merci à tous pour votre générosité, c'est vraiment précieux

  15. #15
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    D'abord, je crois que j'ai à peu près compris l'idée du code (d'ailleurs il manque pas un point entre r et FindFirst, ligne 7? En tout cas merci pour les commentaires, ça aide beaucoup).

    Juste pour être sûre de la façon de procéder:
    Il faut d'abord que je crée un formulaire avec toutes les caractéristiques possibles?
    Et ensuite que je tape ce code (où ça? Directement dans le formulaire? dans une requête?) pour n'afficher que les champs qui m'intéresse (grâce à la table "ChampOptique" créée précédemment?

    Alors, comment ça se passe si j'ajoute une nouvelle caractéristique dans ma liste des caractéristique? Faut que je modifie mon formulaire?
    On peut pas créer directement le formulaire en fonction des enregistrements de la table ChampOptique?

    Ex. Si mon Optique numéro XXX est une optique de Type 1. Que dans ma table ChampOptique, j'ai indiqué que pour les Type 1, les caractéristiques pertinentes sont les caractéristiques 1,3,5,12. Alors dès que je rentre le type d'optique il ne m'affiche que les champs à renseigner dans le formulaire (Caractéristique1, caractéristique3, caractéristique5 et caractéristique12)

    A force de vous poser mes questions, je me demande (je réfléchis en direct là ) si je ne peux pas encore faire ça directement avec les notions de formulaire père/fils que j'ai déjà approchées pour entrer les enregistrements dans ma table ChampOptique...

  16. #16
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    D'abord, je crois que j'ai à peu près compris l'idée du code (d'ailleurs il manque pas un point entre r et FindFirst, ligne 7? En tout cas merci pour les commentaires, ça aide beaucoup).
    Je n'ai pas encore réussi à convaincre l'équipe du forum d'inclure un compilateur donc désolé il peut y avoir de fautes de frappe ou de syntaxe.

    Juste pour être sûre de la façon de procéder:
    Il faut d'abord que je crée un formulaire avec toutes les caractéristiques possibles?
    C'est la solution la plus facile.

    Et ensuite que je tape ce code (où ça? Directement dans le formulaire? dans une requête?) pour n'afficher que les champs qui m'intéresse (grâce à la table "ChampOptique" créée précédemment?
    On ne peut pas mettre de code dans une requête, le code peut être "dans" le formulaire ou "dans" l'état on encore à l'extérieur dans un module ou un module de classe.

    Personnellement ma façon de faire est :
    Est-ce que le code ne concerne QUE ce formulaire ou état (rapport) ? Si oui, il va "dans" le formulaire ou l'état.
    Si non, il va dans un module.
    Pour les modules de classe qui sont des objets simpfiés, c'est quand j'ai besoin de données avec de la logique mais c'est un concept un peu avancé.

    Dans ton cas je mettrai ce code dans l'événement "On Open" (à l'ouvreture) ou "on Load" (au chargement) de ton formulaire.

    Alors, comment ça se passe si j'ajoute une nouvelle caractéristique dans ma liste des caractéristique? Faut que je modifie mon formulaire?
    Oui.

    On peut pas créer directement le formulaire en fonction des enregistrements de la table ChampOptique?
    Ex. Si mon Optique numéro XXX est une optique de Type 1. Que dans ma table ChampOptique, j'ai indiqué que pour les Type 1, les caractéristiques pertinentes sont les caractéristiques 1,3,5,12. Alors dès que je rentre le type d'optique il ne m'affiche que les champs à renseigner dans le formulaire (Caractéristique1, caractéristique3, caractéristique5 et caractéristique12)
    Si on peut mais c'est plus compliqué que simplement de les faire apparaître ou disparaître car il faut altérer la structure même du formulaire.

    A force de vous poser mes questions, je me demande (je réfléchis en direct là ) si je ne peux pas encore faire ça directement avec les notions de formulaire père/fils que j'ai déjà approchées pour entrer les enregistrements dans ma table ChampOptique...
    Tu pourrais et cela changerai sérieusement ta structure de table. Au lieu d'avoir une structure en ligne tu aurais une structure en colonne ou chaque caractéristique serait un enregistrement.
    C'est faisable et cela marche, les soucis viennent quand tu veux exploiter tes informations. Car il faut appeler chacun des enregistrements individuellement.

    Si tu veux la focale et le matériau, il te faut 2 enregistrements 1 pour la focale et 1 pour le matériau. Si tu veux toutes les caractéristiques d'un type données, il faut faire une requête qui va ramasser toutes les enregistrements concernant ce type.

    Pour avoir une idée de ceux à quoi cela pourrait ressembler regarde la fenêtre de propriété associé à un formulaire. Tu y as une caractéristique / une valeur.

    La plus part des outils Access on été conçu en pensant à un enregistrement qui contient tous les attributs.

    Donc si tu envisages d'ajouter souvent des caractéristiques ce serait sans doute rentable, si cela ne se produit que de temps en temps pas forcément.

    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.

  17. #17
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    Bonjour,

    Je suis toujours là, j'ai un peu tâtonné et testé, j'ai même débuggé le code fourni, une lettre qui manquait un "set" en trop.. Bref ça avance.
    J'ai aussi un peu tourné en rond car plein d'idées en même temps.. J'ai même failli répondre 3 fois à ce message.

    Bref j'ai fait un peu le tri dans tout ça et j'ai commencé à créer mon formulaire "fNouvelleRefFabricant" et je me pose plusieurs questions. Je vous pose donc celles qui restent dans ce sujet

    - Comment le code va-t-il gérer les contrôles du formulaire qui ne sont pas des caractéristiques?
    - Comment résoudre cette erreur:

    Nom : 150527-FormulaireNouvelleRéf.png
Affichages : 370
Taille : 17,4 Ko

    Je me doute que c'est à cause du nom de mon étiquette, mais comment dois-je procéder? Dois-je juste changer le nom de mon étiquette pour que ce soit celui du contrôle concerné?
    Je tiens à préciser que j'ai un peu modifié le code fourni, j'ai peut-être fait des erreurs:
    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
    Private Sub IdTypeOptique_AfterUpdate()
    Dim db As dao.Database: Set db = CurrentDb 'Défini un objet Database, y assigne la BD courante
    Dim r As dao.Recordset: Set r = db.OpenRecordset("ChampOptique", 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 = "[IdTypeOptique]=" & Me.IdTypeOptique & " and [" & c.Name & "]"
       Call r.FindFirst(critere)
     
       If r.NoMatch Then
             c.Enabled = False '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.Enabled = True
       End If
     
    Next c
     
    r.Close: Set r = Nothing 'Ferme et libère explicitement la mémoire
    db.Close: Set db = Nothing 'Ferme et libère explicitement la mémoire
    End Sub
    (Remarque, je n'ai pas encore modifié les commentaires, je le ferai quand mon code sera bon...)

    Merci d'avance! J'avance peu à peu

  18. #18
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Il faudrait savoir sur quelle ligne l'erreur arrive.

    Appuis sur Debuggage il va te pointer sur la ligne concerné.

    Pour les commentaires, je t'invite à les gérer au fur te à mesure car généralement, quand un code fonctionne on n'y revient pas :o) cra on se concentre sur ce qui ne fonctionne pas.

    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.

  19. #19
    Membre régulier
    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
    Points : 76
    Points
    76
    Par défaut
    J'avais appuyé sur débogage déjà mais je n'ai pas pensé à vous mentionner ce détail..
    Bref donc l'erreur se fait sur la ligne 8:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call r.FindFirst(critere)
    Je vais changer les commentaires maintenant aussi car c'est vrai qu'une fois que ça marche.. On oublie.
    Merci en tout cas

  20. #20
    Modérateur

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

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Ton code devrait ressembler à cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    critere = "[IdTypeOptique]=" & Me.IdTypeOptique & " and [NomChamp]=""[" & c.Name & "]"""
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

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