Sub test()
Dim t
Dim i As Long
Dim l As Long
Dim Myrange As Range, c As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
l = 100000
Set Myrange = Range("A1:A" & l)
t = Timer
Myrange = Evaluate("Row(1:" & l & ")")
Debug.Print "Avec Evaluate,Temp écoulé : "; Timer - t
t = Timer
For Each c In Myrange
c.Value = c.Row
Next
Debug.Print "Avec For each, Temp écoulé : "; Timer - t
t = Timer
For i = 1 To l
Range("A" & i).Value = i
Next
Debug.Print "Avec Range, Temp écoulé : "; Timer - t
t = Timer
For i = 1 To l
Cells(i, 1).Value = i
Next
Debug.Print "Avec Cells, Temp écoulé : "; Timer - t
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Sub test1()
Dim t, t1, t2
Dim i As Long
Dim l As Long
Dim Myrange As Range, c As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Debug.Print "____________________________________"
Set Myrange = Range("A1:A100000")
t = Timer
Myrange = Evaluate("Row(1:100000)")
Debug.Print "Avec Evaluate,Temp écoulé : "; Timer - t
t = Timer
For Each c In Myrange
c.Value = c.Row
Next
Debug.Print "Avec For each, Temp écoulé : "; Timer - t
t = Timer
For i = 1 To 100000
Range("A" & i).Value = i
Next
Debug.Print "Avec Range, Temp écoulé : "; Timer - t
t = Timer
For i = 1 To 100000
Cells(i, 1).Value = i
Next
Debug.Print "Avec Cells, Temp écoulé : "; Timer - t
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Voilà les résultats :
Avec Evaluate,Temp écoulé : 0,1796875
Avec For each, Temp écoulé : 4,296875
Avec Range, Temp écoulé : 5,921875
Avec Cells, Temp écoulé : 4,664063
____________________________________
Avec Evaluate,Temp écoulé : 0,1796875
Avec For each, Temp écoulé : 4,234375
Avec Range, Temp écoulé : 6,046875
Avec Cells, Temp écoulé : 4,664063
Le grand gagnant pour remplir des cellules c'est bien avec Evaluate.
Pour les autres cela ce suit dans un mouchoir de poche, Cells est un peu plus rapide mais tout de même pas deux fois moins....
Donc pour moi n'utilisant pas de gros fichiers mon choix se porte sur Range, les plages nommées, et les boucle For Each qui sont plus parlantes
For Each IdClient in Range("tab_Clients[ID]")
if Range("TotalMois") = ...
'...
Et plus parlant qu'un
For i = 1 To Cells(Rows.Count, 4).End(xlUp).Row
If Cells(12, 4) = ...
'...
Encore une fois ceci est, et reste, mon avis personnel.