[résolu] vba - calcul via Excel sur cellules disjointes
Bonjour,
J'essaie de faire une opération peut-être un peu complexe via vba, qui se décompose en plusieurs parties:
-rechercher via une boucle for les cellules dans une colonne remplissant une certaine condition, et ajouter toutes ces cellules dans un objet range via la fonction Union
-calculer la médiane et la moyenne de l'objet range via Excel (donc via Application.WorksheetFunction.Average)
Voici le code:
Malheureusement, je n'arrive pas à aller bien loin avec ce code.
La fonction union semble marcher, mais je ne sais pas si la fonction Application.WorksheetFunction.Median peut s'appliquer à un objet range de cellules discontinues.
L'objectif est bien sûr de calculer la moyenne et la médiane uniquement de certaines cellules répondant à un critère spécifique, et donc je suis conscient que d'autres méthodes existent, cependant celle-ci me semblait assez joli, et donc si qq a une idée pour m'aider à la faire fonctionner, je suis preneur!
Merci!
Haleakala
Bonjour,
J'essaie de faire une opération peut-être un peu complexe via vba, qui se décompose en plusieurs parties:
-rechercher via une boucle for les cellules dans une colonne remplissant une certaine condition, et ajouter toutes ces cellules dans un objet range via la fonction Union
-calculer la médiane et la moyenne de l'objet range via Excel (donc via Application.WorksheetFunction.Average)
Voici le code:
Code:
Dim rgConcernedCells(0 To 3, 0 To 23) As Range 'variable accumulant les cellules répondant au critère donné (24 différents critères)
Dim rgProv As Range
Dim rgCellProv As Range
Dim sinDelayAverage(0 To 3, 0 To 5), sinDelayMedian(0 To 3, 0 To 5) As Single
For i = iRowFirstAction To iProvLengh + iRowFirstAction - 1
dtActionDate(0) = owActions.Cells(i, iColumnInitialDueDate)
iProvYear = Year(dtActionDate(0))
iProvMonth = Month(dtActionDate(0))
iProvArrayItem = (iProvYear - (iLastDateYear - 1)) * 11 + iProvMonth
For j = 0 To 3
Set rgCellProv = owActions.Cells(i,iColumCalculDelayClosedActions_ActionSheet)
If dtFirstDate < dtActionDate(0) And dtActionDate(0) < dtLastDate _
And rgCellProv <> "" Then
If rgConcernedCells(j, iProvArrayItem) Is Nothing Then
Set rgConcernedCells(j, iProvArrayItem) = rgCellProv
Else
Set rgConcernedCells(j, iProvArrayItem) = Union(rgConcernedCells(j, iProvArrayItem), rgCellProv)
End If
End If
Next j
Next i
For j = 0 To 3
For i = 0 To 5
rgProv = rgConcernedCells(j, iFirstDateMonth + i)
sinDelayAverage(j, i) = Application.WorksheetFunction.Average(owActions.rgProv)
sinDelayMedian(j, i) = Application.WorksheetFunction.Median(owActions.rgProv)
Next i
Next j
Malheureusement, je n'arrive pas à aller bien loin avec ce code.
La fonction union semble marcher, mais je ne sais pas si la fonction Application.WorksheetFunction.Median peut s'appliquer à un objet range de cellules discontinues.
L'objectif est bien sûr de calculer la moyenne et la médiane uniquement de certaines cellules répondant à un critère spécifique, et donc je suis conscient que d'autres méthodes existent, cependant celle-ci me semblait assez joli, et donc si qq a une idée pour m'aider à la faire fonctionner, je suis preneur!
Merci!
Haleakala
Dernière édition: