J'essaie de créer une macro qui itère sur toutes les cellules utilisées dans une feuille de calcul et renvoie la moyenne. L'objectif final est d'obtenir la valeur moyenne des nombres dans chaque feuille de calcul et de produire un graphique linéaire avec les moyennes.Excel VBA- Moyenne de toutes les cellules numériques dans une feuille de calcul
J'ai de la difficulté à comprendre comment procéder. Ma stratégie en ce moment (qui est probablement sous-optimale) implique a) de trouver la première rangée avec des données numériques; b) trouver la première colonne avec des données numériques; c) trouver la dernière rangée avec des données numériques; d) trouver la dernière colonne avec des données numériques; d) créer une plage sur ces cellules; e) la moyenne de la gamme
Voici mon code actuel
Sub AverageAllNumbers()
Dim fRow As Long
Dim fColumn As Long
Dim lRow As Long
Dim lColumn As Long
Dim dblAverage As Long
Dim averageRange As Range
fRow = Cells.Find(What:=Number, SearchOrder:=xlByRows, SearchDirection:=xlNext).Row
fColumn = Cells.Find(What:=Number, SearchOrder:=xlByColumns, SearchDirection:=xlNext).Column
lRow = Cells.Find(What:=Number, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lColumn = Cells.Find(What:=Number, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
averageRange = Range(Cells(fRow, fColumn), Cells(lRow, lColumn))
dblAverage = Application.WorksheetFunction.Average(averageRange)
MsgBox dblAverage
End Sub
Presque rien works-- « lColumn » produit 16384 et Frow et fColumn produit 1, ce qui est même pas une cellule utilisée dans ma feuille de calcul.
Que se passe-t-il?
Vous réalisez que vous pouvez voir la moyenne dans la barre d'état? – pnuts
@pnuts déjà mentionné dans une réponse supprimée. Une alternative simple peut-être juste 'Msgbox application.average (cells)' qui je pense ne s'applique qu'à la gamme utilisée. –
pourquoi ne pas utiliser '= average (a: xfd)' ou 'application.worksheetfunction.average (a: xfd)' –