Calcul de moyenne (nombres de valeurs variabl [Résolu/Fermé]

Signaler
-
 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

Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
135
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
Messages postés
16314
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
28 novembre 2020
3 080
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
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
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
135
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
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
135
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
Re-Bonjour,

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

Merci
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
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
135
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
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
Messages postés
1505
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
31 janvier 2018
135
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
Tu es totalement pardonné. Je te suis très reconnaissant de l'aide que tu as bien voulu m'apporter. Cela fonctionne parfaitement. Vraiment merci beaucoup ! Bonne après midi à toi !

Romain