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

VB.NET Discussion :

construire un graphique avec des données de deux datatable


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut construire un graphique avec des données de deux datatable
    Salut à tous,

    j'écris un programme en vb.net et voudrais un graphe avec deux séries de données issues de deux objets datatable. je peux obtenir le graphe avec une serie mais je voudrais mettre les deux séries sur un graphe besoin d'aide.

    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
    Imports System.Data.OleDb
    Imports System
    Imports System.Windows.Forms.DataVisualization.Charting
    Imports System.Globalization
    Imports System.Collections.ObjectModel
    Imports Color = System.Drawing.Color
     
    Public Class Form10
     
    Dim con1 As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=C:\Users\jc.mbilla\Desktop\MJC_Finance\GESOM.mdb")
        'Dim con1 As New OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0;Data Source=C:\Users\mbill\OneDrive\Desktop\MJC_Finance15012020\GESOM.mdb")
     
    Private Sub Form10_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
     
    Dim sql1, sql2, sql3, sql4, sql5, sql6, sql7, sql8, sql9, sql10, sql11 As String
     
     
     
            sql3 = "SELECT * FROM Req2"
            sql4 = "SELECT * FROM Req3"
     
            Dim adapter3 As New OleDbDataAdapter(sql3, con1)
            Dim adapter4 As New OleDbDataAdapter(sql4, con1)
     
            Dim dt3 As New DataTable("Req2")
            Dim dt4 As New DataTable("Req3")
     
     
            adapter3.Fill(dt3)
            adapter4.Fill(dt4)
     
            Chart1.Series(0).XValueMember = "ANNEE"
            Chart1.Series(0).YValueMembers = "BTA"
     
            Chart2.Series(0).XValueMember = "ANNEE"<a href="mailto:mbillajc@hotmail.com">mbillajc@hotmail.com</a>
            Chart2.Series(0).YValueMembers = "OTA"
     
            Chart1.DataSource = dt3
            Chart2.DataSource = dt4
    Quelqu'un peut il m'aider en m'expliquant comment on pourrait obtenir les données dt3 et dt4 "série (BTA) et (OTA)" dans un même chart?
    J'ai lu le tutorial de Plasserre consacré au chart mais je n'y arrive pas.

    Cordialement


    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    IT Manager
    Inscrit en
    Janvier 2018
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Manager
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2018
    Messages : 220
    Points : 319
    Points
    319
    Par défaut
    Essaie ceci :

    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
     
     
    sql3 = "SELECT * FROM Req2"
    sql4 = "SELECT * FROM Req3"
     
    Dim adapter3 As New OleDbDataAdapter(sql3, con1)
    Dim adapter4 As New OleDbDataAdapter(sql4, con1)
     
    Dim dt3 As New DataTable("Req2")
    Dim dt4 As New DataTable("Req3")
     
     
    Chart1.Series(0).XValueMember = "ANNEE"
    Chart1.Series(0).YValueMembers = "BTA"
     
    Chart1.Series(1).XValueMember = "ANNEE"
    Chart1.Series(1).YValueMembers = "OTA"
     
    Chart1.DataSource = dt3
    Chart2.DataSource = dt4
    Mais il faut surement au préalable créer la 2e série manuellement dans le Chart.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Construire un garphique avec deux données de deux datatable
    il ya les deux series Series1 et Series2 que j'ai créées dans le chart manuellement. mais ça ne fonctionnement 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
            sql3 = "SELECT * FROM Req2"
            sql4 = "SELECT * FROM Req3"
     
            Dim adapter3 As New OleDbDataAdapter(sql3, con1)
            Dim adapter4 As New OleDbDataAdapter(sql4, con1)
     
            Dim dt3 As New DataTable("Req2")
            Dim dt4 As New DataTable("Req3")
     
           adapter3.Fill(dt3)
            adapter4.Fill(dt4)
     
            Chart1.Series(0).XValueMember = "ANNEE"
            Chart1.Series(0).YValueMembers = "BTA"
     
            Chart1.Series(1).XValueMember = "ANNEE"
            Chart1.Series(1).YValueMembers = "OTA"
     
            Chart1.DataSource = dt3
            Chart2.DataSource = dt4
    ça aussi j'ai essayé mais ça ne fonctionne pas. je voudrais avoir un graphique issu des deux séries de données (dt3 et dt4)

  4. #4
    Membre habitué Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Points : 129
    Points
    129
    Par défaut
    Salut,

    Faudrait peut-être savoir ce qu'il y a exactement dans les tables Req2 et Req3.
    Est-ce qu'on peut avoir un extrait (copie d'écran) de ces tables dans la base de données ?

    Cdt,

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Sam Placi Voir le message
    Salut,

    Faudrait peut-être savoir ce qu'il y a exactement dans les tables Req2 et Req3.
    Est-ce qu'on peut avoir un extrait (copie d'écran) de ces tables dans la base de données ?
    ces deux tables ont des données de nature différentes.
    ANNEE BTA
    2011 51560
    2012 119400
    2013 301000
    2014 257400
    2015 430100
    2016 796765
    2017 843941
    2018 1538097
    2019 1577678

    ANNEE OTA
    2013 49011
    2014 47056
    2015 156760
    2016 194657
    2017 34800
    2018 110731
    2019 344345,1
    Je voudrais ressortir sur le graphique l’évolution des sommes (BTA, OTA) par an.

    Cdt,

  6. #6
    Membre habitué Avatar de Sam Placi
    Homme Profil pro
    Développeur occasionnel
    Inscrit en
    Octobre 2019
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur occasionnel

    Informations forums :
    Inscription : Octobre 2019
    Messages : 68
    Points : 129
    Points
    129
    Par défaut
    OK, je fais quelques essais et si je trouve une idée, je communique.

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    L'intervention de Sam m'a mis la puce à l'oreille ...

    Tu ne dois pas utiliser Chart1 et Chart2 car tu as un seul Chart sur ton Form (je présume).
    De plus, vu que tu n'as qu'un seul Chart, tu ne peux pas lui affecter 2 DataSources : c'est l'un ou l'autre !

    Me basant sur ces réflexions, j'ai placé un Chart sur un Form et je lui ai affecté un seul DataSource : dt3 (en reprenant de ton code).
    Mais comme tu as 2 jeux de données à passer au Chart, j'ai créé un dt3 qui contient TOUTES les données et j'en affecte une partie à Serie("BTA") et une partie à Serie("OTA").

    Je ne me suis pas donné la peine de créer les tables sous Access et de configurer la requête nécessaire, ta question n'étant pas de ce niveau : j'ai créé "manuellement" le dt3 avec les valeurs que tu as transmises.

    Voici le code que j'ai testé :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Private Sub Form10_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            'Dim sql1, sql2, sql3, sql4, sql5, sql6, sql7, sql8, sql9, sql10, sql11 As String
     
            'sql3 = "SELECT * FROM Req2"
            'sql4 = "SELECT * FROM Req3"
     
            'Dim adapter3 As New OleDbDataAdapter(sql3, con1)
            'Dim adapter4 As New OleDbDataAdapter(sql4, con1)
     
            'Dim dt3 As New DataTable("Req2")
            'Dim dt4 As New DataTable("Req3")
     
     
            'adapter3.Fill(dt3)
            'adapter4.Fill(dt4)
     
    '**********' création manuelle de la table dt3 ****************
     
            Dim dt3 As New DataTable
     
            dt3.Columns.Add("ANNEE")
            dt3.Columns.Add("BTA")
            dt3.Columns.Add("OTA")
     
            dt3.Rows.Add(2011, 51560)
            dt3.Rows.Add(2012, 119400)
            dt3.Rows.Add(2013, 301000, 49011)
            dt3.Rows.Add(2014, 257400, 47056)
            dt3.Rows.Add(2015, 430100, 156760)
            dt3.Rows.Add(2016, 796765, 194657)
            dt3.Rows.Add(2017, 843941, 34800)
            dt3.Rows.Add(2018, 1538097, 110731)
            dt3.Rows.Add(2019, 1577678, 344345.1)
     
    '**********' FIN de la création manuelle de la table dt3 ****************
     
    ' Réglage du Chart1
     
            Chart1.Series.RemoveAt(0)   'Enlever le Serie1 mis par défaut
            Chart1.Series.Add("BTA")
            Chart1.Series.Add("OTA")
     
            Chart1.Series("BTA").XValueMember = "ANNEE"
            Chart1.Series("BTA").YValueMembers = "BTA"
     
            Chart1.Series("OTA").XValueMember = "ANNEE"
            Chart1.Series("OTA").YValueMembers = "OTA"
     
            Chart1.DataSource = dt3
            '    Chart2.DataSource = dt4   ' pas besoin de ce DataSource, Chart2 n'existe pas
     
        End Sub
    J'espère que ceci t'aidera ...

    Nom : Chart.jpg
Affichages : 566
Taille : 47,5 Ko

  8. #8
    Expert confirmé
    Inscrit en
    Avril 2008
    Messages
    2 564
    Détails du profil
    Informations personnelles :
    Âge : 64

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 564
    Points : 4 441
    Points
    4 441
    Par défaut
    bonjour

    voici "the most simplest way" qui fera peut être ton bonheur .
    Cette façon de faire suppose bien entendu des coordonnées X homogènes suivant l' OX.(des années dans ton exemple).


    1/ on utilise un DataSet auquel sont ajoutés tes 2 datableS ...la suite roule sur du velours grâce à cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Chart1.Series.Add(nomserie)
    Chart1.Series(nomserie).Points.DataBind(ds.Tables(nomtable).AsEnumerable(), nomCol1, nomCol2, Nothing)

    exemple code behind .vb complet:
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Imports System.Windows.Forms.DataVisualization.Charting
     
    Public Class Form1
        Private ds As New DataSet
        Private rnd As New Random()
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            AddTables()
            BindChart()
        End Sub
        Private Sub BindChart()
            Me.Chart1.Series.Clear()
            Chart1.Series.Add("bta")
            Chart1.Series("bta").ChartType = SeriesChartType.Line
            Chart1.Series("bta").Points.DataBind(ds.Tables("BTA").AsEnumerable(), "ANNE", "BTA", Nothing)
            Chart1.Series.Add("ota")
            Chart1.Series("ota").ChartType = SeriesChartType.Line
            Chart1.Series("ota").Points.DataBind(ds.Tables("OTA").AsEnumerable(), "ANNE", "OTA", Nothing)
        End Sub
        Private Sub AddTables()
            Dim tableBTA, tableOTA As DataTable
            tableBTA = New DataTable("BTA")
            tableBTA.Columns.Add(New DataColumn("ANNE", GetType(Integer)))
            tableBTA.Columns.Add(New DataColumn("BTA", GetType(Integer)))
     
            tableOTA = New DataTable("OTA")
            tableOTA.Columns.Add(New DataColumn("ANNE", GetType(Integer)))
            tableOTA.Columns.Add(New DataColumn("OTA", GetType(Integer)))
     
            AddRows(tableBTA)
            AddRows(tableOTA)
            ds.Tables.Add(tableBTA)
            ds.Tables.Add(tableOTA)
        End Sub
        Private Sub AddRows(dt As DataTable)
            Dim dr As DataRow
            Dim year As Integer
            If dt.TableName = "BTA" Then
                dr = dt.NewRow
                For year = 2011 To 2019
                    dr(0) = year
                    dr(1) = rnd.Next(501, 801)
                    dt.Rows.Add(dr)
                    dr = dt.NewRow
                Next
            ElseIf dt.TableName = "OTA" Then
                dr = dt.NewRow
                For year = 2013 To 2019
                    dr(0) = year
                    dr(1) = rnd.Next(700, 905)
                    dt.Rows.Add(dr)
                    dr = dt.NewRow
                Next
            End If
     
     
     
     
        End Sub
     
    End Class
    Bon code...

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/02/2012, 20h46
  2. Graphique avec des données précises en vba
    Par seyflo dans le forum Excel
    Réponses: 10
    Dernier message: 25/05/2010, 09h47
  3. Créer un graphique avec des données dynamiques
    Par nikobell dans le forum Excel
    Réponses: 5
    Dernier message: 17/01/2010, 19h39
  4. Réponses: 1
    Dernier message: 28/01/2009, 09h01
  5. Créer un graphique avec des données sources variables
    Par Tom1402 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/12/2008, 18h19

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