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 :

Affichage automatique d'un champ d'un formulaire à un autre


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Affichage automatique d'un champ d'un formulaire à un autre
    Bonjour,

    Je viens recherche une aide précieuse à la création de ma base de donnée qui concerne la gestion de dossiers médicaux.

    J'ai créé un premier formulaire nommé "informations patient" avec pour clé primaire un N° de dossier automatique. Chaque nouvel enregistrement requière l'identification du patient par son nom, nom de JF, prénom date de naissance. Une fois ce formulaire complété, j'ai créé un bouton de commande qui m'ouvre un second formulaire à onglets en relation un à un nommé "consultations". J'aimerai que ce formulaire "consultations" reprenne automatiquement les champs N° dossier, nom, nom de JF, prénom et date de naissance.

    J'ai tenté d'utilisé la fonction de l'assistant à la création de formulaire avec lien entre N° de dossier mais sans résultat, ce dernier n'étant pas reporté automatiquement.

    Auriez-vous une solution s'il vous plait? Sachant que je n'ai que relative expérience d'access serait-il possible de me détailler la marche à suivre?

    Je vous remercie par avance pour votre aide

  2. #2
    Membre habitué Avatar de lakhdar16
    Homme Profil pro
    West POS Senior Representative
    Inscrit en
    Avril 2011
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : West POS Senior Representative
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Avril 2011
    Messages : 170
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    j'avais le même souci un jour, en essayant d’ouvrir un autre formulaire qui prends les même valeurs d'une Zone de liste.

    donc sur l’événement Double Clique de la Zone de liste j'ai Fais :

    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
    Private Sub Liste2_DblClick(Cancel As Integer)
    Dim IDart As Long
    Dim nbr As Long
     
    nbr = Liste2.ListCount - 1
     
    If nbr <= 0 Then
    Exit Sub
    Else
    DoCmd.OpenForm "frm_Patientez"
    DoEvents
    IDart = Liste2.Column(0)
     
    DoCmd.OpenForm "frm_ModifArticleOuest", acNormal, "", , , acNormal
    Forms("frm_ModifArticleOuest").idArticle.Value = IDart
    Forms("frm_ModifArticleOuest").NomArticle = DLookup("[Nom_Article]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Forms("frm_ModifArticleOuest").TypeArticle = DLookup("[Type]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Forms("frm_ModifArticleOuest").FormatArticle = DLookup("[format]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Forms("frm_ModifArticleOuest").PromoArticle = DLookup("[promotionnelle]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").Form.idArticle)
     
    Forms("frm_Patientez").Repaint
     
    If Forms("frm_ModifArticleOuest").PromoArticle = True Then
    Forms("frm_ModifArticleOuest").Datedébut.Visible = True
    Forms("frm_ModifArticleOuest").DateFin.Visible = True
    Forms("frm_ModifArticleOuest").Datedébut = DLookup("[date_de_début]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Forms("frm_ModifArticleOuest").DateFin = DLookup("[date_de_fin]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Else
    Forms("frm_ModifArticleOuest").Datedébut.Visible = False
    Forms("frm_ModifArticleOuest").DateFin.Visible = False
    Forms("frm_ModifArticleOuest").Datedébut = DLookup("[date_de_début]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    Forms("frm_ModifArticleOuest").DateFin = DLookup("[date_de_fin]", "[tbl_ArticleOuest]", "[ID_Article] = " & Forms("frm_ModifArticleOuest").idArticle)
    End If
    End If
     
    DoCmd.Close acForm, "frm_Patientez"
    End Sub
    sachant que le formulaire en question est "frm_ModifArticleOuest".

    pour ton cas le IDart = [N° de dossier Patient]

    peut être ça te donnera une piste.

    bon courage.

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    et bien malheureusement je ne suis pas assez callée en VBA pour comprendre et surtout adapter à ma base de donnée.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    L'idéal serait déjà d'avoir une table pour stocker les patients afin d'éviter de les resaisir à chaque fois....La table "T_patients" aurait une clé primaire (ID automatique ou n° de secu par exemple).
    T_patients (IDpatient, nom, nomJF, prenom, adresse, date de naissance)

    Je signale par ailleurs que les relations c'est entre les tables et pas entre les formulaires...Même si on comprends grosso-modo ce que vous avez voulu dire.

    Les consultations seraient stockées dans une autre table "T_consultations" qui aurait une clé primaire (ID automatique) et une clé étrangère (l'ID du patient). Ainsi il serait plus aisé de concevoir l'application.
    T_consultations (numDossier, #numPatient, champs1, champs2...)

    NB : en gras la clé primaire, le dièse indique une clé étrangère.

    Le premier formulaire ("F_patients") serait basé sur la table des patients. Le deuxième formulaire ("F_consultations", basé sur la table des consultations) pourrait devenir un sous-formulaire ou si ce n'est pas ergonomique il serait ouvert via un bouton par exemple.
    Dans ce cas, je vous conseille de baser ce 2ème formulaire sur une requête avec les 2 tables (sans oublier la jointure entre la clé primaire de la table des patients et la clé étrangère de la table des consultations) pour récupérer les infos du patient pour chaque consultation.
    Ainsi sur l'évènement clic du bouton du formulaire "F_patients", on pourrait placer un code du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub MonBouton_Click()
        DoCmd.OpenForm "F_consultations", acNormal, , "numPatient = " & Me.IDpatient
    End Sub
    Ce qui aura pour effet d'ouvrir le formulaire "F_consultations" en n'affichant que les consultations du patient choisi sur le premier formulaire

    Une telle conception serait plus normalisée et vous permettrait de faire ce que vous voulez Si je vous ai parlé en chinois, je vous conseille de lire la FAQ et les tutoriaux du site

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Un grand merci pour ces explications que je vais mettre en pratique dès ce soir et vous tiens au courant de l'avancée. jai également pris connaissance du FAQ et du tutoriel que je trouve formidable, clair et précis. Je ne connais pas encore toutes les fonctions de ce forum mais je suis certaine d'y trouver toutes les réponses à mes questions. Encore merci

  6. #6
    Membre à l'essai
    Inscrit en
    Janvier 2014
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2014
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonsoir,

    Je tiens à vous remercier pour les réponses que vous m'avez apportées. J'ai réussi et ceci est une victoire pour moi! à créer un formulaire et un sous formulaire avec synchronisation (champs père-champs fils), et le mieux cela fonctionne!
    Pour améliorer cette base, je me permets de poser une nouvelle question car je n'ai pas trouver de solution via le net après 2 jours de recherche.

    Mon formulaire nommée F-patients comporte les champs nom, prénom, nomJF (etc), et pour clé primaire IDpatient (numérotation automatique). mon sous formulaire comporte donc une clé secondaire (nommée pour plus de facilité pour moi ID patient) synchronisée donc avec mon formulaire. Je souhaiterais que mon sous formulaire reprenne automatiquement les champs nom, prénom, nomJF de mon formulaire (comme çà je retrouverai ces valeurs pour l'exploitation à partir des tables) sans avoir à les réécrire.
    Je suis bien embêtée car je ne trouve pas de situation qui correspondrait à la mienne et que je pourrais adapter. Ainsi je sollicite à nouveau votre aide.

    Bonne soirée.

    Cordialement

  7. #7
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Bonjour a tous

    un moyen simple de passer des donnees d'un formulaire a un autre est d'utiliser le dernier parametre OPenArgs de la commande
    Docmd.openform LeNom,LeMode,,,...,,,,Arguments

    Cette chaine Arguments va etre envoyee depuis le formulaire pere ayant appele vers le formulaire fils.
    On peut y mettre n'importe quoi comme info.

    Dans le formulaire fils, on recupere au moment du Form_Open ce qui a ete envoye par le formulaire pere, dans une propriete Me.OpenArgs.

    On commence par eviter les erreurs d'excution en testant isnull(me.openargs) qui va verifier si le pere a envoye quelque chose.

    Si oui, on a juste a faire un peu d'analyse syntaxique si on a envoye plusieurs parametres. Perso j'utilise souvent un truc (que je me suis mis au point) :
    l'argument emis est de la forme :
    /Param1=xxxxx/Param2=yyyyyyy/Param3=zzzzzzz/..... ou meme
    /xxxxxx/yyyyyyyy/zzzzzzz/.... (c'est l'ordre qui fixe l'usage de la donnee) et
    l'analyse de l'argument est du type
    a) chercher le /
    b) extraire le texte entre les /
    c) chercher le =
    d) extraire le Param i
    e) extraire la donnee qui suit le = si il y est, sinon c'est la donnee.

    tout ca dans une procedure a peu pres passe partout, qui renvoie les donnees envoyees au fils, avec eventuellement des valeurs par defaut si le parametre est absent.

    L'avantage est de decoupler l'excution du formulaire pere et du formulaire fils.
    On peut lancer le fils tout seul pour tester qu'il fait bien son boulot.

    Cela n'exclue pas la possibilite d'utiliser les autres methodes decrites par les autres participants.

    Cdlt
    Caramel13

  8. #8
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Bonjour a Tous
    Suite de la reponse precedente

    Je pense avoir detecte une erreur d'analyse faite par nola38 :
    Meme si les champs id sont tres pratiques en numerotation automatique, il ne faut pas les utiliser comme moyen de synchronisation.
    En effet, cette numerotation est completement geree par Access et le meme enregistrement avec les memes donnees, reecrit apres effactement, n'aura pas le meme id.
    ou bien, vous faites une copie de la table pour une sauvegarde par exemple, et alors rien ne dit que les champs "numeroauto" auront les memes valeurs. Donc on n'utilise par ce champ pour ca.
    Il faut donc effectuer la synchronisation entre le formulaire pere et le fils avec un autre champ (ou plusieurs). Le champ NumDossier est plus approprie.
    Dans l'assistant de synchronisation, apres avoir defini la source du sous-formulaire, on clique dans l'onglet Donnees des Proprietes, sur le champ ChampsPeres ou ChampsFils, pour ouvrir la fenetre de liaison.

    La, malheureusement, Access propose d'office de synchroniser sur le champ ID surtout s'il a le meme nom entre la table Pere et la table Fille.
    Il faut resister et choisir un (ou plus) autre champ pour faire la liaison.
    Sauf pour la comprehension, les champs n'ont pas necessairement le meme nom.

    On laisse de cote les subtilites de l'integrite referentielle et autres options.

    Et c'est a peu pres tout pour assurer la synchro.

    Par contre, au moment de l'execution, on a souvent cree l'enregistrement PERE avant le fils (c'est mieux). Et le processus de creation du fils n'a rien d'automatique.
    Soit on le cree via le bouton d'activation du formulaire FILS avec un rs.addnew defini pour un recordset sur la Table FILLE, pour un enregistrement semi-vide (avec juste les infos de liaison) qui sera complete dans le formulaire FILS, celui-ci apparaissant partiellement rempli,
    Soit on le cree dans le Form_Open du formulaire FILS en ayant recupere les parametres infos de liaison comme decrit dans mon post precedent toujours avec un rs.addnew
    Soit il se cree tout seul lors de la saisie du premier caractere de n'importe quel champ du formulaire fils, sans oublier de remplir la aussi les infos des champs de liaison, que l'on prendra soin de mettre en propriete "verrouille = oui" pour eviter une action intempestive de l'operateur.
    En bref, la creation d'un fils n'a rien d'automatique sans mettre un peu de code.
    Apres, par contre, lors d'une navigation d'un enregistrement à l'autre, c'est le bonheur.

    En esperant que ceci est assez clair, mais je vous rassure la liaison entre formulaires PERE-FILS ca marche bien ...
    meme si c'est un peu chaud a mettre au point.

    Cdlt
    Caramel13

  9. #9
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2010
    Messages
    801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 801
    Points : 1 107
    Points
    1 107
    Par défaut
    Bonjour,

    Au cas où tu ne l'aurais pas remarqué, nola38 est une débutante. Non seulement tout ce que tu as écrit ne lui servira à rien car elle ne va rien comprendre mais en plus tu ne réponds pas à son problème.

    Nola38, il faut que tu lises quand on écrit les solutions ^^ :
    Citation Envoyé par paidge
    Dans ce cas, je vous conseille de baser ce 2ème formulaire sur une requête avec les 2 tables (sans oublier la jointure entre la clé primaire de la table des patients et la clé étrangère de la table des consultations) pour récupérer les infos du patient pour chaque consultation.
    En résumé, il faut baser le sous-formulaire non pas uniquement sur la table des consultations mais aussi sur la table des patients. Voici à quoi doit ressembler le SQL de la source de données du sous-formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_consultations.*, T_patients.*
    FROM T_consultations INNER JOIN T_patients ON T_consultations.IDpatient = T_patients.IDpatient;
    Mais, entre nous, je ne vois pas l'intérêt de récupérer ces infos dans le sous-formulaire vu qu'elles sont affichées dans le formulaire principal...

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

Discussions similaires

  1. [AC-2010] Incrémentation automatique d'un champ dans un formulaire
    Par kerneispa dans le forum IHM
    Réponses: 3
    Dernier message: 03/07/2013, 14h56
  2. [AJAX] sauvegarde automatique d'un champ d'un formulaire
    Par LuneArgentee dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/04/2008, 13h41
  3. affichage auto d'un champs dans sous formulaire
    Par TCPARIS dans le forum IHM
    Réponses: 2
    Dernier message: 16/09/2007, 22h32
  4. Réponses: 6
    Dernier message: 30/04/2007, 23h36
  5. [MySQL] affichage automatique d'un champs suite à un choix dans une liste déroulante
    Par sanaa.ben dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 13/10/2006, 00h18

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