Calcul de moyenne (nombres de valeurs variabl

Résolu
RomainG -  
 RomainG -
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 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
RomainG
 
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 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
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 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
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
RomainG
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
as tu lu mon message qui te propose une solution toute simple sans VBA ?
0
RomainG
 
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 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
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
RomainG
 
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 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
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