... suite ...
Si on est ok avec les définitions précédentes, la requête d'écrit plutôt :
Sub Bilan(Optional mois As Byte = 0)
Dim Dt1 As Date, Dt2, Req As String, T As Variant, T2 As Variant
Dim An As Integer, lg As Integer, i As Integer, j As Integer, idx As Integer
An = Sheets("Bilan").Range("G1").Value
Dt1 = DateSerial(An, mois, 1) ' début du mois sélectionné
Dt2 = IIf(mois = 0, Date, DateAdd("d", -1, DateSerial(An, mois + 1, 1))) ' fin du mois sélectionné
Req = "SELECT `Material`," & _
" SUM (IIF (YEAR(`Created on`) = " & An - 2 & ",`Billed Quantity`,0) ) AS Moins2," & _
" Moins2/12," & _
" SUM (IIF (YEAR(`Created on`) = " & An - 1 & ",`Billed Quantity`,0) ) AS Moins1," & _
" Moins1/12," & _
" SUM (IIF (`Created on` BETWEEN " & CLng(DateAdd("d", 1, DateAdd("yyyy", -1, Dt1))) & _
" AND " & CLng(Dt2) & ",`Billed Quantity`,0) ) As A," & _
" A/12," & _
" SUM (IIF (`Created on` BETWEEN " & CLng(DateAdd("d", 1, DateAdd("m", -5, Dt1))) & _
" AND " & CLng(Dt2) & ",`Billed Quantity`,0) ) AS DER6," & _
" DER6/6," & _
" SUM (IIF (`Created on` BETWEEN " & CLng(DateAdd("m", -2, Dt1)) & _
" AND " & CLng(Dt2) & ",`Billed Quantity`,0) ) AS DER3," & _
" DER3/3," & _
" SUM (IIF (YEAR(`Created on`) = " & Year(Date) & _
" AND MONTH(`Created on`)=" & mois & ",`Billed Quantity`,0) ) " & _
" FROM [Data$] " & _
" GROUP BY `Material`"
Avec calcul du début ET de la fin du mois en cours
Est-ce que c'est mieux?
Pierre