Calcul Moyenne Visual Basin [Résolu]

Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
- - Dernière réponse :  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
Afficher la suite 

Votre réponse

20/55 réponses

Meilleure réponse
1
Merci
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 

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
0
Merci
Bonsoir,

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


Bonne prog.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
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
Commenter la réponse de Axeu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
Bonsoir ucfoutu,
InputBox renvoie un string il me semble, il faudrait penser à déclarer x et le convertir ensuite je pense.
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
0
Merci
Je ne vois pas sa déclaration c'est pour cela que je pose la question.
Commenter la réponse de Utilisateur anonyme
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
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 !
Commenter la réponse de Axeu
0
Merci
Donc en vb6 si j'écris x (single) = inputbox(blablabla) (string) ça marche ?
Commenter la réponse de Utilisateur anonyme
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
justement : je veux afficher les notes MAX et MIN ...
Commenter la réponse de Axeu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
could you help me ?
Commenter la réponse de Axeu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
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 ?
Commenter la réponse de Axeu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Contributeur
Dernière intervention
11 avril 2018
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
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
Commenter la réponse de Axeu
Messages postés
49
Date d'inscription
jeudi 22 novembre 2012
Dernière intervention
20 juin 2014
0
Merci
if <min then
min=x
end if
if max>x then
max=x
end if

c'est exactement ce que j'ai mi
Commenter la réponse de Axeu

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.