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 :

Trier un état sur un contrôle indépendant [AC-2013]


Sujet :

IHM

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut Trier un état sur un contrôle indépendant
    Bonjour,

    J'aimerais savoir s'il est possible de trier un état sur un contrôle indépendant se trouvant dans un pied de groupe.

    Pour illustrer la situation, dans un état listant des commandes passées par des clients, le nom du client en en-tête de groupe, les commandes que ce client a passées dans la section détail, et la somme totale en € de ces commandes dans le pied de groupe du client, est-il possible de trier l'état sur cette somme totale ?

    Merci.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Je pense que non mais tu peux essayer en allant dans la partie trier/regrouper du rapport (en bas du rapport en 2013 il me semble). Si le champ est disponible, tu dois pouvoir le faire.

    Sinon, tu peux ajouter un champ [TotalCommande] qui va faire la somme de la commande (avec DSUM ou en jointure avec une requête de regrouopement) à ta source de données. Il va se répéter sur chacune des lignes de détails et tu pourras t'en servir pour trier et grouper.

    Pour les rapports, il ne faut pas hésiter à dénormaliser les données et à répéter des informations, cela peut grandement faciliter les regroupements.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Le champ n'est pas disponible dans la partie Trier/Regrouper du rapport.

    J'ai essayé de le mettre dans une requête de regroupement et ça fonctionne, sauf quand je fais une recherche multi-critères car la requete additionnelle que j'ai créée pour le total ne prend pas en compte les critères.

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Tu n'as pas besoin d'une requête de regroupement, tu peux faire le regroupement avec le rapport.

    Un truc du genre :

    Groupe sur Total Commande

    Groupe sur numéro de Commande

    Détail de la commande

    Tes données ressemble à cela :
    • Ligne1 détail de la commande, Total de la commande
    • Ligne2 détail de la commande, Total de la commande
    • Ligne3 détail de la commande, Total de la commande



    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Comment faire cela ? Actuellement le premier groupe de mon état, c'est le client, et c'est le plus important.
    Il faut absolument que les commandes restent groupées par client.
    Si je rajoute un groupe "somme totale due" avant, je vais me retrouver avec des factures affichées une à une non ?!

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Je commence à désespérer car je ne n'arrive pas à faire ce que je veux, j'ai pourtant l'impression que la solution est simple et qu'elle est sous mes yeux mais je ne la vois pas.

    Mon état est donc groupé par client, et je voudrais que ces clients soient triés de manière décroissante sur la somme totale qu'ils doivent.

    Pour pouvoir faire ce tri, je ne vois pas d'autre solution que de mettre un champ "total de la somme due par client" dans la requête mais je n'arrive pas à l'écrire

    Sur une requête simplifiée de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT T_Clients.idClient, T_Clients.nomPrenom, T_Factures.numFacture, T_Factures.montant, T_Factures.paye, T_Factures.du
    FROM...
    T_Factures.du est un champ calculé, son expression est tout simplement T_Factures.montant - T_Factures.paye.

    Que faut-il rajouter dans le SELECT pour avoir ce total par client ?

    Il faut bien entendu que cette somme ne soit calculée que sur les enregistrements retournés par la requête car celle-ci est multicritères.

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Juste pour être clair sur ce que tu veux obtenir :

    Client

    Commande client triées par le montant du sur cette commande

    Exemple

    Client ABCD

    Commande 24, 1500 Euros
    Commande 10, 1000 Euros

    Client EFG

    Commande 10, 2000 Euros
    Commande 20, 500 Euros

    C'est bien cela ?

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Non ! Disons que j'ai 3 clients :

    - Le client 1 a passé 3 commandes :
    Commande 1 : 500 €
    Commande 2 : 1500 €
    Commande 3 : 3000 €
    Total : 5000 €

    - Le client 2 a passé 5 commandes
    Commande 4 : 200 €
    Commande 5 : 100 €
    Commande 6 : 500 €
    Commande 7 : 100 €
    Commande 8 : 300 €
    Total : 1200 €

    - Le client 3 a passé 2 commandes :
    Commande 9 : 1500 €
    Commande 10 : 4000 €
    Total : 5500 €

    Le montant de chacune des commandes est saisi dans mon champ T_Factures.montant.

    Ensuite, pour une raison un peu longue à expliquer mais qui n'a pas d'importance ici, chaque client peut régler en totalité ou partiellement chaque commande tout au long de l'année.
    Le montant payé pour une commande est enregistré dans le champ T_Factures.paye.

    T_Factures.montant - T_Factures.paye donne donc ce que le client doit encore payer, T_Factures.du.

    Si le client 1 a payé les commandes 1 et 2, il lui reste donc 3000 € à payer.
    Si le client 2 a payé 4,5,7, et 200 € sur la commande 6, il lui reste 600 € à payer.
    Si le client 3 a payé 500 € sur la commande 9 et 1500 € sur la commande 10, il lui reste 3500 € à payer.

    Ce que je voudrais donc voir sur mon état c'est :

    En premier, le client 3 car c'est lui qui doit la plus grosse somme, en deuxième le client 1, et en troisième le client 2 tout en conservant bien sur les détail des commandes de chaque client.

    Un état d'abord trié sur la somme totale due par chaque client et ensuite un regroupement par client.

    J'espère avoir été suffisamment clair...

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    OK, on peut sans doute faire cela en une seule requête mais cela me paraît plus simple en 2.

    • Requête1 : Donne les informations pour chaque commande incluant le montant dû.
    • Requête2 : Requête1.*, Dsum("Du";"Requête1";"[idClient]=" & [Requête1].[idClient]) as TotalDuClient.


    Baser le rapport sur Requête2 et trié par [TotalDuClient].

    Note : Donner aux requête des noms significatifs dans le contexte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  10. #10
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Ca fonctionne, le total est le bon ! J'avais essayé de faire ça en une seule requête en mettant le Dsum en sous-requête mais je n'ai pas réussi à l'écrire correctement, je ne sais pas si c'est faisable.

    Le problème c'est que l'ouverture de l'état prend maintenant environ 10 sec, sans doute à cause de la présence des 2 requêtes ? Le fait de l'écrire en une seule serait plus rapide ?

    Deuxième soucis, l'état trie ce champ comme du texte, c'est a dire avec A ou Z en haut et bien sur ça ne colle pas. Pourquoi je n'ai pas la possibilité de trier du plus grand au plus petit ?

    Merci pour ton aide marot_r.

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Pour la performance, je ne sais pas.

    Le DSum n'est pas réputé pour sa rapidité d'exécution. J'essaierai avec une requête de regroupement qui te donnerai le total en jointure à la place du DSum().

    Pour le tri essaye cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dsum("Du";"Requête1";"[idClient]=" & [Requête1].[idClient]) +0
    Access devrait le voir comme un nombre et pas du texte.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  12. #12
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Avec le +0 le champ est bien considéré comme un nombre, et donc le tri fonctionne !

    Pour la lenteur d'exécution, est ce que le Requête1.* ne ralentit pas le tout ? Je vais essayer en ne mettant que les champs nécessaires pour voir si ça change quelque chose mais ça m'étonnerait.

    Pour la requête de regroupement, j'avais essayé mais il y avait chaque fois une erreur de référence circulaire je crois... Comment faut-il faire ?

  13. #13
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    RequeteCumulDu

    Ça doit ressembler à cela.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [requete1].[idClient], sum([Requete1].[Du]) from [requete1]
    group by [requete1].[idClient]

    Après, dans Requête2, tu fais une jointure sur le IDClient.

    Note aussi que tu pourrais faire :

    Un rapport principal basé sur RequeteCumulDu, trié par montant dù.

    un sous-rapport basé sur Requête1 et en lien père/fils sur IdClient.

    Ce serai peut-être plus rapide.

    Je ne sais pas si tu l'as fait mais je t'invite à utiliser des noms plus significatifs que Requête1 et Requête2.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  14. #14
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Je viens de tester la RequeteCumulDu avec la jointure sur iDClient et ça fonctionne parfaitement, la création du rapport est maintenant quasiment instantanée.
    Du coup je vais laisser comme ça.
    J'ai bien entendu renommé les requêtes pour que les noms soient plus significatifs.
    Je procède encore à quelques vérifications et je passe en résolu !

    Merci pour ton aide marot_r

  15. #15
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 421
    Points : 132
    Points
    132
    Par défaut
    Voila j'ai fait mes vérifications et ça fonctionne parfaitement.

    Si éventuellement il est possible de faire ça en une seule requête au lieu de trois je veux bien savoir comment il faut faire.

    En tous cas problème résolu

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

Discussions similaires

  1. [AC-2013] Trier un état sur un champs (autre que ordre alphabetique)
    Par Guillaume-h24 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/06/2015, 20h23
  2. [WD17] Trier un état sur une rubrique de type "DateHeure"
    Par Qodix dans le forum WinDev
    Réponses: 3
    Dernier message: 24/10/2012, 10h33
  3. Réponses: 1
    Dernier message: 27/06/2012, 16h12
  4. Requete pour trier un état sur une somme partielle ?
    Par thierry.drouet dans le forum Access
    Réponses: 5
    Dernier message: 26/10/2006, 16h45
  5. [CR10] Trier un état sur un champs calculé
    Par alpachico dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 06/09/2006, 12h04

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