ekseed
Messages postés4Date d'inscriptionmardi 7 décembre 2010StatutMembreDernière intervention 9 décembre 2010
-
7 déc. 2010 à 18:36
ekseed
Messages postés4Date d'inscriptionmardi 7 décembre 2010StatutMembreDerniè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
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.
cs_subaqua
Messages postés69Date d'inscriptionjeudi 22 décembre 2005StatutMembreDernière intervention20 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.
ekseed
Messages postés4Date d'inscriptionmardi 7 décembre 2010StatutMembreDerniè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..
cs_subaqua
Messages postés69Date d'inscriptionjeudi 22 décembre 2005StatutMembreDernière intervention20 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_subaqua
Messages postés69Date d'inscriptionjeudi 22 décembre 2005StatutMembreDernière intervention20 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 ?
ekseed
Messages postés4Date d'inscriptionmardi 7 décembre 2010StatutMembreDerniè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