Calcul Médiane d'une colonne

Résolu
julia Namor
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020
- 23 nov. 2018 à 12:43
julia Namor
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020
- 24 nov. 2018 à 19:49
Bonjour,
Je bloque pour calculer la médiane des ages d'une colonne de ma datagridview
Form1.dgvData


Merci d'avance de votre aide

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Total As Double
For Each row As DataGridViewRow In Form1.dgvData.Rows
Total = Total + row.Cells("AGEDataGridViewTextBoxColumn").Value
Next
'Nombre de ligne remplies
TextBox1.Text = Total

' Age moyen
TextBox2.Text = (Total / Form1.SampleDataSet1.Members.Rows.Count) & " ans"

' Age médian ???????
TextBox3.Text = Median.row.Cells("AGEDataGridViewTextBoxColumn").Value

End Sub

3 réponses

Whismeril
Messages postés
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
596
23 nov. 2018 à 14:35
Bonjour,

merci de lire ceci afin d'utiliser correctement la coloration syntaxique
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Regarde ça
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim Total As Double
        For Each row As DataGridViewRow In Form1.dgvData.Rows
            Total = Total + row.Cells("AGEDataGridViewTextBoxColumn").Value
        Next
        'Nombre de ligne remplies
        TextBox1.Text = Total

        ' Age moyen
        TextBox2.Text = (Total / Form1.SampleDataSet1.Members.Rows.Count) & " ans"

        ' Age médian ???????
        TextBox3.Text = Median.row.Cells("AGEDataGridViewTextBoxColumn").Value

    End Sub

C'est mieux non?

Pour ton calcul.
Voir ici
https://www.piger-lesmaths.fr/comment-calculer-la-mediane/

Sache que ce serait beaucoup plus simple à appliquer si tu utilisais une collection bindée.
Tu pourrais ainsi utiliser les outils de Linq (somme, moyenne, tri, etc...).
0
julia Namor
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020

Modifié le 24 nov. 2018 à 11:37
Bonjour
Merci pour le lien.J'ai pu tant bien que mal à calculer les différents statistiques.Du coup je ne me suis pas lancée dans la collection bindée , j'ai tout calculé sur le datagrid qui se r&actualise a chaque événement.
Voila mon code . Si vous avez des suggestions..
merci beaucoup de votre aide
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
' tri à partir de lacolonne age
        Form1.dgvData.Sort(Form1.dgvData.Columns("AGEDataGridViewTextBoxColumn"), System.ComponentModel.ListSortDirection.Ascending)

        Dim Total As Double
        For Each row As DataGridViewRow In Form1.dgvData.Rows
            Total = Total + row.Cells("AGEDataGridViewTextBoxColumn").Value
        Next
        '''''MsgBox("effectif: " & Form1.SampleDataSet1.Members.Rows.Count)
        'Nombre de ligne remplies
        TextBox1.Text = Form1.SampleDataSet1.Members.Rows.Count
        ' Age moyen
        Dim val As Double
        val = (Total / Form1.SampleDataSet1.Members.Rows.Count)
        TextBox2.Text = Math.Round(val, 1) & " ans"
        ' Age médian
        If Int(Form1.SampleDataSet1.Members.Rows.Count / 2) = Form1.SampleDataSet1.Members.Rows.Count / 2 Then
            'pair
            ' MsgBox("pair")
            rang1 = (Form1.SampleDataSet1.Members.Rows.Count) / 2
            ' MsgBox("rang1: " & rang1)
            rang2 = ((Form1.SampleDataSet1.Members.Rows.Count) / 2) + 1
            ' MsgBox("rang2: " & rang2)
            Dim val1 As Decimal = Form1.dgvData("AGEDataGridViewTextBoxColumn", rang1 - 1).Value
            'MsgBox("val1: " & val1)
            Dim val2 As Decimal = Form1.dgvData("AGEDataGridViewTextBoxColumn", rang2).Value
            'MsgBox("val2: " & val2)
            TextBox3.Text = ((CDbl(val1) + CDbl(val2)) / 2) & " ans"
        Else
            'impair
            'MsgBox("impair")
            rang1 = (Form1.SampleDataSet1.Members.Rows.Count + 1) / 2
            TextBox3.Text = Form1.dgvData("AGEDataGridViewTextBoxColumn", rang1).Value & " ans"
        End If
    End Sub
0
Whismeril
Messages postés
17337
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
22 mai 2022
596
24 nov. 2018 à 19:27
Bonsoir
Si vous avez des suggestions..
je t'ai déjà fait la meilleure suggestion que je pouvais.

VB.Net est un langage tout objet, chaque outil est un objet. Et donc tous les outils performants utilisent des objets ou des collections d'objets.
Alors oui, au début ça nécessite un effort d'apprentissage, mais franchement une fois acquis, c'est beaucoup moins compliqué et casse pied à écrire.

Tu préfères coder événementiel, tu as tes raisons. Je n'irai pas à ton encontre, mais je ne vais pas non plus chercher à optimiser ton code, car je n'ai plus le gout à la programmation événementielle.
0
julia Namor
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020

24 nov. 2018 à 19:49
Je comprends parfaitement.
encore merci
0