CALCUL DE LA MOYENNE

jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009 - 8 avril 2006 à 10:04
jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009 - 8 avril 2006 à 10:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36918-calcul-de-la-moyenne

jean_marc_n2 Messages postés 170 Date d'inscription jeudi 11 décembre 2003 Statut Membre Dernière intervention 24 janvier 2009
8 avril 2006 à 10:04
Hello,

ton programme n'est pas mal en soi, tu dois juste apprendre quelques petites choses:
- quand on a plein de labels ou controles, il faut créer des groupes avec la propriété index
- pareil pour les variables, il faut utiliser des tableaux
- Toujours utiliser Option explicit et déclarer ses variables
- on ne doit jamais avoir de code dupliqué.

Bref, avec tout ça, tu peux commencer à lire un bon livre de VB. Ci joint, un petit corrigé de ton code. Il fonctionne à l'identique, mais tient compte des remarques précédentes. Pour que cela focntionne, il faut renommer certains controles et les indicer. Si tu me contactes directement, je peux t'envoyer le projet par mail.



'---------------------------------------------------------------------------------------
' Module : frm1
' DateTime : 7/04/2006 23:22
' Author : Jean-Marc
' Purpose : Calcul de la moyenne générale de différentes classes
'---------------------------------------------------------------------------------------

' Toujours mettre Option explicit en tête de chaque forme
' ou module. Cela oblige à déclarer toutes les variables
' que le programme manipule, ce qui est une règle ABSOLUE.

Option Explicit

' Declaration des constantes: Ne jamais utiliser de valeurs numériques en dur dans le code,
' mais toujours préférer des constates nommées, définies en tête de module

Private Const C_NB_CLASSE As Integer = 4 ' nombre de classes
Private Const C_NB_MAT As Integer = 11 ' nombre maxi de matières
'

'---------------------------------------------------------------------------------------
' Procedure : cbcalculer_Click
' DateTime : 7/04/2006 23:11
' Author : Jean-Marc
' Purpose : Lance le calcul
'---------------------------------------------------------------------------------------
'
Private Sub cbcalculer_Click()
Dim tnotes(C_NB_MAT) As Double ' tableau de conversion des notes
Dim nbNotes As Integer ' nombre de notes, en fonction de la classe
Dim moyenne As Double ' la moyenne
Dim i As Integer

' conversion des textboxes des notes en valeur numériques de type double
For i = 0 To C_NB_MAT - 1
tnotes(i) = Val(tbNoteMat(i).Text)
Next i

' calcul de la note moyenne en fonction de la classe
If optclasse(0).Value = True Then ' classe de sixième, 9 matières
nbNotes = 9
ElseIf optclasse(1).Value = True Then ' classe de cinquième, 10 matières
nbNotes = 10
Else ' pour les autres classes, 11 matières
nbNotes = 11
End If

' Calcul de la moyenne
' a) calcul de la somme
For i = 0 To nbNotes - 1
moyenne = moyenne + tnotes(i)
Next i
' b) division par le nombre de notes
moyenne = moyenne / nbNotes

' détermination de la couleur d'affichage, en fonction de la valeur de la moyenne
If moyenne < 11 Then
lblreponse.ForeColor = &HFF ' entre 00 et 10, rouge
ElseIf moyenne < 14 Then
lblreponse.ForeColor = &H80FF& ' entre 11 et 13, orange
Else
lblreponse.ForeColor = &HFF00& ' entre 14 et 20, vert
End If

' Affichage du résultat
lblreponse.Visible = True
lblreponse.Caption = Round(moyenne, 1) & " / 20"

End Sub

'---------------------------------------------------------------------------------------
' Procedure : cbexit_Click
' DateTime : 7/04/2006 23:44
' Author : Jean-Marc
' Purpose : Bouton Quitter, on quitte le programme
'---------------------------------------------------------------------------------------
'
Private Sub cbexit_Click()
' on n'utilise jamais END, mais toujours unload me

Unload Me

End Sub

'---------------------------------------------------------------------------------------
' Procedure : cbreinitialiser_Click
' DateTime : 7/04/2006 23:43
' Author : Jean-Marc
' Purpose : Réinitialisation, efface les notes et le résultat
'---------------------------------------------------------------------------------------
'
Private Sub cbreinitialiser_Click()
Dim i As Integer

' remise à "" des text box
For i = 0 To C_NB_MAT - 1
tbNoteMat(i) = ""
Next i
' efface le résultat
lblreponse.Caption = ""

End Sub

'---------------------------------------------------------------------------------------
' Procedure : Form_Load
' DateTime : 7/04/2006 23:26
' Author : Jean-Marc
' Purpose : Initialisation de la forme
'---------------------------------------------------------------------------------------
'
Private Sub Form_Load()
Dim i As Integer

' Désactive les boutons radio
For i = 0 To C_NB_CLASSE - 1
optclasse(i).Value = False
Next i

' Cacher les labels des matières et les textboxs des notes
For i = 0 To C_NB_MAT - 1
lblMatiere(i).Visible = False
tbNoteMat(i).Visible = False
Next i

lblchoix.Visible = True ' afficher le label qui permet de choisir la classe
' cache la frame qui comporte le résultat et le bouton calculer
' inutile de cacher les controles de la frame
fra1.Visible = False

End Sub

'---------------------------------------------------------------------------------------
' Procedure : optclasse_Click
' DateTime : 8/04/2006 09:43
' Author : Jean-Marc
' Purpose : Affiche ou cache les labels en fonction de la classe
'---------------------------------------------------------------------------------------
'
Private Sub optclasse_Click(Index As Integer)
Dim i As Integer

ln1.Visible = False
ln2.Visible = False
lblchoix.Visible = False
fra1.Visible = True

' on affiche toujours les 9 premières
For i = 0 To 8
tbNoteMat(i).Visible = True
lblMatiere(i).Visible = True
Next i

Select Case Index
Case 0 ' sixieme
tbNoteMat(9).Visible = False
lblMatiere(9).Visible = False
tbNoteMat(10).Visible = False
lblMatiere(10).Visible = False
Case 1 ' cinquieme
tbNoteMat(9).Visible = True
lblMatiere(9).Visible = True
tbNoteMat(10).Visible = False
lblMatiere(10).Visible = False
Case Else
tbNoteMat(9).Visible = True
lblMatiere(9).Visible = True
tbNoteMat(10).Visible = True
lblMatiere(10).Visible = True
End Select

End Sub

'---------------------------------------------------------------------------------------
' Procedure : tbNoteMat_Change
' DateTime : 7/04/2006 23:29
' Author : Jean-Marc
' Purpose : Vérifie la validité des notes, qui doivent ëtre comprises entre 0 et 20
'---------------------------------------------------------------------------------------
'
Private Sub tbNoteMat_Change(Index As Integer)
Dim note As Double

note = Val(tbNoteMat(Index).Text) ' conversion du texte en double
If (note < 0) Or (note > 20) Then ' vérification
tbNoteMat(Index).Text = "" ' remise à zéro si valeur inacceptable
End If

End Sub
Rejoignez-nous