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

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  3. 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
  4. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. RomainG
     
    Re-Bonjour,

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

    Merci
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      as tu lu mon message qui te propose une solution toute simple sans VBA ?
      0
    2. 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
    3. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
    4. 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
    5. melanie1324 Messages postés 1561 Statut Membre 156
       
      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