Calcul de moyenne (nombres de valeurs variabl

Résolu/Fermé
RomainG - 26 mai 2011 à 10:03
 RomainG - 26 mai 2011 à 14:49
Bonjour,

Dans le cadre d'un projet, je souhaiterai effectuer l'opération suivante.
1 140
1 120
1 160
2 145
2 126
2 130
2 170
3 125
3 135

Calculer à l'aide d'une macro vba, la moyenne des valeurs de la colonne 2 qui sont affectés à un 1 en colonne 1. La moyenne des valeurs de la colonne 2 affecté à un 2 en colonne 1 et la moyenne des valeurs de la colonne 2 effecté à un 3 en colonne 1. Toute ces moyennes seraient regroupés dan sune 3ème colonne. Le principale problème résidant dans le fait que le nombre de valeurs à inclure dans la moyenne est variable.
Ceci n'est qu'un échantillon, en réalité je dois étendre ca à une centaine de valeur environ. Pour l'instant tout ce que j'ai pu écrire est cela :


Sub moyenne()

For i = 1 To 9 Step 1
If Cells(i, 1).Value = Cells(i + 1, 1).Value Then Cells(i, 3).Value = Average(Cells(i, 2).Value, Cells(i + 1, 2).Value)
Else: Cells(i, 3).Value = ""
Next
End Sub

Naturellement la fonction average n'existe pas (hélas), il faut la définir mais je ne vois pas trop comment faire.
Merci d'avance aux internautes qui voudront bien m'aider.

Romain

5 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 13:38
Bonjour,

si ton tableau est déjà trié comme tu l'as fait :

Sub moyenne()
i=1
a=1
do while cells(i,1) <> ""
valeur = cells(i,1)
compteur = 1
total = cells(i,1)
do while cells(i+1,1) = valeur
total = total + cells(i+1,j)
compteur = compteur +1
i=i+1
loop
cells(a,3) = total/compteur
a=a+1
loop


End Sub
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 26/05/2011 à 14:19
Bonjour,

Es tu obligé d'utiliser VBA ?

car, sinon, un tableau croisé dynamique résout tranquillement le problème.

pj: un tu exemple fait en 5 minutes
https://www.cjoint.com/?3EAosOeCoTW
Michel
0
Re-Bonjour,

Merci pour votre aide Melanie. Valeur et total sont les mêmes d'après vous? J'aurai plutôt mis total = Cells(i,2). Est ce cela ?
Lorsque j'exécute le programme, excel me dit "incompatiblité de type 13", j'ai vu que c'était un problème assez répandu concernant un problème de variable (chaine de caractère à la place de variable ou problème du genre).
Voyez vous dans ce que vous avez écrit quelque chose suscpetible d'être innaproprié ?

Merci

Romain
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 14:18
Bonjour,

Oui une petite erreur de frappe et tu as raison ;


Sub moyenne()
i = 1
a = 1
Do While Cells(i, 1) <> ""
valeur = Cells(i, 1)
compteur = 1
total = Cells(i, 2)
Do While Cells(i + 1, 1) = valeur
total = total + Cells(i + 1, 1)
compteur = compteur + 1
i = i + 1
Loop
Cells(a, 3) = total / compteur
a = a + 1
Loop

End Sub
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 14:20
j'ai fait une autre erreur, celui-ci fonctionne :


Sub moyenne()
i = 1
a = 1
Do While Cells(i, 1) <> ""
valeur = Cells(i, 1)
compteur = 1
total = Cells(i, 2)
Do While Cells(i + 1, 1) = valeur
total = total + Cells(i + 1, 1)
compteur = compteur + 1
i = i + 1
Loop
Cells(a, 3) = total / compteur
Cells(a, 3).Select
i = i + 1
Loop

End Sub
0

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

Posez votre question
Re-Bonjour,

A priori la boucle tourne à l'infini et bloque excel. Y'aurait il une condition à rajouter ?

Merci
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
26 mai 2011 à 14:30
as tu lu mon message qui te propose une solution toute simple sans VBA ?
0
Bonjour michel,

Je ne l'ai vu qu'après coup c'est vrai. Les tableau croisé dynamique sont certes plus rapides mais dans mon cas, l'utilisation de vba est plus approprié. Il s'agit de donnée que je souhaiterai classer (calcul de moyenne) puis exporter dans un autre logiciel et ceci pour un grands nombres de fichiers. Une macro pouvant réaliser cette opération pour tout mes fichiers me faciliterait grandement la tâche.

Merci néanmoins pour l'info !

Romain
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 14:36
as-tu pris le code qui était en commentaire?


Sub moyenne()
i = 1
a = 1
Do While Cells(i, 1) <> ""
valeur = Cells(i, 1)
compteur = 1
total = Cells(i, 2)
Do While Cells(i + 1, 1) = valeur
total = total + Cells(i + 1, 1)
compteur = compteur + 1
i = i + 1
Loop
Cells(a, 3) = total / compteur
Cells(a, 3).Select
i = i + 1
Loop

End Sub
0
Non à ce moemnt là je ne l'avais pas pris. Celui en commentaire me donne un seul résultat tout en haut de la colonne 3. Le chiffre donnée (si je reprends les valeur numériques que j'ai donné en haut de page( est 64. Cela ne semble correpondre à aucune moyenne. Ce qui m'étonne c'est que 3 résultats sont sensé apparaitre et que un seul ne s'affiche.

Romain
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 14:45
Pardonne moi suis en train de faire la sieste :

Sub moyenne()
i = 2
a = 2
Do While Cells(i, 1) <> ""
valeur = Cells(i, 1)
compteur = 1
total = Cells(i, 2)
Do While Cells(i + 1, 1) = valeur
total = total + Cells(i + 1, 2)
compteur = compteur + 1
i = i + 1
Loop
Cells(a, 3) = total / compteur
Cells(a, 3).Select

i = i + 1
a = a + 1

Loop

End Sub
0