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 :

Ouverture formulaire sur nouvel enregistrement


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut Ouverture formulaire sur nouvel enregistrement
    Bonjour,

    Voici le contexte :
    J'ai une petite BD avec une table Evaluation et une table Patient liées par l'identifiant de l'évaluation : Relation (1-n) entre Evaluation et Patient.
    Petite précision, l'identifiant de mon patient utilise un numéro auto.
    J'ai un formulaire qui décrit d'abord l’évaluation puis le patient.
    Je voudrais ouvrir ce formulaire sur un nouveau patient d'une évaluation existante.

    Je tourne en rond dans mes tests mais pour le moment j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      Form_Saisie_evaluation.FilterOnLoad = True
        DoCmd.OpenForm "Monformulaire", acNormal, , "Evaluation.IdEvaluation='" & MonEval & "'"
        DoCmd.GoToRecord acDataForm, "Monformulaire", acNewRec
    La première instruction Docmd ouvre le formulaire sur le dernier patient de l'évaluation en question
    La deuxième instruction "remet les compteurs à zéro" et met mon formulaire sur un nouvel enregistrement (nouvelle évaluation, nouveau patient).

    Quelqu'un aurait-il une idée de génie?

    Merci d'avance pour votre aide,

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,

    Là je suis d'accord
    La première instruction Docmd ouvre le formulaire sur le dernier patient de l'évaluation en question
    Par contre ici la première affirmation est fausse, rien n'est remis à zéro, il se place juste sur un enregistrement vide.
    La deuxième instruction "remet les compteurs à zéro" et met mon formulaire sur un nouvel enregistrement (nouvelle évaluation, nouveau patient).
    Tu veux créer un nouvel enregistrement patient et lui affecter un "Evaluation.IdEvaluation" défini par l'enregistrement courant du formulaire appelant.

    Donc :
    On ouvre le formulaire sur un nouvel enregistrement.
    On affecte l'Evaluation.IdEvaluation qui au passage doit être un numérique long donc les séparateurs String sont à éviter, à moins de vouloir provoquer des erreurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DoCmd.OpenForm "Monformulaire", acNormal
    DoCmd.GoToRecord acDataForm, "Monformulaire", acNewRec
    Forms.Monformulaire.idEvaluation =  MonEval
    Tout simplement.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Merci pour ton aide.

    Malheureusement je n'arrive pas à affecter mon identifiant d'évaluation.
    L'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.Monformulaire.idEvaluation =  MonEval
    génère une erreur pas franchement explicite à savoir "Erreur définie par l'application ou par l'objet"

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    tu peux poster l'ensemble des instructions, j'ai pas ma boule de cristal avec moi aujourd'hui...
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  5. #5
    ony
    ony est déconnecté
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    tu n'as qu'à placer MonEval dans l'argument et c'est fait,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "Monformulaire", acNormal,,,,,MonEval

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Alors en fait j'ai 2 formulaires.
    Le premier comporte plusieurs boutons avec toutes les fonctions utilisables par l'utilisateur. Il y a donc, entre autre, un bouton permettant d'ouvrir une nouvelle "fiche patient" pour une évaluation existante.
    L'utilisateur choisit alors l'évaluation dans une liste puis valide.

    La validation devrait ouvrir le second formulaire constitué d'un objet onglet.
    la première page de l'onglet décrit l'évaluation
    les pages suivantes permettent de décrire le patient

    Du coup mon code exact est celui-ci :
    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
     
    Private Sub BtnValidChoixEval_Click()
     
        VbIdEvaluation = lstChoixEval
     
        Form_Saisie_evaluation.FilterOnLoad = True
     
        'Ouverture du formulaire de saisie
        DoCmd.OpenForm "Saisie_evaluation", acNormal, , "Evaluation.IdEvaluation='" & VbIdEvaluation & "'"
        'Chargement du formulaire sur nouvel enregistrement
        DoCmd.GoToRecord acDataForm, "Saisie_evaluation", acNewRec
     
        'Définition des pages visibles
        Form_Saisie_evaluation.Onglet.Pages(0).Visible = True
        Form_Saisie_evaluation.Onglet.Pages(1).Visible = True
         For i = 2 To 4
               Form_Saisie_evaluation.Onglet.Pages(i).Visible = False
          Next
     
        'Prise de focus par le formulaire de saisie
        Form_Saisie_evaluation.Onglet.Pages(1).SetFocus
     
            'Identifiant Patient (=identifiant evaluation _ numéro auto)
            Form_Saisie_evaluation.TxtIdHospit = VbIdEvaluation & "_" & Form_Saisie_evaluation.TxtIdAutoHospit
     
    End Sub

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Je présume que dans tes onglets le patient est dans un sous-formulaire.

    Si tu paramètres les propriétés champs Père Champ Fils, il suffit de remplir champs père (coté formulaire) avec la valeur du patient pour que le sous-formulaire patient se mette à jour.

    en fait il y a de nombreuses possibilités possibles et imaginable pour monter un formulaire comme celui que tu décris. Sans plus de précision c'est difficile de donner une solution.
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  8. #8
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Et bien non je n'ai pas fait de sous-formulaire,
    J'ai mis mes contrôles directement sur les pages de mon onglets.

  9. #9
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Tu fais comment pour avoir 2 tables différentes en édition dans le même formulaire ?
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  10. #10
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Dans les propriétés de mon formulaire j'ai mis en source une requête avec 2 tables liées par la clef primaire de ma première table (relation 1-n).

    Dans les propriétés de mes contrôles j'ai mis en source matable.mavariable

    Espérant avoir répondu à ta question

  11. #11
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Bonjour,
    Je te conseille de faire différemment.

    Ton formulaire principal avec une table (Evaluation) et dans tes onglets des formulaires pour ton Client.
    Ou le contraire, le formulaire principal pour le client dont tu dispatches les controles dans les onglets et un sousform pour l'éval.

    Ainsi tu gères ça avec les propriétés Champs père/Champs fils du ou des sous-form.

    Avec le montage actuel, tu remmènes un tuple composé d'une EVAL, et de plusieurs fois le même client (1 eval - n client) (ou le contraire).
    Si tu affectes un N° de client à ton EVAL, Cela t'oblige à repérer l'id de l'EVAL (la stocker dans un variable), faire un requery pour réinterroger la source pour qu'elle te remmène le client, puis revenir sur l'id avec un findfirst, qu'avec le requery tu n'affiches plus.

    Possible mais capilotracté comme approche.

    Avec champ père/champ fils tu choisis ton éval, tu mets une liste déroulante pour choisir ton client et point barre.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 46
    Points : 30
    Points
    30
    Par défaut
    Merci pour ton idée.

    J'ai donc créé un sous-formulaire intégré à mon formulaire principale pour la partie "évaluation".
    Mais comme je ne suis pas très habituée à utiliser les sous formulaires, je ne sais pas comment coder en VBA le fait d'ouvrir le sous formulaire (et aller sur l'enregistrement voulu) dans le formulaire principal.

    J'ai fait un docmd classique mais forcément ça l'ouvre à part.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        DoCmd.OpenForm "SForm_Evaluation"
        DoCmd.GoToRecord , , acNewRec
    Encore merci pour ton aide et désolée d'insister

  13. #13
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 006
    Points : 24 600
    Points
    24 600
    Par défaut
    Il n'y a pas ouvrir les sous-formulaires, ils s'ouvrent en même temps que le formulaire parent.

    Il te faut paramétrer le champ père et champ fils du container de ton sous-formulaire. Le container est le cadre qui entoure le sous-formulaire.

    Champ père doit contenir le nom du contrôle, dans le form, qui contient la clef de liaison avec Eval, soit l'id client et dans champ fils le contrôle qui contient l'id client coté Sous-form.

    Voici un tuto pour te guider.

    http://claudeleloup.developpez.com/t...che-pere-fils/

    Attention il ne s'agit de refaire le tuto mais juste qu'il t'aide pour champ père champ fils.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

Discussions similaires

  1. [AC-2010] Ouverture d'un formulaire sur nouvel enregistrement - erreur isolée
    Par Beaver dans le forum Macros Access
    Réponses: 0
    Dernier message: 13/07/2015, 11h44
  2. Réponses: 3
    Dernier message: 07/03/2014, 18h16
  3. [Toutes versions] Probleme ouverture formulaire sur un enregistrement préci
    Par azur123 dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/08/2012, 23h43
  4. [AC-2002] Ouverture formulaire sur nouvel enregistrement
    Par Auron89 dans le forum IHM
    Réponses: 8
    Dernier message: 07/06/2010, 07h47
  5. ouverture du formulaire sur nouvel enregistrement
    Par azde7015 dans le forum IHM
    Réponses: 3
    Dernier message: 14/02/2006, 19h39

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