VBA - sumifs -somme multicriteres d un tableau

fredm

XLDnaute Nouveau
Bonjour à tous,

J'ai un tableau ("Monthly Hours") avec plusieurs informations concernant différentes machines de différents clients avec des heures machines réalisées par mois, et je voudrais être capable de faire dans un deuxième tableau ("projection") la somme des heures propres à un client et sur une période donnée (la période est définie dans "projection" en cellules C1 et E1) , par type de machines, puis par catégorie.

Tableau dont sont extraites les donnees "Monthly Hours"
upload_2018-9-13_14-18-26.png


Tableau dans un deuxieme onglet ou sont reprises les données "Projection"
upload_2018-9-13_14-15-22.png


Je veux effectuer ces calculs en VBA car les tableaux peuvent être ajournées régulièrement, et l'utilisation de formules dans excel n'est pas pratique pour cela.

Cependant, n'étant pas un expert en VBA, je le conçois que j'utilise peut-etre une methode archaique.

J'utilise un sumifs pour calculer les sommes aux critères que je souhaite, mais je me rends compte de deux problèmes :
1. Cela calcul la somme que pour le mois du début de la période (ici, mars 2018) et non pas sur toute la période.
2. Je n'arrive à avoir la somme des données que pour le premier critère "machine type", mais pas pour le second critère "category"

La ligne de code relative à mon sumifs se trouve en rouge dans le code ci dessous



Sub test()
'
' test Macro
'

'
Dim i, j, mons, monsend, years, yearend, colstart, colend, nbrcolsumif, yeartest As Integer
Dim condition As Range
Dim startdate, enddate As Date

col = 14
colstart = 14
colend = 14
startdate = Sheets("Projection").Cells(1, 3) ' date de début de la periode voulue
enddate = Sheets("Projection").Cells(1, 5) ' date de fin de la periode voulue

mons = Month(startdate)
years = year(startdate)
monsend = Month(enddate)
yearend = year(enddate)


Sheets("Monthly Hours").Activate
Do While (years <> year(Sheets("Monthly Hours").Cells(4, colstart).value) Or mons <> Month(Sheets("Monthly Hours").Cells(4, colstart).value))

colstart = colstart + 1
Loop



While (yearend <> year(Sheets("Monthly Hours").Cells(4, colend).value) Or monsend <> Month(Sheets("Monthly Hours").Cells(4, colend).value))

colend = colend + 1

Wend



i = 3
j = 2
While Not IsEmpty(Sheets("Projection").Cells(2, j))
While Not IsEmpty(Sheets("Projection").Cells(i, 1))

nbrcolsumif = colend - colstart

Sheets("Projection").Cells(i, j).value = Application.WorksheetFunction.SumIfs(Sheets("Monthly Hours").Range(Cells(5, colstart), Cells(1048576, colend)), Sheets("Monthly Hours").Range(Cells(5, 4), Cells(1048576, 4 + nbrcolsumif)), Sheets("Projection").Cells(i, 1), Sheets("Monthly Hours").Range(Cells(5, 1), Cells(1048576, 1 + nbrcolsumif)), Sheets("Projection").Cells(2, j))

i = i + 1
Wend
j = j + 1
i = 3
Wend
End Sub
 

Pièces jointes

  • upload_2018-9-13_14-9-14.png
    upload_2018-9-13_14-9-14.png
    53.1 KB · Affichages: 36
  • upload_2018-9-13_14-10-43.png
    upload_2018-9-13_14-10-43.png
    16 KB · Affichages: 34
  • upload_2018-9-13_14-13-23.png
    upload_2018-9-13_14-13-23.png
    12.1 KB · Affichages: 32

Discussions similaires