Bonsoir,
En utilisant un bloc With, tu allèges le code, et surtout tu accélères...
With ThisWorkbook.Worksheets("RNC21")
For i = 2 To derligne
.Cells(i, 1).Value = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells(i, 4)), .Cells(i, 4))
Next i
End With
Nb- Si tu n'utilises qu'un seul classeur, tu peux te dispenser de ThisWorkbook.
Application.CountIf est une simplification de Application.WorksheetFunction.CountIf...
En éliminant Application plutôt que WorksheetFunction a l'avantage dès la frappe du point, l'assistant VBA liste les fonctions, ce qui peut faire gagner du temps car on n'aura généralement pas à taper le nom de la fonction en entier...
Si on utilise un tableau, au lieu d'affecter à la cellule, on affecte à un tableau préalablement dimensionné sur le nombre de lignes :
Dim tablo(2 To derligne, 0)
With ThisWorkbook.Worksheets("RNC21")
For i = 2 To derligne
tablo(i, 0) = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells(i, 4)), .Cells(i, 4))
Next i
.Cells(2, 1).Resize(derligne - 1).Value = tablo
End With
nb- Dimensionner de 2 à derligne permet de faire correspondre les indices avec les index de ligne, pas de correctif à apporter...
La 2e dimension évite d'avoir le tableau à transposer lors de l'affectation.
Cordialement.