Bonjour,
Je suis entrain de faire un petit soft de gestion des ventes / du stock et j'aimerai savoir comment je pourrais faire un datacolumn qui calcule la moyenne des cellules de la ligne...
merci d'avance à tous les forumeurs!
Bonjour,
Je suis entrain de faire un petit soft de gestion des ventes / du stock et j'aimerai savoir comment je pourrais faire un datacolumn qui calcule la moyenne des cellules de la ligne...
merci d'avance à tous les forumeurs!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 For Each row As DataGridViewRow In taDGV.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells total += cell.Value Next row.Cells("ColumnResultat").Value = total / row.Cells.Count Next
merci!
mais j'ai un petit soucis: j'ai cette erreur:
et comment fait-on pour lui dire de calculer sur les colones 2 à 5 (3° à 6°)?"L'opérateur '+' n'est pas défini pour type 'Double' et type 'DBNull'."
encore merci!
Essayes comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 For Each row As DataGridViewRow In taDGV.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells("ColumnResultat").Value = total / 4 Next
merci mais j'ai encore un soucis (padouwé, je sais...)
ça à l'air de fonctionner jusqu'au moment ou il faut mettre dans la colonne, il me dit que la colonne n'existe pas...
j'ai essayé avec une datacolumn et avec une colonne que j'ai mis dans la table de la bdd...
mais si au lieu du nom de la colonne je marque son numéro, cela fonctionne mais la moyenne est juste seulement pour la première colonne
( si je mets 2 partout, moyenne de 2 sur la première ligne, 4 sur la seconde, 6 sur la troisième...)
Et tu as une colonne nomméee "ColumnResultat" dans ton DGV "taDGV" ?
Peut-on voir ton code, y compris le designer du DGV ?
Attention la casse est importante
http://imageshack.us/photo/my-images...tagridview.jpg
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For Each row As DataGridViewRow In TestDataGridView.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells("moy").Value = total / 4 Next End Sub
voilà...
bon faut pas faire attention à l'intitulé des autres colonnes, si je te demandais de 2 à 5, c'était juste pour savoir comment on fait...
à ce propos, cellcount fonctionne aussi dans ce mode? parce que les ventes sont rentrées tous les jours et si on est au 2° jour et qu'on divise par 4 (exemple), cela n'est pas juste...
je crois que je vais devoir faire un compteur pour toutes les cellules qui ne sont pas égales à null et dire de diviser par la variable de ce compteur
encore merci de m'aider!
Et oui apriori le cellcount marchey compris le designer du DGV
Tu affiches tous les fichiers dans l'explorateur de solutions :
Tu ouvre le fichier designer :
Tu cherches la déclaration du datagridview et tu me colles ça ici
c'est ça?
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 'TestDataGridView ' Me.TestDataGridView.AutoGenerateColumns = False Me.TestDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize Me.TestDataGridView.Columns.AddRange(New System.Windows.Forms.DataGridViewColumn() {Me.DataGridViewTextBoxColumn1, Me.DataGridViewTextBoxColumn2, Me.DataGridViewTextBoxColumn3, Me.DataGridViewTextBoxColumn4, Me.DataGridViewTextBoxColumn5, Me.DataGridViewTextBoxColumn6, Me.DataGridViewTextBoxColumn7}) Me.TestDataGridView.DataSource = Me.TestBindingSource Me.TestDataGridView.Location = New System.Drawing.Point(24, 84) Me.TestDataGridView.Name = "TestDataGridView" Me.TestDataGridView.Size = New System.Drawing.Size(811, 442) Me.TestDataGridView.TabIndex = 3 ' 'DataGridViewTextBoxColumn1 ' Me.DataGridViewTextBoxColumn1.DataPropertyName = "ref" Me.DataGridViewTextBoxColumn1.HeaderText = "ref" Me.DataGridViewTextBoxColumn1.Name = "DataGridViewTextBoxColumn1" ' 'DataGridViewTextBoxColumn2 ' Me.DataGridViewTextBoxColumn2.DataPropertyName = "1" Me.DataGridViewTextBoxColumn2.HeaderText = "1" Me.DataGridViewTextBoxColumn2.Name = "DataGridViewTextBoxColumn2" ' 'DataGridViewTextBoxColumn3 ' Me.DataGridViewTextBoxColumn3.DataPropertyName = "2" Me.DataGridViewTextBoxColumn3.HeaderText = "2" Me.DataGridViewTextBoxColumn3.Name = "DataGridViewTextBoxColumn3" ' 'DataGridViewTextBoxColumn4 ' Me.DataGridViewTextBoxColumn4.DataPropertyName = "3" Me.DataGridViewTextBoxColumn4.HeaderText = "3" Me.DataGridViewTextBoxColumn4.Name = "DataGridViewTextBoxColumn4" ' 'DataGridViewTextBoxColumn5 ' Me.DataGridViewTextBoxColumn5.DataPropertyName = "4" Me.DataGridViewTextBoxColumn5.HeaderText = "4" Me.DataGridViewTextBoxColumn5.Name = "DataGridViewTextBoxColumn5" ' 'DataGridViewTextBoxColumn6 ' Me.DataGridViewTextBoxColumn6.DataPropertyName = "5" Me.DataGridViewTextBoxColumn6.HeaderText = "5" Me.DataGridViewTextBoxColumn6.Name = "DataGridViewTextBoxColumn6" ' 'DataGridViewTextBoxColumn7 ' Me.DataGridViewTextBoxColumn7.DataPropertyName = "moy" Me.DataGridViewTextBoxColumn7.HeaderText = "moy" Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
et voilà ...
C'est ça le nom de ta colonne, moy c'est juste l'affichage ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part Me.DataGridViewTextBoxColumn7.Name = "DataGridViewTextBoxColumn7"
je me suis fait avoir par le mode graphique qui indiquait name: moy (sur la 2° capture d'écran..) mais c'est datapropertyname...
merci!
autrement, tu aurais une idée pour le fait que la moyenne passe automatiquement à la ligne d'après? (comme j'expliquais plus haut, si je mets 2 partout sur 3 lignes, la moyenne est : 2 sur la 1° ligne, 4 sur la 2° ligne et 6 sur la 3° ligne...)
La c'est plus une question de logique qu'un problème de programmation, à toi donc d'y réfléchir.
ok, je vais encore essayer de trouver ce qu'il se passe...
alors, j'ai trouvé une solution qui doit pas être la plus belle:
(la première partie est le compteur qui retire les cellules vides pour permettre de faire le calcul de la moyenne en divisant par le nombre de ventes)
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 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For Each row As DataGridViewRow In TestDataGridView.Rows Dim compt As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then compt += 1 End If Next row.Cells(0).Value = compt compt = 0 Next For Each row As DataGridViewRow In TestDataGridView.Rows Dim total As Double For Each cell As DataGridViewCell In row.Cells If cell.ColumnIndex >= 2 AndAlso cell.ColumnIndex <= 5 Then If Not IsDBNull(cell.Value) Then total += cell.Value End If Next row.Cells(6).Value = total / row.Cells(0).Value total = 0 Next End Sub
donc, avant que l'on rentre des données, le compt et la moyenne contiennent un nombre (je n'ai pas encore compris d'où il vient) mais lorsque l'on rentre les ventes, le compt et la moyenne sont modifiés par les corrects.
sans que je ne change quoi que ce soit, maintenant, ça indique tjs les bons chiffres...
merci énormément de votre aide!
Partager