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 :

RechDom pour un enregistrement [AC-2000]


Sujet :

IHM

  1. #1
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut RechDom pour un enregistrement
    Bonjour.

    Dans une table contenant des articles, il y a 3 champs :

    - ID (clé primaire)
    - Désignation
    - Prix unitaire

    Comme le prix unitaire change fréquemment, je ne peux l'insérer directement dans les factures par zone de liste, m'obligeant à le saisir manuellement. Dans le sous-formulaire de facturation, je sélectionne l'article par une zone de liste, la désignation s'inscrit dans le champ correspondant, je lis le prix et je l'insère manuellement.
    Donc, dans le champ idoine de la facture, j'aimerais qu'à la sélection de l'article que le tarif soit saisi automatiquement comme valeur par défaut via la fonction RechDom mais je ne sais pas comment faire pour sélectionner le bon enregistrement en fonction de l'ID.

    Merci.

  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 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Bonjour,

    si tu as le prix dans la liste déroulante tu peux directement l'insérer.

    Dans l'événement Après Maj de la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.prix = me.liste.column(x)
    ou x est le N° de la colonne contenant le prix (en partant de 0).

    Cordialement,

  3. #3
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Ca ne marche pas.

    La table Produits contient ces champs :

    - PR_ID
    - PR_Produit
    - PR_PUHT

    Dans le sous-formulaire de facturation, le contenu de la zone déroulante est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [Produits].[PR_ID], [Produits].[PR_Produit], [Produits].[PR_PUHT] FROM Produits ORDER BY [Produits].[PR_Produit];
    Dans le sous-formulaire, le champ dans lequel PR_PUHT doit s'insérer s'appelle FA_PUHT.
    En partant de 0, le numéro est donc le 2.

    Un message d'erreur indique que l'application ne peut pas trouver la macro...

  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 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Il faut ouvrir un module vba et y mettre le code.

  5. #5
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Je ne sais pas trop comment faire. Ca plante avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub PR_ID_AfterUpdate()
     
        Me.Factures_Sub.FA_PUHT = Me.Produits.PR_PUHT.Column(2)
     
    End Sub
    Il n'y aurait pas plutôt moyen de compléter cette fonction (qu'on insèrerait en valeur par défaut dans le champ FA_PUHT) pour faire en sorte qu'elle aille rechercher le prix dans le bon enregistrement en fonction de l'ID de l'article sélectionné dans la zone de liste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RechDom("[PR_PUHT]";"[Produits]")

  6. #6
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Bonjour,

    ça plante... c'est vague !

    Un message particulier à fournir ?

    La syntaxe n'est peut être pas adaptée à ton cas.

    Ou est la liste source ? ou est le controle destination ?

    Voir éventuellement le tuto sur les syntaxes d'appels formulaires (avec son tableau pense-bête) sur mon espace perso. C'est totalement incontournable.

    Edit : Concernant le Rechdom. Fonction interessante mais qui utilise une requete pour aller chercher l'info, ce n'est pas du tout optimisé car tu as déjà l'info dans la liste. Sur quelques enregstriment ça peut donner le change, sur une table volumineuse ça peut devenir ennuyeux.

    Cordialement,

  7. #7
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Je précise...

    Tables utilisées

    produits
    pr_id (clé primaire)
    pr_produit
    pr_puht

    factures_sub
    fa_id (numérique, joint avec la clé primaire de la table factures, non utile pour mon problème)
    pr_id
    fa_quantite
    fa_puht

    factures_master (requête)
    Sont calculés les champs : fa_quantité * fa_puht

    Contenu de la zone de liste de sélection des produits dans factures_sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT [produits].[pr_id], [produits].[pr_produit], [produits].[pr_puht] FROM produits ORDER BY [produits].[pr_produit];
    Le source-control étant pr_id de la requête factures_master

    Donc, jusque maintenant, je sélectionne mon produit qui s'affiche dans la liste avec le prix unitaire pr_puht que je reporte manuellement dans le champ fa_puht.

    La fonction ME
    Après mise à jour de la liste, j'ai donc intégré la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub pr_id_AfterUpdate(Cancel As Integer)
     
        Me.factures_sub.fa_puht = Me.produits.pr_puht_ac.Column(2)
     
    End Sub
    Que j'essaie d'interpréter ainsi : le champ fa_puht de la table factures_sub est égal au pr_puht de la table produits et la valeur à insérer se trouve dans la troisième colonne de la liste, soit la colonne 2 puisqu'on part de 0.

    Dès que je sélectionne un produit, le module VB s'ouvre, .produits est sélectionné dans la fonction et un message d'erreur apparaît :

    Erreur de compilation :
    Membre de méthode ou de donnée introuvable


    Et je ne sais pas d'où vient l'erreur...

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Bonjour,

    Problème de syntaxe. Consulte ABSOLUMENT le tuto sur les appels formulaires ( voir ma page perso) c'est incontournable pour que tu familiarises avec ce type de syntaxe.

    Que représente factures_sub ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.produits.pr_puht_ac.
    Que représente produits ?

    Me est l'objet formulaire/état ou classe dans lequel est exécuté le code.

    Cordialement,

  9. #9
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    J'ai fait une erreur de recopie : pr_puht_ac n'existe pas, il s'agit de pr_puht, comme indiqué plus haut mais dans mon formulaire, la fonction est bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.factures_sub.fa_puht = Me.produits.pr_puht.Column(2)
    Et elle ne fonctionne pas.

    Me.factures_sub est le nom de la table dans laquelle se trouve le champ fa_puht, qui est le champ où doit être copié la valeur pr_puht de la table produits, qui figure dans la colonne (2) de la zone de liste.

    Tu précises que Me est l'objet formulaire/état ou classe dans lequel est exécuté le code. Dans ce cas, ça doit être correct puisque dans ma base, les formulaires factures_sub et produits portent le même nom que leurs tables respectives

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Et elle ne fonctionne pas.
    C'est évident ! Cette syntaxe est fausse.

    Tu précises que Me est l'objet formulaire/état ou classe dans lequel est exécuté le code. Dans ce cas, ça doit être correct puisque dans ma base, les formulaires factures_sub et produits portent le même nom que leurs tables respectives
    Je continue à penser que tu dois ABSOLUMENT lire le tuto pour comprendre le fonctionnement des appels formulaires.

    Je te donne le lien
    le tuto :
    http://loufab.developpez.com/tutorie...pelformulaire/
    le tableau recap :
    http://loufab.developpez.com/tutorie...bleauappel.pdf

    Bien sur le tableau n'est qu'un pense-bête qui reste inutile si on ne lit pas le tuto.

  11. #11
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    La lecture du tutoriel a été payante. Après plusieurs essais, je suis parvenu au résultat avec ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub pr_id_AfterUpdate()
     
        Me.co_puht.Value = Me.PR_ID.Column(2)
     
    End Sub
    Où co_puht est le nom du champ dans lequel je veux que la valeur de la colonne (2) de la zone de liste PR_ID soit copiée après avoir été extraite.
    Par contre, il y a une chose que je ne comprends pas : dans le formulaire, pr_id est en minuscules et dans la fonction, il se transforme automatiquement en majuscules...

  12. #12
    Membre chevronné Avatar de Renardo
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 648
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 648
    Points : 2 019
    Points
    2 019
    Par défaut
    bonjour
    essai en changeant juste les nom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.NOMdeTonChamp=me.NomdeTaListeDeroulante.column(2)
    change le nom:NOMdeTonChamp par le nom du champ que tu veux remplir
    et NomdeTaListeDeroulante par le nom de ta liste deroulante
    se code est a mettre sur le AfterUpdate() de ta liste deroulante

  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 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Bravo !

    N'hesite pas à imprimer le pense-bête A3 tant que tu n'auras pas acquis la mécanique de construction de ces syntaxes.

    Pour le passage en majuscule cela arrive mais ce n'est pas génant.

    C'est peut-être le nom du champ qui est en majuscule.

    Je préfixe systématiquement les noms des controles (zone de liste, zone de texte...). Cela évite le mélange (controle/champ) même si celui-ci n'a pas d'incidence sur le fonctionnement :
    - J'y gagne en clarté dans le code
    - ça accélere ma recherche dans la liste auto-complétion
    - je sais à quel type de controles je suis confronté à la lecture de son nom.
    - la lecture est plus simple pour autrui.

    Pour les préfixes tu peux (dois) suivre les conseils de Jean-philippe Ambrosino dans sont excellent document :
    http://argyronet.developpez.com/office/vba/convention/

    Cordialement,

  14. #14
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Renardo
    Oui, c'est ce que j'avais fait mais j'ai édité mon message entre deux, ayant fait une faute dans le nom du champ, ce qui alors ne fonctionnait pas, naturellement.

    Loufab
    Le nom du contrôle est bien en minuscules.
    Pour les préfixes, afin de ne jamais me mélanger les pinceaux, chaque nom de champ est différent d'une table à l'autre. Par exemple, le champ pour le prix unitaire hors-taxes se nomme co_puht pour les commandes et fa_puht pour les factures.

  15. #15
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 060
    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 060
    Points : 24 664
    Points
    24 664
    Par défaut
    Citation Envoyé par Nerva Voir le message
    Loufab
    Le nom du contrôle est bien en minuscules.
    Pour les préfixes, afin de ne jamais me mélanger les pinceaux, chaque nom de champ est différent d'une table à l'autre. Par exemple, le champ pour le prix unitaire hors-taxes se nomme co_puht pour les commandes et fa_puht pour les factures.
    C'est une bonne chose mais ça n'a aucun rapport avec le préfixe des controles.

    Regarde le tuto pour en savoir plus.

  16. #16
    Membre régulier Avatar de Nerva
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 366
    Points : 97
    Points
    97
    Par défaut
    Oui, j'utilise les appellations préconisées par l'auteur (cmd pour un bouton, lbl pour une étiquette...) mais pas pour tout. J'ai pris l'habitude de nommer un item comme son source contrôle. Dans l'exemple de ce sujet, la zone déroulante a pour source contrôle pr_id d'une requête, que je devrais donc nommer cbo_pr_id au lieu de pr_id. Une nouvelle habitude à prendre...

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

Discussions similaires

  1. Swap entre deux colonnes pour 2 enregistrements
    Par Erakis dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 15/12/2005, 19h09
  2. Réponses: 1
    Dernier message: 08/12/2005, 20h58
  3. [HTML] Tableau pour l'enregistrement des données
    Par ghyosmik dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 01/11/2005, 15h28
  4. desactiver bouton pour certains enregistrements
    Par GymTonic dans le forum IHM
    Réponses: 7
    Dernier message: 04/01/2005, 23h46
  5. Gestion des modifications pour un enregistrement
    Par Pascal Jankowski dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/03/2004, 14h09

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