Bravo Pascal !
L'idée d'utiliser 2 tableaux est super! Du coup j'ai ammélioré encore en ne faisant qu'une ligne de programe dans la boucle.
Il faut donc avoir 2 tableaux un pour les données d'entrée l'autre pour les résultats. Puis ensuite copier le tableau résultats sur les plages.
Au niveau du temps, si l'on ne fait qu'un seul calcul avant de recopier les données sur une plage, on ne gagne pas par rapport a une formula
R1C1 sur la plage "c", car lire les données dans le tableau variant prend du temps. Par contre, sur plusieurs résultats, cela pourrait être interéssant , les données n'étant lues qu'une fois et l'écriture étant trés rapide.
As-tu d'autres commentaires ?
Merci beaucoup Pascal,
A la prochaine ...
Sub tabl2() ' cumul besoin : colonne a ="article", colonneb = "besoin", colonne c = "cumul"
Dim nl As Long, i As Long, tabl() As Variant, tabl2() As Variant, deb As Date
Application.ScreenUpdating = False
nl = Cells(1, 1).CurrentRegion.Rows.Count
deb = Timer
tabl = Range("a1:b" & nl)
tabl2 = Range("c1:c" & nl)
For i = 2 To nl
tabl2(i, 1) = IIf(tabl(i, 1) = tabl(i - 1, 1), tabl(i, 2) + tabl2(i - 1, 1), tabl(i, 2))
Next i
Range("c1:c" & nl) = tabl2
MsgBox Format(Timer - deb, "0.00")&"s"
End Sub