Calcul moyenne pour chaque élèves

Signaler
Messages postés
4
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
9 décembre 2010
-
Messages postés
4
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
9 décembre 2010
-
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

7 réponses

Messages postés
69
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
20 juin 2011

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.
Messages postés
69
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
20 juin 2011

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.
Messages postés
4
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
9 décembre 2010

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..
Messages postés
69
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
20 juin 2011

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
Messages postés
4
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
9 décembre 2010

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
Messages postés
69
Date d'inscription
jeudi 22 décembre 2005
Statut
Membre
Dernière intervention
20 juin 2011

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 ?
Messages postés
4
Date d'inscription
mardi 7 décembre 2010
Statut
Membre
Dernière intervention
9 décembre 2010

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