problème pour calculer une moyenne

steph751

XLDnaute Nouveau
Bonjour, j'aimerais créer un code VBA qui permette de calculer des moyennes par année

par exemple :
dans la colonne A il y a l'année et dans la B il y a des valeurs :

A B
2002
2002
2002
2002
2002
2002
2003
2003
2003
2003
2003
2004
2004
2004


je veux calculer la moyenne en 2002 -2003 et 2004
j'ai essayer un truc comme ça (pour l'année 2002 par exemple) mais ça marche pas :confused: (ça doit venir du if):

If Range("B2:B65536").Value = "2002" Then Range("C2").Value = "= AVERAGE(B2:B65536)"
 

ledzepfred

XLDnaute Impliqué
Re : problème pour calculer une moyenne

Bonsoir,

si j'ai bien compris tu veux calculer une moyenne des valeurs de la colonnes B en fonction de l'année en colonne A, il faut donc combiner un somme.si que l'on divise par un nb.si, le tout en vba donnerait un truc du genre :

Code:
Sub Moyenne()
annee = InputBox("Quelle année (AAAA)? ", "Moyenne annuelle")
moy = Format(Application.WorksheetFunction.SumIf(Columns(1), annee, Columns(2)) / Application.WorksheetFunction.CountIf(Columns(1), annee), "0.00")
MsgBox ("La moyenne de l'année " & annee & " est de " & moy & ".")
End Sub

Ce code donne au travers d'un msgbox, la moyenne arrondie à deux chiffres après la virgule en fonction de l'année que l'on renseigne via la boite de dialogue

A adapter à ton pb bien sur

A+
 

ledzepfred

XLDnaute Impliqué
Re : problème pour calculer une moyenne

re....

pourquoi le faire en vba, une formule suffit.

A+

Edit : voir fichier joint
 

Pièces jointes

  • Classeur1.xls
    13.5 KB · Affichages: 60
  • Classeur1.xls
    13.5 KB · Affichages: 60
  • Classeur1.xls
    13.5 KB · Affichages: 73
Dernière édition:

steph751

XLDnaute Nouveau
Re : problème pour calculer une moyenne

ok merci, grace à ta formule j'ai pu trouver le code avec l'enregistreur de macro.

Je dois aussi faire afficher la valeur maximum et minimum de chaque année, je ne trouve pas la formule .
 

ledzepfred

XLDnaute Impliqué
Re : problème pour calculer une moyenne

bonsoir roger, re steph,

une solution un peu alambiquée à adapter à ton fichier permettant d'obtenir le min et le max par pour 2002, 2003 et 2004

Code:
Sub minmax()
Dim plage As Range
Application.ScreenUpdating = False
If ActiveSheet.AutoFilterMode = False Then
Range("A1:B1").AutoFilter
Else: If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
End If
Selection.AutoFilter Field:=1, Criteria1:="2002"
Set plage = Range("B2:B" & [B65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
MsgBox Application.WorksheetFunction.min(plage)
MsgBox Application.WorksheetFunction.Max(plage)
Selection.AutoFilter Field:=1, Criteria1:="2003"
Set plage = Range("B2:B" & [B65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
MsgBox Application.WorksheetFunction.min(plage)
MsgBox Application.WorksheetFunction.Max(plage)
Selection.AutoFilter Field:=1, Criteria1:="2004"
Set plage = Range("B2:B" & [B65536].End(xlUp).Row).SpecialCells(xlCellTypeVisible)
MsgBox Application.WorksheetFunction.min(plage)
MsgBox Application.WorksheetFunction.Max(plage)
ActiveSheet.AutoFilterMode = False
End Sub

Il est possible d'optimiser ce code car les années sont inscrites en dur dans le code

A+
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : problème pour calculer une moyenne

Bonjour à tous,

S'il n'y avait que lui.................

D'autant qu'il était encore connecté à 11h35, fait ses emplettes sans doute, comme beaucoup trop maintenant...

Il arrivera un jour où personne ne répondra à personne...

Que le WE soit bon malgré tout.

Jean-Pierre
 

nolich

XLDnaute Occasionnel
Re : problème pour calculer une moyenne

Re et salut Jean-Pierre :)

jeanpierre à dit:
S'il n'y avait que lui.................

Il arrivera un jour où personne ne répondra à personne...

Que le WE soit bon malgré tout.

C'est vrai qu'il arrive de ne pas avoir de retour, mais je trouve, bien qu'étant moins habitué que toi au forum, que dans l'ensemble, il y a beaucoup de personnes reconnaissantes, fort heureusement :)

Mais c'est vrai qu'on remarque plus celles (moins nombreuses) et ceux qui ne signalent jamais si la solution proposée leur convient. C'est bien dommage car on finit par les repérer ;) Et ce sont leurs futures questions qui ne recevront plus de réponses ni d'intérêt par la suite :rolleyes:

Ceci dit, bon week-end aussi :)

@+

EDIT : steph751 a des exercices à faire en VBA et tout ce qui lui convient, apparemment, c'est d'écrire, via VBA, une formule dans une cellule :rolleyes: (niark !)
 
Dernière édition:

ledzepfred

XLDnaute Impliqué
Re : problème pour calculer une moyenne

Bonsoir à tous,

et merci pour l'avertissement Nolich! Je trouve particulièrement regrettable cette attitude de poster et de ne pas remercier. On croit aider quelqu'un de sincère et on se retrouve avec un suceur de roue, c'en est décourageant! M'enfin, ainsi va le monde!
Heureusement que tous ne sont pas comme ça.

Bon week-end à tous (sauf aux suceurs de roue!)
 

jeanpierre

Nous a quitté
Repose en paix
Re : problème pour calculer une moyenne

Re à tous, ledzepfred,

J'aime bien ton expression, elle me rappelle de bons souvenirs...(cyclisme)

Mais il est vrai que les sangsues et autres vampires agacent un peu.

Bon WE.

Jean-Pierre
 

ledzepfred

XLDnaute Impliqué
Re : problème pour calculer une moyenne

Bonsoir jeanpierre :)

j'avais pensé aussi à "chewing gum sous une chaussure" (ça aussi c'est du vécu!) mais finalement suceur de roue est plus approprié

Heureusement que l'on croise plus d'organismes symbiotiques que de parasites sur ce forum!

bonne nuit
 

Discussions similaires

Statistiques des forums

Discussions
312 520
Messages
2 089 285
Membres
104 083
dernier inscrit
hecko