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 :

Problème sous-formulaire utilisant plusieurs tables [AC-2010]


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut Problème sous-formulaire utilisant plusieurs tables
    Bonjour à tous,

    Voilà quelques jours que j'essaie de résoudre ce problème mais en vain... rien sur les forums ni sur les tutos. Je fais donc appel à vous en espérant que quelqu'un puisse m'éclairer.

    Je suis entrain de réaliser une base Access de prise de commandes client (classique).

    Mes tables :

    t_Clients (Code_Client comme clé primaire, indexé sans doublons)
    t_Produits (Code_Produit comme clé primaire, indexé sans doublons)
    t_Produits_Prix (Id comme clé primaire, indexé sans doublons - Code_Produit comme clé secondaire, indexé avec doublons)
    t_Commandes (N°Commande comme clé primaire, indexé sans doublons)
    t_Commandes_Détail (N°Commande comme clé primaire, indexé avec doublons - Code_Produit comme clé secondaire, indexé avec doublons)


    Je suis entrain de réaliser un formulaire (+ sous formulaire) de prise de commande.

    - Mon formulaire (f_Commandes_Ajout) est basé sur les tables t_Commandes et t_Clients. Il fonctionne parfaitement bien. A l'ouverture du formulaire, le numéro de commande est incrémenté, et je choisis mon client à l'aide d'une liste déroulante.
    - Mon sous formulaire (f_Commandes_Ajout_Détail) est basé sur les tables t_Commandes_Détail, t_Produits et t_Produits_Prix.

    -> Lorsque j'ouvre mon formulaire, le sous-formulaire n'affiche que ces headers (entêtes), mais aucune ligne n'apparait pour me permettre de selectionner mes produits.

    -> Même test, cette fois-ci en supprimant la table t_Produits_Prix du sous-formulaire, et là comme par miracle ça marche parfaitement. Mon sous-formulaire affiche les lignes vides que je peux renseigner avec mes produits...
    Bien entendu ce n'est pas le but. Il faudrait que mes prix soient là pour que je puisse faire Quantité*Prix = Total

    J'ai tout essayé et contôlé. Intégrité référentielle, Clés, indexes, jointures... rien ne me parait anormal. Je sais que le problème vient de la table t_Produits_Prix, mais je ne sais pas d'où il vient

    Please Help !!!

    Nom : test.jpg
Affichages : 319
Taille : 158,2 Ko

  2. #2
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Salut,

    Ça ne fonctionne pas car dans la requête du sous formulaire de détail tu sélectionnes actuellement les lignes du détail de la commande qui ont un produit et pour lesquels le prix est le dernier dans ta table de prix et non l'ensemble des lignes de la table t_Commandes_Détail

    Si tu veux tu peux faire ceci :

    1) Ajouter un champ PU_HT dans ta table t_Commandes_Détail
    2) Ne sélectionner que la table t_Commandes_détail dans ton sous formulaire f_Commandes_Détail
    3) Ajouter le champ PU_HT dans ton sous formulaire f_Commandes_Détail
    4) Sur l'évènement "Après MAJ" de ton champ Code_Produit, dans le sous formulaire f_Commandes_détail, ajouter le code suivant :
    Code qui va sélectionner le dernier prix pour ce produit et le mettre dans le champ PU_HT du formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim R As Recordset
    Dim RSQL As String
     
    RSQL = "SELECT t_Produits_Prix.Prix_Unitaire_HT " & _
    "FROM t_Produits_Prix " & _
    "GROUP BY t_Produits_Prix.Prix_Unitaire_HT, t_Produits_Prix.Code_Produit, t_Produits_Prix.Dernier " & _
    "HAVING (((t_Produits_Prix.Code_Produit)='" & Me.Code_Produit & "') AND ((t_Produits_Prix.Dernier)=Yes));"
     
    Set R = CurrentDb.OpenRecordset(RSQL, dbOpenDynaset)
    Me.PU_HT = R![Prix_Unitaire_HT]

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Merci Martii, cela fonctionne très bien !!!
    J'ai juste ajouté un 'Me.Requery' à la fin du code pour que le prix se mette à jour instantanement.

    Cette manipulation, bien qu'elle soit efficace, me pose un autre souci :

    J'ai un champs 'Total_Ligne_HT' dans mon sous-formulaire qui m'affiche prix*quantité. Il se calcule bien dans les lignes du sous-formulaire.
    Par contre, quand je rajoute un 'Total_HT' dans le pieds du formulaire avec comme fonction '=Somme([Total_Ligne_HT])', il m'affiche #Erreur. Alors que cela fonctionnait avant (quand le prix était inclut dans t_Produits, et que je n'avais pas de t_Produits_Prix - c'était donc plus simple).

    Une idée pour contourner ce problème?

    Merci encore

  4. #4
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Normalement le champ se met à jour sans besoin d'utiliser me.Requery, tu as surement du renommer le champ, enfin si ça fonctionne alors c'est le principal.

    Le total ne se fait pas car le HT n'est pas le champ d'une table, pour régler ce problème :

    Tu ajoutes un champ calculé dans la table t_Commandes_Détail avec en calcul Quantité * PU_HT *Remise (Suivant ton type de remise 20% 0.20..)

    Ensuite tu mets le champ dans ton sous formulaire f_Commandes_Détail et le total en pied d’état sera possible sans erreur.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Merci pour ta réponse.

    J'ai fait exactement ce que tu m'a dit (du moins je pense), mais ça n'a pas l'air de marcher...

    PS: je ne pense pas que le fait que t_Produits soit dans la requête de mon sous-formulaire pose un problème. Je récupère le champs 'Conditionnement' de celle-ci. (c'est la seule différence avec ce que tu m'a dit de faire plus haut)



    Nom : test2.jpg
Affichages : 367
Taille : 245,8 Ko

  6. #6
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Soit tu mets en formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Somme([t_Commandes_Détail].[Total_Ligne_HT])
    Soit tu mets en formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =Somme([Total_Ligne_HT])
    mais tu dois vérifier que le nom du champ Total_Ligne_HT dans le sous formulaire ( propriété -> Autres -> Nom) corresponde avec celui de ta formule en bas de formulaire.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Je viens de vérifier. Le nom de mon champs dans le sous formulaire est bien Total_Ligne_HT, comme dans la tables t_Commandes_Détails et la requête source de mon sous-formulaire. Ils ont tous le même nom.

    J'ai essayé tes 2 lignes de code. Toujours la même erreur.

    Ce qui est étonnant c'est que j'ai le #Erreur dès l'ouverture de mon formulaire, avant même de renseigne ma ligne de produits, qté...

    J'ai essayé de remplacer ce champs par un champs vierge où j'ai refait cette manip - en vain...

  8. #8
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Je ne vois pas pourquoi.. Peux tu mettre ta base en PJ ? sans données à l'intérieur

  9. #9
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Ci-joint ma base.

    Merci encore pour ton aide!

    Mon_Outil_Dev - Copie.zip

  10. #10
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Décembre 2015
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Décembre 2015
    Messages : 217
    Points : 356
    Points
    356
    Par défaut
    Tu as du créer les totaux avec un assistant, non ?

    Tu dois les supprimer et les refaire manuellement.

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2010
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 24
    Points : 11
    Points
    11
    Par défaut
    Je n'ai pas créé les totaux avec l'assistant. Mais en les suppimant et en les refaisant manuellement ça marce parfaitement.

    Je cloture donc cette discussion.

    Merci bcp

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

Discussions similaires

  1. [AC-2010] Problème sur un formulaire associant plusieurs tables
    Par Morgane29 dans le forum IHM
    Réponses: 0
    Dernier message: 02/07/2012, 16h25
  2. Formulaire utilisant plusieurs tables
    Par Yoshi592 dans le forum IHM
    Réponses: 4
    Dernier message: 05/07/2007, 16h24
  3. Sous formulaire comprenant plusieurs tables
    Par aiderecquise dans le forum IHM
    Réponses: 2
    Dernier message: 24/11/2006, 18h37
  4. Réponses: 3
    Dernier message: 28/10/2004, 00h15
  5. utiliser plusieurs table et qreport
    Par StephCal dans le forum Bases de données
    Réponses: 7
    Dernier message: 25/10/2004, 10h28

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