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"
Tableau dans un deuxieme onglet ou sont reprises les données "Projection"
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
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"
Tableau dans un deuxieme onglet ou sont reprises les données "Projection"
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