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

Développement Windows Discussion :

Créer un Top 10 des meilleurs clients


Sujet :

Développement Windows

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut Créer un Top 10 des meilleurs clients
    Bonjour à tous

    Dans le cadre de mon stage, j'aimerais créer un graphique colonnes avec en abscisse le nom des 10 meilleurs clients et en ordonné le montant de leurs commandes totales. D'abord j'ai créé une requête pour extraire les noms et montants des commandes de la base de données. Maintenant j'aimerais mettre tous ça dans un tableau. Mes deux problèmes sont de créer un tableau avec le nombre de lignes modifiable et remplir le tableau avec les données extraites de la requêtes.

    Voici mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Graph_Clients()
     
            ' Tableau du classement des meilleurs clients au moins bon de cette année
     
     
            Dim info_client As Integer
     
            info_client = Stat_Appel("SELECT SUM(LC_TOTAL_LIGNE_HT),  FROM LIGNE_COMMANDE_CLIENT, COMMANDE_CLIENT WHERE YEAR(COM_DATE)=YEAR(NOW) AND COMMANDE_CLIENT.COM_ID=LIGNE_COMMANDE_CLIENT.COM_ID AND COMMANDE_CLIENT.COM_VAL='Validée' GROUP BY CL_ID")
     
            Dim Tab_Client(, 1) As Integer
    Je suis débutante en programmation, j'ai cherché des solutions sur internet mais n'ai rien trouvé donc maintenant je me retrouve bloquée. Quelqu'un pourrait-il m'aider?

    Bonne journée à tous

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    j'ai pas regardé la requête, je te fais confiance et je la considère correcte.
    Je considère également que tu sais parcourir les résultats qu'elle retourne.
    On en vient au coeur du problème et j'ai deux questions :
    - pourquoi passer par un tableau intermédiaire contenant tes valeurs, plutôt que de générer directement ton graphique ?
    - Quel type d'app (WinForm, WPF, WebForm) utilises-tu ? Quelle interface graphique ? As-tu déjà une classe/bilbi qui te permet de dessiner un graph' pour ton archi ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Salut,

    Merci beaucoup pour ton intérêt

    Je voudrais passer par un tableau, en premier lieu, pour pouvoir classer les clients par montant de commande et ne garder que les 10 premiers. Je ne connais que le tableau qui pourrait me permettre de faire ça, mais peut être que tu connais quelque chose d'autre plus efficace?

    Je travail sur VisualStudio 2010 dans l'application c'est WindowsForm. Pour la classe/bilbi je ne suis pas sûre de savoir de quoi on parle mais je peux utiliser "Chart" dans la boîte à outil pour créer des graphiques, je m'en suis déjà pas mal servi.

    Tu penses qu'il existe une facon plus simple de créer ce graphique?

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    * pour ordonner tes résultats il y a l'instruction ORDER BY en SQL,
    * pour n'avoir que les 10 premiers tu peux :
    * utiliser une instruction SQL (TOP, LIMIT ... dépend du SGBD),
    * lors de ton parcours des résultats en VB.NET tu ne boucles que 10 fois puis tu break.

    Je connais pas trop le composant Chart, mais ça doit pas bien être compliqué de lui fournir un série.
    En creusant un peu les fiches MSDN depuis celle de la classe Chart, tu devrais trouver les exemples qui vont bien.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par jopopmk Voir le message
    On en vient au coeur du problème et j'ai deux questions :
    - pourquoi passer par un tableau intermédiaire contenant tes valeurs, plutôt que de générer directement ton graphique ?
    Pour ne pas avoir à ré-exécuter la requête si tu souhaites utiliser cette liste dans une autre fonctionnalité !

    Au passage, je te conseille (@marineNorway) d'utiliser les listes plutôt que les tableaux. Beaucoup plus simple à l'utilisation !

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Juste pour chipoter :
    - quand on fait des graph'/du décisionnel en général on extrait les données uniquement pour ça,
    - si les données doivent être utilisées ailleurs rien n'empêche de le faire dans cette même boucle d'extraction,
    - la rétention de données n'est pas toujours une bonne idée (données éventuellement modifiées et taille en mémoire),
    - in fine les données ne sont pas perdues, elles sont juste dans un format spécial : DataVisualization.Charting.Series
    Voilà, ça fait pas avancer le schmilblik, mais je ressentais le besoin de légitimer ma question
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Re @jopopmk,

    C'est super, merci beaucoup pour ton aide! Maintenant ma requête est juste.
    Je vais creuser pour trouver comment faire correspondre le résultat de la requête avec les valeurs de X et Y pour le graphique.

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Merci @ZenZiTone, c'est vrai que les listes ont l'aire plus simples.

    Je viens juste de découvrir le processus de création d'une liste. J'aimerais savoir si il est possible que les valeurs de ma requêtes s'affiche automatiquement dans la liste ou si je dois faire référer les valeurs moi-même pour chaque ligne et colonne? Parce que j'imagine que ma requête génère un bloc de données donc j'aurais besoin de les identifier individuellement pour les mettre dans la liste.

  9. #9
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    je suis pas sûr de bien comprendre, tu pourrais montrer ton code ? En passant par une List<T> intermédiaire perso je créerai une petite struct/class pour représenter un tuple. Ensuite à chaque read du résultat de la requête tu crées une nouvelle instance de cette struct/class avec les valeurs obtenues, puis tu l'ajoutes à ta List.
    Plus je connais de langages, plus j'aime le C.

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Re,

    Voilà le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     Private Sub Graph_Clients()
     
     
            'Requête extraire les Noms et Montant total des commandes par clients
     
            Dim info_client As Integer
     
            info_client = Stat_Appel("SELECT SUM(LC_TOTAL_LIGNE_HT) FROM LIGNE_COMMANDE_CLIENT, COMMANDE_CLIENT WHERE YEAR(COM_DATE)=YEAR(NOW) AND COMMANDE_CLIENT.COM_ID=LIGNE_COMMANDE_CLIENT.COM_ID AND COMMANDE_CLIENT.COM_VAL='Validée' GROUP BY CL_ID ORDER BY SUM(LC_TOTAL_LIGNE_HT) LIMIT 10")
     
     
     
     
            '--------------------------------  Graph du classement des 10 meilleurs clients de l'année  -----------------------------------------
     
     
            graph_meilleurs_clients_année.Series(0).Enabled = True
            graph_meilleurs_clients_année.Series(0).Points.Clear()
     
     
            graph_meilleurs_clients_année.ChartAreas(0).AxisX.IsReversed = 1
     
            graph_meilleurs_clients_année.ChartAreas(0).AxisX.IsLabelAutoFit = False
            graph_meilleurs_clients_année.ChartAreas(0).AxisY.IsLabelAutoFit = False
     
            graph_meilleurs_clients_année.Series(0).IsValueShownAsLabel = True
     
     
     
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
            graph_meilleurs_clients_année.Series(0).Points.AddXY(, )
     
        End Sub
    Comme tu peux le voir j'ai fait ma requête (je ne suis pas sûre qu'elle soit juste car je ne c'est pas comment afficher son résultat) et le graph en dessous. Mon problème et de faire le lien entre la requête et le graphique.

  11. #11
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Le souci c'est que tu "fais" ta requête avec une fonction non standard (Stat_Appel), du coup je n'ai absolument aucune idée de comment manipuler les résultats. Sinon la requête en elle-même me paraît correcte.

    En fin de compte t'as décidé de te passer d'un enregistrement intermédiaire dans un tableau ?
    Plus je connais de langages, plus j'aime le C.

  12. #12
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Bonjour ,

    En effet expliciter Stat_Appel serai intéressant pour mieux comprendre. Ensuite ta requête renvoie un integer , donc tu n'auras que le montant des commandes totales et pas le nom des clients etc.

    Je pense que la requête devrai renvoyé une liste ou un tableau ,comme tu le disais, de Clients .
    Clients (ou autre ) est un alors un objet avec des propriétés ( Nom, Montant Total ... ) .

    Comme depuis ta requête tu peux renvoyer ton top 10 , tu n'auras qu'à boucler sur ta liste(je conseille aussi) ou sur ton tableau pour remplir tes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graph_meilleurs_clients_année.Series(0).Points.AddXY(client.NOM,client.Montant)
    En espérant avoir été clair
    throw new NoSignatureException();

  13. #13
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2016
    Messages : 9
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    Excusez mon absence sur le forum depuis quelques jours. Désolé pour la fonction Stat_Appel, j'aurai dû vous l'expliciter, la voici donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Public Function Stat_Appel(ByVal requete As String) As String
            Dim resultat As String = toMoney("0").ToString() + " €"
     
            'Instancier un objet Commande
            Obj_Command = New OleDbCommand()
            'initialiser l'objet Command
            Obj_Command.Connection = laConnection
            Obj_Command.CommandText = requete
     
            Obj_Reader = Obj_Command.ExecuteReader()
            If Obj_Reader.Read() Then
                resultat = toMoney(Obj_Reader.GetValue(0).ToString()).ToString() + " €"
            End If
            Obj_Reader.Close()
     
            Return resultat
        End Function

    Finalement je pensais enregistré les données dans un DataGridView, en voici le code, mais toujours rien ne s'affiche. Je pense que c'est un problème avec le Grid et non pas la requête car j'ai tester l'affichage de données avec une requête très simple mais le Grid ne se rempli pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    'Requête extraire les Noms et Montant total des commandes par clients
     
            Dim info_client As String
     
            info_client = Stat_Appel("SELECT SUM(LC_TOTAL_LIGNE_HT) FROM LIGNE_COMMANDE_CLIENT, COMMANDE_CLIENT WHERE YEAR(COM_DATE)=YEAR(NOW) AND COMMANDE_CLIENT.COM_ID=LIGNE_COMMANDE_CLIENT.COM_ID AND COMMANDE_CLIENT.COM_VAL='Validée' GROUP BY CL_ID ORDER BY SUM(LC_TOTAL_LIGNE_HT) LIMIT 10")
     
     
            'Afficher la requête dans un DataGrid
     
            DataGridView1.Rows.Clear()
     
            'Instancier un objet Commande
            Obj_Command = New OleDbCommand()
            'initialiser l'objet Commande
            Obj_Command.Connection = laConnection
            Obj_Command.CommandText = info_client
            Obj_Reader = Obj_Command.ExecuteReader()
            While Obj_Reader.Read()
                DataGridView1.Rows.Add(Obj_Reader.GetValue(0).ToString())
            End While
            Obj_Reader.Close()

Discussions similaires

  1. Réponses: 8
    Dernier message: 06/10/2015, 17h00
  2. Top 10 des meilleures fonctionnalités de Windows 10
    Par Hinault Romaric dans le forum Windows 10
    Réponses: 19
    Dernier message: 07/08/2015, 21h50
  3. Réponses: 9
    Dernier message: 05/05/2015, 16h26
  4. Créer des fiches clients depuis les données Outlook
    Par cricri1383 dans le forum Access
    Réponses: 1
    Dernier message: 09/07/2009, 08h19
  5. Créer une liste automatiquement du top 10 des occurences
    Par fomy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/06/2008, 13h29

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