Calcul Médiane d'une colonne

Résolu
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 - 23 nov. 2018 à 12:43
julia Namor Messages postés 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024 - 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 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 février 2024 649
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024
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 18939 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 22 février 2024 649
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 524 Date d'inscription jeudi 27 mars 2014 Statut Membre Dernière intervention 13 janvier 2024
24 nov. 2018 à 19:49
Je comprends parfaitement.
encore merci
0
Rejoignez-nous