Moyenne avec plage variable [Résolu]

Signaler
Messages postés
2
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
17 juin 2010
-
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
Bonjour à tous,

Je me permets de poster mon problème après de nombreuses heures de prise de tête et de recherche sur le net!!!
Je programme en VBA pour Excel et je souhaites créer une macro me permettant d'effectuer une moyenne sur une plage variable.
Je m'explique: Sur une feuille, j'insère des lignes après un traitement. Je ne connais pas le nombre de ligne que j'insère. Dans ma colonne A, j'ai le nom des mes produits et dans les autres des données correspondant à ces produits. Je fais un tri sur cette liste pour regrouper mon données par produits. Je souhaites par la suite faire la moyenne de mes données par type de produits puis copier cette moyenne dans une autre feuille.
J'ai essayé plusieurs solutions mes je galère.
Je pense qu'il faut que je créée une plage de cellules avec l variable comptant mon nombre de produits puis faire un average(plage) mais je n'y arrive pas!!!

J'espère que quelqu'un pourra m'éclairer!!

Merci d'avance!

5 réponses

Messages postés
2
Date d'inscription
dimanche 31 janvier 2010
Statut
Membre
Dernière intervention
17 juin 2010

Merci bien pour ces réponses!
Et effet quelques heures après avoir mis ce post, j'ai trouvé la fonction moyenne.si qui marche très bien!
Voici mon de code pour ceux qui veulent:

For iii = 2 To Sheets("Suivi de traitement").Range("A65536").End(xlUp).Row
'Moy Rebut
Sheets("Résultat").Range("C2").FormulaR1C1 = "=AVERAGEIF('Suivi de traitement'!RC[-2]:R[65536]C[-2],""BOIS ISOLANT"",'Suivi de traitement'!RC[-1]:R[65536]C[-1])"

Merci pour l'aide!
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Bonjour,

Et en utilisant les fonctions du tableur SOMME.SI et NB.SI, on obtient une "moyenne.si" qui doit répondre au problème posé.

Amicalement,
Us.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Pour une fonction personnalisée "moyennesi", voici le code que je viens de faire :

Function MoyenneSi(ByVal Plage As Range, ByVal Critere As String, Optional ByVal SommePlage As Range) As Double
' MOYENNE.SI

' Paramètres
    Dim Som As Double
    Dim Nb As Double

' Récupèrations des valeurs par Worksheetfunction
    Som = WorksheetFunction.SumIf(Plage, Critere, SommePlage)
    Nb = WorksheetFunction.CountIf(Plage, Critere)

' Renvoi
    MoyenneSi = Som / Nb

End Function


Ce code fonctionne à la manière de SOMME.SI

Exemple dans la barre de formule :

=MOYENNESI(plage, critère, [Somme_plage])

Amicalement,
Us.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
D'ailleurs, cette instruction existe dans la version 2010 d'Excel... ce qui n'était pas le cas pour les versions 2003 et antérieurs...

Us.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
Hum...

Range("A65536").End(xlUp).Row => c'est surtout intelligent pour les versions 2003 et antérieurs... et "moyenne.si" pour les versions 2007 et 2010... chercher l'erreur...

donc, ton code n'a pas la rigueur nécessaire... mais il est juste fonctionnel.

Amicalement,
Us.