Calcul Médiane d'une colonne [Résolu]

Signaler
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020
-
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020
-
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

Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
540
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...).
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020

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
Messages postés
15913
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 mai 2021
540
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.
Messages postés
493
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
26 décembre 2020

Je comprends parfaitement.
encore merci