Calcul Moyenne Visual Basin

Résolu
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014 - 9 nov. 2011 à 20:06
 acive - 11 nov. 2011 à 19:26
Bonjour à tous, j'ai un peu honte de poser cette question, mais ça fait un bout de temps que j'ai pas travaillé sur VB...je suis + habitué à C/C++:

Voila, truc tout bête, je veux calculer une moyenne/note max/note min sur une entrée de diverses notes de controles...en terminant la saisie par une note >20:
bref, voila mon code :

Sub Macro2()

'dimensionnement des variables
Dim som As Single
Dim y As Single

Dim min As Single
Dim max As Single
Dim x As Single
Dim moy As Single

'initialisation des variables
moy = 0
som = 0
min = 20
max = 0
y = 0

'entrée des données

Do While x <= 20

x = InputBox("entrez les notes des éleves, terminez votre série de note par une valeur supérieure à 20")


If x < min Then
min = x

End If

If x > max Then
max = x

End If

som = som + x
y = y + 1
moy = som / y


Loop



'Résultats
MsgBox (" note minimum=" & min)
MsgBox ("note maximum=" & max)
MsgBox ("moyenne des notes=" & moy)
MsgBox (" merci de m'avoir utilisé !")

End Sub

bon, rien de bien méchant, mais j'ai completement zappé comment faire en sorte que la derniere valeur ( ne remplissant pas la condition <=20) ne soit pas prise en compte ...

actuellement si j'entre : 10, 11, 1000, j'ai note min:10, note max 1000 et moy= 340.333...

quelles instruction utiliser pour ne pas prendre en compte les notes >20 ? en C aucun probleme mais en VB je bloque betement :/

Merci pour votre aide ;)
Axel
A voir également:

55 réponses

Utilisateur anonyme
9 nov. 2011 à 22:47
Bon puisqu'il s'est couché, en reprenant ton post initial ca donnerait :
Sub Macro2()

'dimensionnement des variables
Dim som As Single
Dim y As Single

Dim min As Single
Dim max As Single
Dim x As Single
Dim moy As Single

'initialisation des variables
moy = 0
som = 0
min = 20
max = 0
y = 0

'entrée des données

Do While x <= 20

x = InputBox("entrez les notes des éleves, terminez votre série de note par une valeur supérieure à 20")

if x > 20 then exit do

If x < min Then
min = x

End If

If x > max Then
max = x

End If

som = som + x
y = y + 1
moy = som / y


Loop



'Résultats
MsgBox (" note minimum=" & min)
MsgBox ("note maximum=" & max)
MsgBox ("moyenne des notes=" & moy)
MsgBox (" merci de m'avoir utilisé !")

End Sub 
2
Utilisateur anonyme
9 nov. 2011 à 20:29
Bonsoir,

Peut-être :
if x > 20 then exit do


Bonne prog.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 20:36
Bonjour,

déjà :
x = InputBox("entrez les notes des éleves, terminez votre série de note par une valeur supérieure à 20")

ne signifie rien !
Comment pourrait-on "rentrer" plusieurs valeurs dans une "série", à l'aide d'une inputbox ?
On )peut toujours imaginer une suite de notes, séparées par un séparateur (dont tu ne parles pas), mais alors, si tel es le cas : comment expliquer :
If x < min Then
??????? sinon par un non-sens (et ce serait de même sous :
je suis + habitué à C/C++:


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 20:38
Ah pardon ===>> n'avait pas vu le loop ! ===>> oublie ma remarque


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 21:03
UCFOUTU: aucun probleme ;)
BANANA32: okay pour mettre if x>20 then exit do



mais vis a vis du code que j'ai posté, je ferme la boucle où et avec quelle instruction ? :s
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 21:04
Je viens de tout relire,
c'est tout, qu'il convient de corriger, y compris tes min et max dans leur définition...
A moins que je n'aie pas compris !
Pour moi, ce serait donc ainsi, de A à Z :
Dim moy As Double, som As Single, min As Integer, max As Integer, y As Integer
  som = 0
  min = 0
  max = 20
  y = 0
  Do While Val(x) <= max
    x = InputBox("entrez les notes des éleves, terminez votre série de note par une valeur supérieure à 20")
    If Val(x) <= max And Val(x) >= min And IsNumeric(x) Then
      som = som + Val(x)
      y = y + 1
    ElseIf Not IsNumeric(x) Then
    Else
      Exit Do
    End If
    MsgBox som & " " & y
  Loop
  moy = som / y
  MsgBox moy

j'y ai ajouté les garde-fous nécessaires en ce qui concerne les saisies incohérentes éventuelles.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
9 nov. 2011 à 21:57
Bonsoir ucfoutu,
InputBox renvoie un string il me semble, il faudrait penser à déclarer x et le convertir ensuite je pense.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:01
C'est précisément ce que j'ai fait en VB6, Banana32.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
9 nov. 2011 à 22:03
Je ne vois pas sa déclaration c'est pour cela que je pose la question.
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:04
euh, je ne comprends pas bien l'utilité de ISNUMERIC(x) et val(x) ? j'aurai utilisé x à la place de val(x), mais isnumeric(x), je ne vois pas à quoi ça sert

et dans l'histoire, si j'avais fixé max=0 et min=20, c'etait pke j'ai "besoin" d'afficher les note Max et Min, et dans ton code, min et max ne sont pas affichables !

mon code est bon, dans l'ensemble, c'est juste l'histoire du DO WHILE / LOOP que je ne sais pas regler ! ca marchait tout a l'heure, mais j'ai touché à cette instruction et je ne me rappelle plus comment elle etait écrite !
0
Utilisateur anonyme
9 nov. 2011 à 22:05
Donc en vb6 si j'écris x (single) = inputbox(blablabla) (string) ça marche ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:10
Ecoute :
1) mon code (testé) correspond à ta demande qui, si j'ai bien compris, est :
- accepter toutes les notes comprises entre 0 et 20 inclus
- sortir de l'inputbox si saisie d'une note > 20
- calculer la moyenne des notes ainsi rentrées

2) Isnumeric est- une fonction de VB6 (ouvre MSDN, s'il te plait) et a pour rôle de vérifier la validité (numérique d'une saisie)

Maintenant, il y a une petite amélioration (fastoche) à apporter si tu saisis des notes avec décimales...
Mais je te laisse faire un peu. Je reviendrai sur ce point lorsque tu auras passé la ^première étape (c'est là ma philosophie et c'est également ma "religion")

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:13
justement : je veux afficher les notes MAX et MIN ...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:19
oui, Banana32 : on pourrait le faire, mais il faudrait alors gérer les erreurs de la quasi-même manière (car si l'intéressé est sur un système avec séparateur virgule, une saisie avec point provoquera erreur).
Mais oui, on peut le faire aussi, bien évidemment !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:22
could you help me ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:24
Axeu ===>>
regarde le titre donné à ta discussion
Regarde également ta quest(ion, telle que posée
=>> tu as eu ta réponse à CETTE question.
Ta nouvelle exigence est un autre aspect (et fort simple à régler ... élémentaire, même) Il te suffit de deux variables la_note_min et la_note_max à alimenter au fur et à mesure, par simple expression conditionnelle ! Mais là, c'est tellement le B.A.BA, que je te laisse te "creuser les méninges" (si peu !)
Bonne chance.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:31
jveux pas paraitre chiant hein, mais a la base c'est mon poste et jvous demande une chose très simple :

sub macro()
x=0
y=0
DO WHILE x<20
x=inputbox("entrer valeurs")
y=y+x
loop
msgbox("somme tant que les notes entrées sont <20" &y)
end sub

Là si jmet 10 11 30 jobtiens pas une somme de 21 mais de 51 !
DONC je veux pas que la note >20 soit prise en compte !!

donc c'est quoi l'INSTRUCTION QUI FAIT QUE ça s'arrete quand la note est >20 ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 nov. 2011 à 22:33
Je ne veux pas être méchant, mais quand-même serait-ce la mer à boire que de d'écrire, pour chaque note retenue (et uniquement si retrenue ... et on voit où dans mon code) :
If Val(x) <la_note_min then la_note_min Val(x)
If Val(x) >la_note_max then la_note_max Val(x)
en déclarant, avant la inputbox, que la_note_min 9999999 (tiens, pourquoi pas ? ) et que la_note_max - 888888 (et pourquoi pas, tiens donc également ) ou 20 pour la_note_max et 0 pour la_note_min, si tu veux ...
Allons Allons !
___________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:33
et ma QUESTION mene a mon post qui précisait bien : Voila, truc tout bête, je veux calculer une moyenne/note max/note min sur une entrée de diverses notes de controles...en terminant la saisie par une note >20:
bref, voila mon code : ...

et on m'a pas du tout parlé de ça pour le moment
0
Axeu Messages postés 49 Date d'inscription jeudi 22 novembre 2012 Statut Membre Dernière intervention 20 juin 2014
9 nov. 2011 à 22:37
if <min then
min=x
end if
if max>x then
max=x
end if

c'est exactement ce que j'ai mi
0
Rejoignez-nous