Calcul moyenne pour chaque élèves

ekseed Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 9 décembre 2010 - 7 déc. 2010 à 18:36
ekseed Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 9 décembre 2010 - 9 déc. 2010 à 17:57
Bon voilà le problème. dans la colonne A j'ai le nom de chaque élèves et leurs moyennes s'affichent dans la colonne B. Puis les notes débutent à partir de la ligne 3 et de la colonne D. sur la deuxième ligne il y a les coefs. Le truc c'est que j'arrive seulement à calculer la moyenne que d'un seul élève. en gros je ne sais pas comment passer à la ligne suivante dans la macro...
voilà à quoi resemble ce que j'ai fait:

Sub moyenne()
Dim moyenne As Double
Dim i As Integer
Dim A As Integer
i = 4
g = 3
A = 0
somcoef = 0
Do
note = Worksheet("feil1").Range(cells(g,i), cells(g,i)).value
coef = Worksheet("feil1").Range(cells(2,i), cells(2,i)).value
If not <>"" then
A = note*coef + A
somcoef = coef + somcoef
End If
i = i + 1
loop until note = ""
if A <> 0 then
moyenne = A/somcoef
worksheet("feil1").range(cells(g,2), cells(g,2)).value = moyenne
end sub
A voir également:

7 réponses

cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
7 déc. 2010 à 19:52
OK, je crois voir le pb.
La fonction "range" (comme la fct "cells") s'utilise comme suit :

worksheets("feuil1").range(cells(LIGNE1,COLONNE1),cells(LIGNE1,COLONNE1)).value

Donc c'est LIGNE1,COLONNE1 et non le contraire.

Ensuite, pour faire plus simple, tu peux utiliser la fonction suivante qd tu veux sélectionner qu'une cellule:
worksheets("feuil1").cells(Ligne1,colonne1).value
ou worksheets("feuil1").range("A2").value
Par défaut, cells(Ligne1,colonne1).value fonctionne (il prend la cellule de l'onglet actif)

Si tu veux sélectionner un gpe de cellules, tu utilises la fonction que tu as utilisé.

Ensuite, je ne comprends pas le test sur A (if A<>0). Moi, je l'aurais mis sur somcoef car le risque, c'est de faire une division par zéro et c'est somcoef qui est dénominateur.

Bon courage.
0
cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
8 déc. 2010 à 08:33
Ok je viens de comprendre que les notes sont en ligne donc la syntaxe est bonne. Il faut tout simplement incrementer g comme tu le fais pour i en mettant une 2nde boucle encadrant la 1ere.
0
ekseed Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 9 décembre 2010
8 déc. 2010 à 18:40
justement ce que je voulais savoir en faite c'est où placer la boucle et comment elle se termine.j'ai encadré la première sauf que sa ne marche toujours pas...faut croire que je suis nul..
0
cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
8 déc. 2010 à 23:24
Voici comment placer la 2nde boucle :

Do while cells(g,4).value<>""
A=0
Do while cells(g,i).value<>""
note=cells(g,i).value
coef = cells(2,i).value
If note <>"" then
A = note*coef + A
somcoef = coef + somcoef
End If
i = i + 1
loop
if somcoef <> 0 then moyenne = A/somcoef
cells(g,2).value = moyenne
g=g+1
loop
end sub
0

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

Posez votre question
ekseed Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 9 décembre 2010
9 déc. 2010 à 09:28
presque!c'est juste que sa répéte la première note sachant que A n'est pas dans la boucle sinon sa écrit zéro partout
0
cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
9 déc. 2010 à 14:29
Je ne comprends pas bien ta réponse.
Mais il est vrai que mon code est inexact car j'avais oublié de remettre i à zéro.
A=0 ne doit pas être mis dans la seconde boucle mais dans la 1ère.

Sub moyenne()
Dim i,A,g,somcoef,coef As Integer
Dim note as single

g=3
Do while cells(g,4).value<>""
A=0
i=4
somcoef = 0
Do while cells(g,i).value<>""
note=cells(g,i).value
coef = cells(2,i).value
If note <>"" then
A = note*coef + A
somcoef = coef + somcoef
End If
i = i + 1
loop
if somcoef <> 0 then cells(g,2).value = A/somcoef
g=g+1
loop
end sub

Ca devrait être bon cette fois.

Au fait, pourquoi une macro alors qu'on peut le faire facilement avec des fonctions sous Excel ?
0
ekseed Messages postés 4 Date d'inscription mardi 7 décembre 2010 Statut Membre Dernière intervention 9 décembre 2010
9 déc. 2010 à 17:57
ah merci,en effet c'était le i n'était pas bien placé par rapport aux boucles.
en fait, ce que je voulais dire tout à l'heure c'est que sa remettait à chaque fois la moyenne de la première ligne sur toutes les autres lignes. exemple, la moyenne de la première ligne c'est 13. cette moyenne se retrouver à chaque fois sur les autres lignes à la place de la moyenne exacte.

oui c'est vrai que c'est facile avec des fonctions mais on m'a dis que c'était plus rapide et en même c'est un exercice d'entraînement.

sinon merci!là au moins j'ai compris comment il faut faire
0
Rejoignez-nous