Calculer moyenne sous VBA

harveyspecter

XLDnaute Occasionnel
Bonjour a tous!!


Je voudrais connaitre le code VBA pour calculer une fonction moyenne et pouvoir l'utiliser sous exceL.

J'ai commencer le code mais je pense être dans une mauvaise piste.

Si quelqu'un peut m'aider merci bien.
 

Pièces jointes

  • dutyfreeB.xlsm
    21.1 KB · Affichages: 82
  • dutyfreeB.xlsm
    21.1 KB · Affichages: 101
  • dutyfreeB.xlsm
    21.1 KB · Affichages: 84

Regueiro

XLDnaute Impliqué
Re : Calculer moyenne sous VBA

Bonsoir

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("B78").Value = Application.WorksheetFunction.Average(Cells(2, 2).Resize(71, 1))
End Sub
code à adapter
 

job75

XLDnaute Barbatruc
Re : Calculer moyenne sous VBA

Bonjour harveyspecter, gosselien, Regueiro, le forum,

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With [A1].CurrentRegion
  With .Columns(2).Resize(, .Columns.Count - 1)
    .Rows(.Rows.Count + 5) = "=AVERAGE(OFFSET(" & .Columns(1).Address & ",,COLUMN()-2))"
    .Rows(.Rows.Count + 6) = "=STDEV.S(OFFSET(" & .Columns(1).Address & ",,COLUMN()-2))"
    .Rows(.Rows.Count + 5).Resize(2) = .Rows(.Rows.Count + 5).Resize(2).Value 'facultatif
  End With
End With
End Sub
Attention : le tableau doit être suivi d'une ligne vide (ligne 74).

Fichier joint.

Bonne journée et A+
 

Pièces jointes

  • dutyfreeB(1).xlsm
    24.4 KB · Affichages: 69

job75

XLDnaute Barbatruc
Re : Calculer moyenne sous VBA

Re,

Dans ce fichier (2) les formules (en notation R1C1) sont plus simples :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n&
With [A1].CurrentRegion
  n = .Rows.Count
  With .Columns(2).Resize(, .Columns.Count - 1)
    .Rows(n + 5).FormulaR1C1 = "=AVERAGE(R2C:R" & n & "C)"
    .Rows(n + 6).FormulaR1C1 = "=STDEV.S(R2C:R" & n & "C)"
    .Rows(n + 5).Resize(2) = .Rows(n + 5).Resize(2).Value 'facultatif
  End With
End With
End Sub
A+
 

Pièces jointes

  • dutyfreeB(2).xlsm
    24.6 KB · Affichages: 54
Dernière édition:

job75

XLDnaute Barbatruc
Re : Calculer moyenne sous VBA

Re,

Pour terminer, sans formules mais avec une boucle :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim n&, col%
With [A1].CurrentRegion
  n = .Rows.Count
  For col = 2 To .Columns.Count
    .Cells(n + 5, col) = Application.Average(.Columns(col))
    .Cells(n + 6, col) = Evaluate("STDEV.S(" & .Columns(col).Address & ")")
  Next
End With
End Sub
Fichier (3).

A+
 

Pièces jointes

  • dutyfreeB(3).xlsm
    24.9 KB · Affichages: 71

job75

XLDnaute Barbatruc
Re : Calculer moyenne sous VBA

Re,

Eh non pas fini :rolleyes: S'il y a beaucoup de colonnes utiliser un tableau VBA (matrice) :

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim t, col%
With [A1].CurrentRegion
  t = .Rows(.Rows.Count + 5).Resize(2) 'matrice, plus rapide
  For col = 2 To .Columns.Count
    t(1, col) = Application.Average(.Columns(col))
    t(2, col) = Evaluate("STDEV.S(" & .Columns(col).Address & ")")
  Next
  .Rows(.Rows.Count + 5).Resize(2) = t
End With
End Sub
Fichier (4).

Edit : durées d'exécution sur Win 8 - Excel 2013 (hors rafraîchissement de l'écran) :

- fichier (1) => 0,51 milliseconde

- fichier (2) => 0,45 milliseconde

- fichier (3) => 1,50 milliseconde

- fichier (4) => 1,02 milliseconde

A+
 

Pièces jointes

  • dutyfreeB(4).xlsm
    25.3 KB · Affichages: 56
Dernière édition:

QI dhuitre

XLDnaute Junior
Re : Calculer moyenne sous VBA

Bonjour,j'suis pas sur de tout comprendre mais n'est-ce pas cette approche là que vous voulez ?

Code:
Function moy(plage As Range)
moy = Application.Average(plage)
End Function

puis dans une cellule vous tapez =moy("la plage que vous voulez calculez")
 
Dernière édition:

QI dhuitre

XLDnaute Junior
Re : Calculer moyenne sous VBA

Salutation job75, comment allez-vous ? Pour se fil de discussion, il ne s'agit pas de calculer une moyenne mais je pense arriver à integrer dans une cellule la formule moyenne via vba , en d'autres terme cela serait un code du genre

Code:
 range("U75").formula = "=average(plage)"

J'suis une quiche en vba alors j'ai essayé avec .formulalocal et .formula mais impossible d'écrire la fonction moyenne dans une cellule.
 

Discussions similaires

Réponses
3
Affichages
223