jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 janvier 2009
-
8 avril 2006 à 10:04
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 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.
jean_marc_n2
Messages postés170Date d'inscriptionjeudi 11 décembre 2003StatutMembreDernière intervention24 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
'---------------------------------------------------------------------------------------
' 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
' 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
8 avril 2006 à 10:04
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