VBA : Moyenne d'une partie de ligne

Résolu
Bonjour,

J'ai posté un message un peu plus tôt dans la journée au sujet de calcul de moyennes sous vba.
Post résolu, cependant, j'ai un autre petit problème que je souhaite vous soumettre.
J'aimerais réaliser une moyenne d'un bout de ligne.
Globalement, pour k allant de 4 à 10, calculer moy((cellule(1,4),cellule(1,5)...cellule(1,k)).
Je pense que cela est simple, mais n'étant pas un expert, je galère un peu.

Accessoirement, je veux faire ça jusqu'à la dernière ligne de mon tableau (mais ça j'y arriverai je pense ;-))

Voilà ce que j'ai pour l'instant

Sub Bouton18_QuandClic()

Dim dercol5 As Byte
Dim derline5 As Byte
dercol5 = Range("B4").End(xlToRight).Column
derline5 = Range("B4").End(xlDown).Row


Cells(4, dercol5).Value = Application.Average(Range("B" & 6 : "B" & dercol5-1))
Next


End Sub


Merci d'avance et bon aprem

5 réponses

  1. Bonjour à tous,

    Je me permets de réitérer ma demande.
    Je suis un peu bloqué sans cela à vrai dire.

    Merci beaucoup aux aideurs
    0
    1. Bon ben j'ai opté pour la bonne vieille solution de la somme puis de la division.

      Dim dercol5 As Byte
      Dim derline5 As Byte
      dercol5 = Range("B4").End(xlToRight).Column
      derline5 = Range("B4").End(xlDown).Row
      
      Dim somme As Integer
      Dim moyenne As Integer
      
      somme = 0
      
      Dim b As Byte
      For b = 6 To dercol5 - 1
      
      somme = somme + Cells(4, b).Value
      
      Next
      moyenne = somme / (dercol5 - 1 - 5)
      Cells(4, dercol5).Value = moyenne


      ça fonctionne, mais quand même, si certains peuvent me donner la syntaxe à utiliser pour faire directement la moyenne, pour ma culture...merci
      0
      1. Modérateur
        Salut,
        Je ne connait pas la fonction :
        Application.Average
        mais perso, pour une moyenne je ferais comme ceci : !!! Il se peux que je n'ai rien compris à ton souhait. Pense donc à tester cette macro sur une copie de ton fichier...

        Sub Bouton18_QuandClic() 
        Dim dercol5, derline5, i, j ,nbre As Integer 
        Dim moyenne As Double
        dercol5 = Range("B4").End(xlToRight).Column 
        derline5 = Range("B4").End(xlDown).Row 
        For i = 5 To derline5 'boucle sur toutes les lignes à partir de 5 
        If dercol5 - 1 < 2 then Exit Sub 
        nbre = dercol5 - 3 
        For j = 2 To dercol5 - 1 'boucle des colonnes B à dercol5 - 1 
        moyenne = moyenne + Cells(i, j).Value 
        Next j 
        Cells(i, dercol5).Value = CDbl(moyenne / nbre)
        Next i 
        End Sub


        Cordialement,
        -- Tout problème à sa solution. S'il n'y a pas de solution, ou est le problème? --
        0
        1. Merci pour ta réponse Pijaku,

          Mais le bout de code que j'ai proposé au dessus règle déjà mon problème.
          Je me demandais juste s'il existait une fonction permettant de faire directement une moyenne sur un morceau de ligne, et je m'explique car effectivement je ne suis pas forcément très clair.

          En gros faire la moyenne de F4 à F(dercol5-1).
          Je ne peux pas écrire average(F4 : F#) puisque dercol5-1 est variable et c'était mon soucis.

          Mais j'ai ce que j'ai besoin maintenant merci quand même !

          Petite question subsidiaire quand même si tu me le permets.
          Comment fait-on pour définir une variable en fonction d'une autre ?

          Je veux que pour t allant de 4 à derline5, j'obtienne la moyenne dans la dernière case.
          J'ai maintenant ma moyenne (code précédent), est ce possible d'écrire quelquechose comme somme(t) = blablabla ?

          Désolé, je suis encore débutant sous vba et merci pour ton aide.
          0
          1. Modérateur
            Pour la moyenne essaye ceci :
            Cells(4, dercol5).Value = Application.Average(Range("F4:F" & dercol5-1))

            A toi de définir au préalable dercol5
            0
          2. Je vais tester ça merci !
            0
          3. apparemment ça ne fonctionne pas...
            C'est bizarre, j'obtiens une valeur assez incompréhensible.
            0
          4. Modérateur
            quel c** je fais...
            Ben oui on calcule la moyenne entre F4 et F... Donc c'est po ça... Essaye :
            Cells(4, dercol5).Value = Application.Average(Range(Cells(4, 6), Cells(4, dercol5 - 1)))

            Excuse moi encore, par moment ça crève l'écran et on ne voit rien...
            0
          5. héhé, pas de soucis ;-)
            Comme je le disais j'ai opté pour la solution "longue" de calcul de somme puis la diviser.
            Mais c'est très bien comme ça.
            Je vais quand même essayer ta solution pour la "culture" et juste pour dire aux autres si ça fonctionne.

            Merci en tous cas
            0
        2. Et bien pour info, ça fonctionne.
          Merci Pikaju
          Au plaisir
          0