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

Access Discussion :

Rafraîchir une partie d'un formulaire


Sujet :

Access

  1. #1
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut Rafraîchir une partie d'un formulaire
    Bonjour,

    J'utilise un formulaire qui me permet d'enrichir une table. Ce formulaire comporte une trentaine de champs texte et numérique.

    Lors de certaines saisies, certaines des informations indiquées dans certains champs me sont utiles pour la saisie suivante. Ce que je souhaiterais donc, c'est pouvoir, lorsque je clique sur le bouton "suivant" de mon formulaire, rafraîchir une partie des champs seulement, tout en gardant la possibilité de raffraîchir à tout moment la totalité des champs.

    Cela me paraît quelque peu compliqué et j'imagine que cela doit nécessiter un développement en VBA. L'utilisation d'un sous-formulaire est-elle nécessaire ? Auriez-vous une piste ? (sauf erreur, le sujet n'a pas encore été abordé dans la FAQ Access).

    Merci pour votre aide précieuse.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Points : 268
    Points
    268
    Par défaut
    c est possible en passant par le VBA. Tu peux faire ca sur des procedures perte focus. Des que l utilisateur change de champ, tu rafraichis les champs que tu désires.

  3. #3
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    En fait, je m'aperçois que j'ai mal exposé mon problème.

    Dans le formulaire dont je parle, il y 2 type de données : des données clients et des données produits.

    Lorsque j'effectue une saisie sur le client A, celui-ci peut être concerné par plusieurs produits : produit 1, produit 2, etc.

    Ce que je souhaiterais donc c'est, plutôt que de devoir ressaisir l'intégralité des champs du formulaire, et en l'occurence les données clients, saisir uniquement les informations sur les produits. Il s'agirait donc, en quelque sorte, de "geler" les champs correspondant aux données du client, juste le temps que l'intégralité des données produits qui le concernent soient saisies.

    Dans mon idée (mais je suis un grand idéaliste !), il s'agirait d'un bouton qui exécuterait une macro/un code VBA permettant de "geler" donc les données clients afin de saisir uniquement les données produits. Un bouton saisie suivante serait utilisé spécifiquement pour cette procédure et un bouton de "retour à la normale" ou bien appelé "client suivant" permetterait de sortir de cette procédure particulière.

    C'est pour cela que je songeai à utiliser éventuellement un sous-formulaire. Mais encore une fois, je ne sais pas vraiment par où commencer !

    Si vous avez une piste, je suis preneur ! Merci.
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  4. #4
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    salut,

    si tu as plusieurs produits pour un client, pourquoi ne pas faire une table client et une table produits et la tu peux faire un sous formulaire.

    si tu as un produit qui va pour plusieurs client il faut ajouter à ce moment là un table de liaison.

    c'est faisable, tout dépend pourquoi actuellement tu n'as qu'une table?

    bon courrage a+

  5. #5
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Citation Envoyé par moicats
    pourquoi actuellement tu n'as qu'une table?
    En fait, lorsque je parle de produits, il ne s'agit là que d'un exemple. Disons plutôt que pour un même client, il peu y avoir plusieurs évènements chronologiques, mais chacun d'entre est renseigné dans la table en une seule fois.

    Par exemple :

    client A
    évènement 1 => 01/01/06
    évènement 2 => 10/01/06
    évènement 3 => 17/01/06

    date de saisie des évènements => 01/02/06

    C'est là la méthodologie utilisée dans mon activité (je ne peux pas en dire plus ...).

    Le fait d'avoir une table clients et une table "évènements" peut m'aider à faire cela ?

    Sinon j'avais une autre idée, mais en VBA. Je me permets d'exposer la "structure" du prog. auquel j'ai pensé :

    (ce code serait contenu dans une procédure événementielle "sur click" dans un bouton)

    1 - déclaration des champs que je souhaite ne pas avoir à ressasir, du genre 2 - ouverture d'un formulaire préalablement créé pour récupérer temporairement les valeurs de ces champs

    3 - copie des valeurs des champs depuis le formulaire de saisie / collage sur le form. temporaire

    4 - passage à l'enregistrement suivant depuis le formulaire de saisie (enrichissement de la table) puis récupération par fonction copier/coller des valeurs des champs depuis le form. temp. en direction du formulaire de saisie

    5 - saisie par l'utilisateur des information sur l'évènement suivant, puis répéter la même procédure jusqu'à ce que tous les évenèments soient saisis. Sortie par l'utilisation du bouton "saisie suivante".

    Pouvez-vous me dire ce que vous en pensez ? Voyez-vous une méthode plus simple ?
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Pour t'éviter le copier coller intempestif, tu peux utiliser la combinaison Ctrl + 3 (clavier) et la valeur de l'enregistrement précédent se retrouve dans ton champ.

    Maintenant, en VBA tu peux toujours lors de la sauvegarde d'un enregistrement, copier toutes les valeurs que tu désire dans des variables et les réutiliser dans ton nouvel enregistrement.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 52
    Points : 32
    Points
    32
    Par défaut
    Bon moi aussi je débute, mais je pense que pour rafraichir un champ tu peux utiliser la fonction requery sur ton champ genre :

    forms!tonForm!tonChamp.requery

    mais si c'est pour filtrer là je sais pas trop.

    oops j'avais pas lu les messages d'apres, moi je dis tu peux utiliser l'assistant de création de formulaire d'access, il suffit que tes tables soient bien créees et liées. Dans l'assistant tu sélectionnes les champs qu'il faut et apres tu pourra les grouper par client. enfin normalement.

    voilà, en espérant avoir été juste.

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Citation Envoyé par mastasushi
    Bon moi aussi je débute, mais je pense que pour rafraichir un champ tu peux utiliser la fonction requery sur ton champ genre :

    forms!tonForm!tonChamp.requery
    Requery, le mot indique que l'on va réactualiser les données renvoyées par une requête.
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  9. #9
    Membre actif Avatar de moicats
    Inscrit en
    Mars 2006
    Messages
    299
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 299
    Points : 200
    Points
    200
    Par défaut
    salut,

    pour moi, si tu as plusieurs clients (avec des infos du genre adresse...) et que pour chaque clients tu as plusieurs évenements (date, libellé...) le plus simple serait d'avoir deux tables "client" et "evenement" avec un code client (num auto dans table client) que tu attache à chaque evenement.

    table client:
    code; nom; adresse;.....

    table evenement:
    num; code_client; date; libellé;.....

    à partir de la tu peux créer un formulaire contenant les informations du client et un sous-formulaire contenant la liste des evenments qui s'y attache (grace au code)

    comme ça tu peux enregistrer autant d'évenements que tu veux pour un client sans ressaisir les infos client à chaque fois.
    puis passer au client suivant quand tu le souhaites.

    esperant avoir compris ton probleme et avoir pu t'aider
    bon courrage, et bonne continuation
    a+

  10. #10
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    salut,

    si j'ai bien compris ton problème tu désires conserver des données saisies pour les mettre dans l'enregistrement suivant.

    Si c'est le cas il n'est pas nécessaire d'ouvrir un autre formulaire
    Tu as un formulaire qui te permet de rentrer les données en passant d'un enregistrement à l'autre.
    Par exemple:
    champs1 tu lui associe une zone de texte champ1Sauvegarde (non visible et indépendant)

    puis tu mets du code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     sur perte de focus
    me!champs1sauvegarde = me!champs1
    Puis tu mets le code suivant:après insertion d'un reccord
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    afert insert
    me!champs1.defautvalue = me!champs1sauvegarde
    et ainsi de suite pour tous tes champs que tu désires répliquer

    A+

  11. #11
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Merci Alexandre, cela semble être la méthode la plus efficace et en tout cas la plus facile à mettre en oeuvre ... sauf que, j'ai un petit problème et 2 petites questions (je sais, j'abuse).

    Le petit problème est que lorsque je fais saisie suivante, le formulaire est mis à jour et les données enregistrées sur la table (et cela est plutôt bien !), les champs du formulaire sont remis à blanc, sauf celui sur lequel j'ai placé les procédures évènementielle (comme tu me l'as indiqué).

    Mais (et oui il y a toujours un mais ...), ce champ ne fait pas apparaître la donnée saisie mais m'indique un magnifique.

    Cela m'amène à ma première petite question : les 2 procédures évènemtielles (perte focus et après MAJ) sont bien associées au champ1 et non pas au champ1.Sauvegarde ?

    Deuxième petite question : sur l'évènement perte focus, j'ai déjà du code de saisie, mais au niveau d'un module (donc déclaré en Public). Est-il possible de faire cohabiter 2 type de procédure : Public et Private ?
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  12. #12
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut,

    question s'il met #nom c'est probablement que tu n'as pas crée la zone de texte champs1sauvegarde
    Pour faire la vérification il te faut faire d'abord mettre ta zone de texte "champs1sauvegarde" en visible pour vérifier qu'il y a bien une valeur qui vient s'inscrire lorsque tu quittes le champ1

    Ensuite as tu bien mis le code sur after insert du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_AfterInsert()
     Me![monchamps1].DefaultValue =me![monchamps1sauvegarde] 
    End Sub

    pour ta 2ème question je n'ai pas bien compris comment tu peux avoir 2 procédure
    sur la perte de focus il doit y avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Monchamps1_LostFocus()
     me![monchamps1sauvegarde] = Me![monchamps1]
     End Sub
    A1

  13. #13
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    En effet, les infos saisies dans le champs1 apparaissent bien dans le champs1Sauvegarde. Par contre, lorsque je clique sur le bouton saisie suivante, ce qui correspond au code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Commande90_Click()
    On Error GoTo Err_Commande90_Click
     
        DoCmd.GoToRecord , , acNext
    Exit_Commande90_Click:
        Exit Sub
    Err_Commande90_Click:
        MsgBox Err.Description
        Resume Exit_Commande90_Click
     
    End Sub
    Les informations entrées dans champs1 disparaissent mais sans être remplacées par le contenu de champs1Sauvegarde. Est-ce normal ? Voici le code entré sur perte focus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Nom_titulaire_LostFocus()
    Me!Nom_titulaire_sauv = Me!Nom_titulaire
    End Sub
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  14. #14
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut,

    lorsque tu rajoutes un enregistrement la valeur dans champs1sauvegarde reste bien?

    puis tu peux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <div style="text-align: left;">Private Sub Commande90_Click()
    On Error GoTo Err_Commande90_Click
     
        DoCmd.GoToRecord , , acNext
        ' met la valeur par défault
        Me![monchamps1].DefaultValue =me![monchamps1sauvegarde] 
    Exit_Commande90_Click:
        Exit Sub
    Err_Commande90_Click:
        MsgBox Err.Description
        Resume Exit_Commande90_Click
     
    End Sub</div>
    Suite à ton problème j'ai cherché dans le livre "Access en action" aux éditions o'reilly il y a un exemple qui utilise la propriété "tag" d'un contrôle pour transmettre au champ suivant, c'est encore plus élégant que de rajouter un champs

  15. #15
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Salut,

    Merci beaucoup pour ton aide. Oui, en effet, le champ champs1Sauvegarde est correctement mis à jour. J'avais déjà également essayé de placer cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commande130_Click()
    On Error GoTo Err_Commande130_Click
     
        DoCmd.GoToRecord , , acNext
     
    Me!Nom_titulaire.DefaultValue = Me!Nom_titulaire_sauv
     
    Exit_Commande130_Click:
        Exit Sub
     
    Err_Commande130_Click:
        MsgBox Err.Description
        Resume Exit_Commande130_Click
    End Sub
    Mais VB me renvoie dans mes 22 en m'indiquant "incompatibilité de type" et en faisant apparaître dans le champ "Nom_titulaire".

    Je vais jeter un oeil dans le bouquin Access en action (que j'ai eu la bonne idée d'acheter) concernant les tags. En attendant tu peux m'en dire un peu plus ?
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

  16. #16
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut,

    c'est bizarre en effet, je n'ai jamais testé mais essaye avec la propriété tag

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Monchamps1_LostFocus() me![Nom_titulaire].tag = Me![Nom_titulaire] End Sub
    puis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Commande130_Click() On Error GoTo Err_Commande130_Click DoCmd.GoToRecord , , acNext Me!Nom_titulaire.DefaultValue = Me!Nom_titulaire.tag Exit_Commande130_Click: Exit Sub Err_Commande130_Click: MsgBox Err.Description Resume Exit_Commande130_Click End Sub
    Pour plus de détail c'est à la page 406 à 410

    A+

  17. #17
    Membre éclairé
    Homme Profil pro
    Comptable
    Inscrit en
    Mars 2005
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Mars 2005
    Messages : 511
    Points : 678
    Points
    678
    Par défaut
    Salut,

    j'ai fait un petit essai avec les chiffres pas de problème mais avec le texte j'ai aussi #nom?

    j'ai vu qu'il faut mettre pour le texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Monchamps1_LostFocus() me![Nom_titulaire].tag = "'" & Me![Nom_titulaire] & "'" End Sub


    mais la solution du livre est nettement plus intéressante et souple (on remarque où sont les pros)

    A+

  18. #18
    Membre du Club Avatar de KEROZEN
    Inscrit en
    Mars 2006
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations forums :
    Inscription : Mars 2006
    Messages : 66
    Points : 46
    Points
    46
    Par défaut
    Merci bcp Alex ! Ca marche !

    Mais je vais quand même jeter un coup d'oeil dans le bouquin, histoire d'avoir 2 méthodes différentes. On sait jamais, cela peut toujours servir !

    @+
    Access est comme les films de David LYNCH ... il faut y revenir à plusieurs reprises pour y comprendre quelque chose ...

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

Discussions similaires

  1. Masquer une partie d'un formulaire
    Par rimama dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2007, 02h38
  2. rafraîchir une parti de la page
    Par schats dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/06/2007, 11h25
  3. Opacité sur une partie d'un formulaire
    Par hellspawn_ludo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/04/2007, 13h16
  4. Masquer une partie d'un formulaire
    Par crazydiver_e2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/01/2006, 11h36
  5. Afficher / Cacher une partie d'un formulaire
    Par damjal dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/10/2005, 18h10

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