Transposer un formulaR1C1 vers un WorksheetFunction

bonjour,

j'aimerais transposer cette partie de code qui envoi une formule dans une cellule à un un application.worksheetFunction.SumIfs qui ferait le calcul et renverrai le résultat dans la cellule pour optimiser ces calculs qui peuvent se faire sur énormément de données ( parfois jusqu'à 230 000 lignes )

Cells(a, dercolonn + 1).FormulaR1C1 = _
        "=SUMIFS(R4C" & dercolonn & ":RC" & dercolonn & ",R4C2:R" & a & "C2,"">=""&TIME(HOUR(R" & a & "C2),MINUTE(R" & a & "C2),SECOND(R" & a & "C2))-TIME(0,0," & choixsec & ")+DATE(YEAR(R" & a & "C2),MONTH(R" & a & "C2),DAY(R" & a & "C2)))"
 

j'ai testé

Cells(a, dercolonn+1) =application.WorksheetFunction.SumIfs(range(cells(4,dercolonn),cells(a,dercolonn)),range(cells(4,2),cells(a,2)), ">=" & time(hour(cells(a,2)),minute(cells(a,2)),second(cells(a,2)) - (time(0,0,choixsec)) + (date(year(cells(a,2)),month(cells(a,2)),day(cells(a,2)))))

mais ça bloque sur Year me disant qu'il manque ) mais je n'arrive pas à déterminer l'emplacement de ce qui manque ou alors il manque autre chose ? ou le code pose problème, sans parler de la parenthèse qui manque ?!

si vous pouviez m'éclairer svp ? Merci par avance

voici mon code principal permettant un calcul de données:

Sub glissant()

Dim ShtName As String, NameFich As String, chemin As String
Dim a As Long, derligne As Long

chemin = Workbooks(ActiveWorkbook.Name).Path
NameFich = Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 5)

ActiveWorkbook.SaveAs Filename:= _
       chemin & "\" & NameFich & ".xlsm", FileFormat _
      :=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

ShtName = ActiveSheet.Name
derligne = Sheets(ShtName).Cells(Rows.Count, 11).End(xlUp).Row
dercolonn = Sheets(ShtName).Cells(1, Columns.Count).End(xlToLeft).Column

choixsec = InputBox("Combien de secondes glissante (1 à 59) ? ", "Calcul glissant")

For a = 5 To derligne

    Cells(a, dercolonn + 1).FormulaR1C1 = _
        "=SUMIFS(R4C" & dercolonn & ":RC" & dercolonn & ",R4C2:R" & a & "C2,"">=""&TIME(HOUR(R" & a & "C2),MINUTE(R" & a & "C2),SECOND(R" & a & "C2))-TIME(0,0," & choixsec & ")+DATE(YEAR(R" & a & "C2),MONTH(R" & a & "C2),DAY(R" & a & "C2)))"

Next a

MsgBox "Calcul effectué avec succès !", vbOKOnly
ActiveWorkbook.Save

End Sub
Cells(a, dercolonn+1) =application.WorksheetFunction.SumIfs _
(range(cells(4,dercolonn),cells(a,dercolonn)), _
range(cells(4,2),cells(a,2)), _
">=" & time(hour(cells(a,2)),minute(cells(a,2)),second(cells(a,2)) _
- (time(0,0,choixsec)) _
+ (dateserial(year(cells(a,2)),month(cells(a,2)),day(cells(a,2)))))

en passant de date à dateserial cela ne bloque plus par contre en lançant le code j'ai droit à un erreur d'exécution '13' Incompatibilité de type

une idée svp ?

en revenant à mon code et prenant en compte timeserial j'en suis à (en simplifiant un peu pour plus de visibilité)

Dim a As Long, derligne As Long, dercolonn As Long
Dim criteretime As Double

derligne = Sheets(ShtName).Cells(Rows.Count, 1).End(xlUp).Row
dercolonn = Sheets(ShtName).Cells(1, Columns.Count).End(xlToLeft).Column

choixsec = 10

criteretime = TimeSerial(Hour(Cells(a, 2)), Minute(Cells(a, 2)), (Second(Cells(a, 2)) - choixsec)) + (DateSerial(Year(Cells(a, 2)), Month(Cells(a, 2)), Day(Cells(a, 2))))

For a = 5 To derligne

Cells(a, dercolonn + 1) = Application.WorksheetFunction.SumIfs _
(Range(Cells(4, dercolonn), Cells(a, dercolonn)), _
Range(Cells(4, 2), Cells(a, 2)), _
">=" & criteretime)

Next a

chacun des éléments contient en faisant pas à pas les bonne données mais le résultat obtenus est 0 à chaque calcul...il ne fait pas la somme ?!

Rechercher des sujets similaires à "transposer formular1c1 worksheetfunction"