bobwind
Messages postés2Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention17 juin 2010
-
16 juin 2010 à 11:42
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 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!!!
bobwind
Messages postés2Date d'inscriptiondimanche 31 janvier 2010StatutMembreDernière intervention17 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])"
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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
us_30
Messages postés2065Date d'inscriptionlundi 11 avril 2005StatutMembreDernière intervention14 mars 201610 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.