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
 Utilisateur anonyme - 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
10 nov. 2011 à 19:21
@ucfoutu,
Je viens de tester ton code sur vb6, il fonctionne parfaitement.
J'ai également testé le mien (qui n'est que la copie de celui du demandeur avec une ligne supplémentaire).
Il fonctionne aussi (à condition, chez moi, de mettre des virgules dans InputBox)
Apparemment, le demandeur travaille sur Excel vu le titre de la sub.
Les 2 langages sont-ils 100% compatibles ?
Il est vrai que la remontée du demandeur :
Mais ta solution ne fonctionne toujours pas

... est assez vague.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
10 nov. 2011 à 20:03
J'ai vu le titre de la sub, bien sûr, babana32,

Mais voilà ce qui arrive quand on ouvre une discussion là où l'ouverture n'est pas adéquate ===>> on est "servi"

Avec VBA Excel, la réponse à son problème eût été grandement facilitée du fait de deux fonctions d'Excel que l'on peut utiliser en VBA. Hé hé !
Mais il a "posté" sous VB6 ? et en voulant "apprécier" par rapport à C++ ? === >> il y a "eu droit" et "à fond la caisse" avec du VB6 .
Sous VBA/Excel, la réponse était beaucoup plus simple à divers titres, mais je ne veux dans ces conditions même pas en parler, puisqu'ici on "parle" VB6
J'espère que d'autres (qui se trompent fréquemment de section) liront ce message et qu'ils commenceront à comprendre pourquoi il est indispensable de choisir adéquatement la section dans laquelle on ouvre sa discussion.
____________________
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
10 nov. 2011 à 23:41
Merci Banana 32 ca marche.
foutu, t'avais qu'à regarder la synthaxe pour voir que c'etait excel.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 nov. 2011 à 06:12
foutu, t'avais qu'à regarder la synthaxe pour voir que c'etait excel.

Et non !
1) la syntaxe ne diffère nullement de celle de VB6
2) rien n'empêche, sous VB6, de nommer une procédure Macro2 (seul point qui peut "mettre la puce à l'oreille")

Tu es donc sous VBA, hein !
Hé bé ! tout ce boulot pour rien. Enfin non : pas pour rien, mais VBA de Excel était mieux placé pour faire tout cela tellement plus simplement

Allez. 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

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 nov. 2011 à 07:03
Alors sous VBA/Exel (et ensuite tu vas te débrouiller maintenant seul, n'est-ce pas..) existent :
1) - la possibilité d'utiliser depuis VBA toutes les fonctions de Excel, don Min, Max et Average
2) - la possibilité d'utiliser un autre type d'inputbox que le tien (et donc d'éviter d'avoir à rentrer une note > 20 pour terminer)
tout ce qui te fallait, quoi ! et (cerise sur le gâteau) avec possibilité de conserver les notes en mémoire. En réalité, les choses vont encore plus loin et remettent en cause la conception elle-même, depuis Excel, de ton appli. En rélité, même l'inputbox devient inutile, dans ce cas.
En ce qui concerne les points 1 et 2 : je t'invite à ouvrir ton aide VBA sur les mots WorksheetFunction et Application, à y fouiller (notamment en ce qui concerne ton inputbox), puis à travailler. Moi, tu m'as tellement fait travailler pour rien, que je vais maintenant prendre du repos et que je te laisse donc là !


____________________
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
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
11 nov. 2011 à 10:22
Bonjour ucfoutu

j'ai lu qu'en vba le compiler ne crée pas
d'exe
Est ce pour cela qu'on dit
crée un macro excel ou macro word ?
Comment est exécuté ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 nov. 2011 à 11:01
Bonjour ShayW,
Les procédures de VBA tournent (hors mode création) exactement comme le run de VB6 (avant d'avoir fait l'exe de VB6)

En ce qui concerne maintenant le mot "macro" : je sais que nombreux sont ce qui l'associent immédiatement à MsOffice et analogues, mais c'est une tendance "restrictive" dénuée de sens.
La définition d'une macro est nettement plus extensive.
En VBA, l'habitude est de parler de "macros", mais en raccourci de, en réalité : "Macros-Clavier"
Quant à la procédure que notre ami avait baptisée "Macro2", ce n'est pas une "macro-clavier", mais tout simplement une procédure . On aurait pu donner ce même nom (Macro2) à une procédure de n'importe quel langage qui, comme VB, gère des procédures.
voilà.

____________________
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
11 nov. 2011 à 11:07
voila un petit extrait de texte qui te fera comprendre ce qui se passe en réalité en ce qui concerne la terminologie utilisée par MsOffice :*
Certains logiciels ou environnements permettent d'associer des suites d'instructions complexes à des touches clavier on parle alors de macros clavier.

Certains logiciels tels que ceux de la suite bureautique Microsoft Office contiennent un petit langage de programmation (Visual Basic for Applications - VBA) permettant de commander les fonctionnalités du logiciel. On appelle souvent les programmes dans ce genre de langages des macros.

Et ce sont en effet des macros, mais comme toutes les autres procédures de langages évolués (des macros) !


____________________
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
11 nov. 2011 à 11:17
La seule fonction Dir, par exemple et entre autres, est à elle-seule une macro (pour être précis : une macro-fonction)
on a ainsi des macro fonction, des macros instructions, des macros clavier, etc...
Par extension : toute fonction, toute procédure ... qui stockent des instructions à exécuter ensuite sont appelées des macros (macros procédures, macro fonctions, etc ...)
J'espère t'avoir éclairé un peu


____________________
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
11 nov. 2011 à 11:50
Mais j'espère que axeu, qui dit être plus à l'aide avec C++, n'ignore pas tout cela
Dans le cas contraire, il pourra utilement lire ceci

____________________
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
11 nov. 2011 à 17:27
Salut,

IsNumeric retourne True si le type de données de Expression est Boolean, Byte, Decimal, Double, Integer, Long, SByte, Short, Single, UInteger, ULong ou UShort, ou un Object contenant l'un de ces types numériques. Il retourne également True si Expression est un Char ou String qui peut être correctement converti en nombre.

IsNumeric retourne False si Expression a pour type de données Date ou Object et qu'il ne contient pas de type numérique. IsNumeric retourne False si Expression est un Char ou String qui ne peut pas être converti en un nombre.


Pardon pour le copier/coller

CF2i - Guadeloupe
Ingénierie Informatique
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 nov. 2011 à 18:36
tu as raison, acive ! VB6 me parait finalement très permissif à ce propos !
Mais cela ne change rien en ce qui concerne une réponse à la proposition faite de modifier
ElseIf Not IsNumeric(x) Then

en
ElseIf Not IsNumeric(Val(x)) Then

surtout pas ! Et se méfier des largesses de VB !
Le preuve ?
x = "hhhdyrbbbh" ' qui n'est donc pas un numérique
MsgBox "avec isnumeric(x) " & IsNumeric(x) & " (bonne réponse)" & vbCrLf & _
"avec isnumericval((x))" & IsNumeric(Val(x)) & " (mauvaise réponse !)"

L'explication est que val("hljmjm,k*! *&&................&&&") 0 et que 0 est un numérique >> et voilà comment on se plante sans même s'en apercevoir


____________________
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
11 nov. 2011 à 18:45
et donc isnumeric(val(x)) retournera toujours True que x soit ou non numérique et quel que soit le contenu de x


____________________
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
11 nov. 2011 à 19:04
Salut UC,

Moi j'appelle ça les mystères du VB

Dim n As String '(Donc du texte)

si l'on dit que:
n = "3,45"
la valeur de n (val(n)) sera de 3

Par contre si on dit que:
n = "3.45"
la valeur de n (val(n)) sera de 3,45

Le isnumeric c'est un booléen uniquement pour nous indiquer si c'est un chiffre ou pas
Mais bizarrement quand on lui demande si:
IsNumeric ("3.45") 'il nous dit FALSE
Tandis que "3,45" c'est TRUE

Ce n'est qu'avec l’expérience qu'on commence à connaitre par bien (à force de se tremper) et qu'on arrive à ne plus faire d'erreurs...



CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
11 nov. 2011 à 19:26
Ça y est ça me revient...
Le val() affiche la valeur numérique des premiers caractères
par exemple Val("3sdf") sera 3
ou val("37sdf") sera 37, même si tu mets des chiffres après
Val("37sdf45") sera aussi 37

Au fait il prend les valeurs numériques jusqu'à trouver un caractère non numérique (valeur zéro)
Val(sdf37) sera 0 parce qu'il a trouvé un non numérique et fini sa conversion.

Le IsNumeric("3.45") est False c'est normal parce que le "." n'est pas considéré comme numérique contrairement a la ","
Le IsNumeric considère False à partir du moment dans la chaine il trouve un caractère qui n'est pas numérique

Bref j'ai aussi du mal à me comprendre, ne t'inquiètes pas




CF2i - Guadeloupe
Ingénierie Informatique
0
Rejoignez-nous