Moyenne avec plage variable

Résolu
bobwind Messages postés 2 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 17 juin 2010 - 16 juin 2010 à 11:42
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 17 juin 2010 à 19:54
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

bobwind Messages postés 2 Date d'inscription dimanche 31 janvier 2010 Statut Membre Dernière intervention 17 juin 2010
17 juin 2010 à 13:09
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!
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2010 à 11:40
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2010 à 11:54
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.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2010 à 11:57
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
17 juin 2010 à 19:54
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.
0
Rejoignez-nous