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

Messages postés
442
Date d'inscription
jeudi 27 mars 2014
Dernière intervention
29 novembre 2018
- - Dernière réponse : julia Namor
Messages postés
442
Date d'inscription
jeudi 27 mars 2014
Dernière intervention
29 novembre 2018
- 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
Afficher la suite 

Votre réponse

3 réponses

Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
0
Merci
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...).
Commenter la réponse de Whismeril
Messages postés
442
Date d'inscription
jeudi 27 mars 2014
Dernière intervention
29 novembre 2018
0
Merci
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
Whismeril
Messages postés
12389
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 décembre 2018
-
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.
Commenter la réponse de julia Namor
Messages postés
442
Date d'inscription
jeudi 27 mars 2014
Dernière intervention
29 novembre 2018
0
Merci
Je comprends parfaitement.
encore merci
Commenter la réponse de julia Namor

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.