Moyenne en boucle

Bonjour

J'aimerai faire une boucle à partir de l'Application.WorksheetFunction.Average qui me calcule les moyennes de chaque r pour chaque titre (a, b et c) (sur la feuille 2) et que celle-ci s'affiche à partir de B2 de la feuille 1.

Sachant que le nombre de r varie, je n'ai pas été en mesure d'insérer un "count" dans la formule (qui est obligatoire pour mon cas). Il se peut également que le nombre de titre change (apparition de d, e , ...).

Le seul code qui m'affiche un résultat correct est le suivant, mais je suis ensuite embêté concernant la boucle:

'NbR = nombre de r ... Grâce à une formule Count

Dim cellule As String

cellule = "B3:B" & NbR- 1

moy = Application.WorksheetFunction.Average(Sheets("Feuil2").Range(cellule))

Sheets("Feuil1").Range("B2").Value = moy

Le fichier Excel se trouve en annexe.

En vous remerciant d'avance pour votre aide !

Student

71classeur1.xlsm (18.22 Ko)

Bonjour student,

Une solution simple, sans boucle, à insérer dans un module de code standard :

Sub MacroMoyenne()
With Feuil1
  .Range("B2") = Application.WorksheetFunction.Average(Sheets("Feuil2").Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants, 1))
  .Range("B3") = Application.WorksheetFunction.Average(Sheets("Feuil2").Range("D3:D" & Rows.Count).SpecialCells(xlCellTypeConstants, 1))
  .Range("B4") = Application.WorksheetFunction.Average(Sheets("Feuil2").Range("F3:F" & Rows.Count).SpecialCells(xlCellTypeConstants, 1))
End With
End Sub

Cordialement.

Salut,

une autre option (avec boucle) à adapter à ta feuille

Sub Moyenne()
Dim cellule As Range, moy As Double

Sheets("Feuil2").Select

Range("B3").Select
Set cellule = Range(ActiveCell, ActiveCell.End(xlDown))
moy = Application.WorksheetFunction.Average(cellule)
MsgBox moy
End Sub

Bonjour à tous,

Tu peux aussi te contenter d'une formule

Exemple pour le titre A :

=MOYENNE(DECALER(Feuil2!B3;;;NBVAL(Feuil2!B:B)-1))

A+

justement, il me faut une boucle pour calculer la moyenne de tous les r (saut de 2) et les placer directement à la suite sur la feuille 1, cellule A3 ...

Alors peut-être avec

Sub test()
Dim DerCol As Integer, i As Integer
Dim DerLig As Long
Dim Moy As Double
    With Worksheets("Feuil2")
        DerCol = .Cells(3, Columns.Count).End(xlToLeft).Column
        For i = 2 To DerCol Step 2
            DerLig = .Cells(Rows.Count, i).End(xlUp).Row
            Moy = Application.WorksheetFunction.Average(.Range(.Cells(3, i), .Cells(DerLig, i)))
            Worksheets("Feuil1").Cells(i / 2 + 1, 2) = Moy
        Next i
    End With
End Sub

A+

Voilà, j'ai fait un mix qui me compte le r de A. Maintenant, est-ce que je peux changer le range par cell pour y insérer une boucle pour répéter l'opération pour b et c ?

moy = Application.WorksheetFunction.Average(Sheets("Feuil2").Range("B3:B" & Rows.Count).SpecialCells(xlCellTypeConstants, 1))

Super ca marche !!! merci à vous tous !!!!

Rechercher des sujets similaires à "moyenne boucle"