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 :

Réinjection de données dans formulaire


Sujet :

IHM

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut Réinjection de données dans formulaire
    Bonjour à tous,

    Je tente de réinjecter les valeurs d'une requête dans un formulaire contenant que des champs indépendants pour éviter d'utiliser des variables.

    Pour essayer j'ai mis ce code basique sur un bouton dans un formulaire indépendant contenant un combobox de sélection.

    Voici le code du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Commande8_Click()
     
    Dim MaRequete As String
     
    MaRequete = "SELECT [Devis et Factures].NumDocument,[devis et factures].datedoc FROM [Devis et Factures]" & _
    " WHERE ((([Devis et Factures].NumDocument)=[Formulaires]![Formulaire3]![ListeDocuments]));"
     
    DoCmd.OpenForm "devis et factures"
    Forms![Devis et Factures].RecordSource = MaRequete
     
    End Sub
    Aucune erreur n'apparait quand je clique sur le bouton mais aucune donnée non plus... Je suppose qu'il faut redéfinir la source de chaque champ du formulaire à ouvrir avec le bouton ..., j'ai essayé en mettant à la suite du code plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    forms![devis et facture]![numdocument].controlsource=NumDocument
    forms![devis et facture]![DateDoc].controlsource=DateDoc
    Mais évidement il me signale que les variables sont inconnues !

    Cela veut il dire qu'il faut déclarer la source de chaque champ comme variable avant exécution ? Comment s'y prendre pour avoir le moins de code possible ?

    (Pour l'instant je me servais de variables reprises dans un formulaire pour en ouvrir un autre mais vu le nombre de champs existants dans le formulaire final ça devenait pénible, j'ai donc pensé qu'il valait mieux essayer de le remplir avec le résultat d'une requête ...)

    Merci d'avance pour vos suggestions

  2. #2
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    Bonjour,

    Résumons :

    Tu as dans un formulaire un contrôle indépendant dans lequel tu veux afficher le résultat d'une requête.

    Je te suggère d'utiliser une fonction de domaine pour y arriver.

    Vois ici comment cela fonctionne :

    -Les fonctions de domaine (Philippe JOCHMANS)
    http://starec.developpez.com/tuto/fonctionsdomaines/

  3. #3
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Je n'ai pas tout saisi, mais voici ma suggestion :

    au lieu de définir la source du formulaire ainsi que le contenu de chaque champ à partir du bouton, il me semblerait plus logique de le faire à partir du formulaire qui s'ouvre.

    Dans un premier temps, le bouton ouvre le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "devis et factures"
    Dans un deuxième temps, sur l'événement "Ouverture" du formulaire "devis et facture", vous définissez votre chaîne SQL, puis vous l'affectez comme source du formulaire.


    Pour les contrôles, à priori (sauf cas plus complexe), il suffit de leur affecter comme source un des champs de la requête.
    Je ne vois pas trop l'intérêt de les mettre indépendant?

    Dernière chose : comme votre chaine sql contient une condition "where", il faudra peut-être stocker ces valeur soit des variables globales, soit dans une table paramètre, soit utiliser "open args"

    Pierre

  4. #4
    Membre expérimenté
    Homme Profil pro
    Indépendant développeur et formateur
    Inscrit en
    Octobre 2007
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Indépendant développeur et formateur
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 036
    Points : 1 598
    Points
    1 598
    Par défaut
    Hello
    pour ce genre de fonctionnement, je base le formulaire "devis et factures"
    sur la table [Devis et Factures]. ça peut même être fait à la va vite avec un assistant
    enuite, soit j'ouvre le formulaire avec un filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "devis et factures",,, "NumDocument)= " & [Formulaires]![Formulaire3]![ListeDocuments]
    soit les données sont dans un sous-formulaire, alors j'utilise juste la relation père-fils qui peut d'ailleurs se programmer avec .linkchildfield et .linkmasterfield

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Bon, alors un peu d'explications pour que vous cerniez mieux le problème :

    Le formulaire que je veux remplir avec le résultat de requête est le même qui sert à la saisie des données.
    Les champs sont indépendants car c'est la seule façon pour que l'on puisse contrôler finement ce que rentre l'utilisateur dans le dit formulaire et que des conditions puissent être vérifiées en VBA.

    Ce que je voulais c'est réinjecter les valeurs dans le formulaire lorsqu'on choisit dans une liste placée dans un autre formulaire.

    Jusqu' à présent je déclarais les variables concernant chaque valeur de chaque champ de destination en les reprenant une à une dans le formulaire ou se trouve la liste de choix de documents...

    Concernant les fonctions de domaines, je pense que vous vous référez à Dlookup qui serait utilisé autant de fois que de champs à remplir dans le formulaire à ouvrir non ?

    Je pensais que l'utilisation d'une requête alourdissait moins le procesus !

    Qu'est ce qu'un pro ferait dans un cas comme çà ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par clickandgo Voir le message
    Les champs sont indépendants car c'est la seule façon pour que l'on puisse contrôler finement ce que rentre l'utilisateur dans le dit formulaire et que des conditions puissent être vérifiées en VBA.
    Même si les champs sont liées tu peux également contrôler finement les saisies et les canaliser.
    En effet il y a plein de trucs tel que : masque de saisie, test des valeurs, etc. Et souvent avec moins de codes , voir pas du tout.

    Je te conseille de t'orienter vers cette solution, cela allégera ton travail.

    Philippe

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    Citation Envoyé par Philippe JOCHMANS Voir le message
    Bonjour



    Même si les champs sont liées tu peux également contrôler finement les saisies et les canaliser.
    En effet il y a plein de trucs tel que : masque de saisie, test des valeurs, etc. Et souvent avec moins de codes , voir pas du tout.

    Je te conseille de t'orienter vers cette solution, cela allégera ton travail.

    Philippe
    C' est ce que je faisais avant mais access enregistrait les données dès que l'on changeait de champ, même quand les données n' étaient pas correctes...
    En faisant des requêtes par vba après vérification des conditions le contrôle est total , très utile par exemple quand on remplit des lignes de factures/devis.

    En effet la ligne ne s'enregistre que si tous les champs et toutes les conditions sont remplis ...

  8. #8
    Rédacteur/Modérateur

    Avatar de ClaudeLELOUP
    Homme Profil pro
    Chercheur de loisirs (ayant trouvé tous les jours !)
    Inscrit en
    Novembre 2006
    Messages
    20 594
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de loisirs (ayant trouvé tous les jours !)
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 594
    Points : 281 907
    Points
    281 907
    Par défaut
    mais access enregistrait les données dès que l'on changeait de champ, même quand les données n' étaient pas correctes...
    Intéresse-toi à l'événement "Avant Mise à Jour" de ton contrôle.
    Cela te permet de vérifier et prendre la main pour
    - valider et accepter ;
    - corriger d'office ;
    - refuser et afficher un message...

    édit: c'est alors la propriété ".Text" qu'il faut manipuler (et non pas ".value")

  9. #9
    Membre actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 115
    Points : 274
    Points
    274
    Par défaut
    J'ai opté pour la fonction de domaine Dlookup qui me ramène toutes les valeurs requises champ par champ, je ne l'avais pas utilisée dans ce procesus croyant qu'elle allait consommer beaucoup de ressource/ temps mais il n'en est rien

    Merci à tous

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

Discussions similaires

  1. [MySQL] affichage donnée dans formulaire
    Par pierre27 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 19/09/2007, 16h11
  2. Trier données dans formulaire par checkbox
    Par Sofie109 dans le forum Access
    Réponses: 9
    Dernier message: 27/07/2006, 08h56
  3. ajout donnée dans formulaire
    Par gregius dans le forum Access
    Réponses: 2
    Dernier message: 09/01/2006, 11h12
  4. saisie de données dans formulaire
    Par philpaul dans le forum Access
    Réponses: 4
    Dernier message: 15/09/2005, 13h13
  5. Réponses: 4
    Dernier message: 29/11/2004, 16h51

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