Bonjour le Forum,
Peut-on faire mieux en temps d'exécution en améliorant ce code ?
j'ai plus de 50000 lignes à traiter, l'exécution du code ci-dessous est très longue
Sub ReportDonnees()
Dim tabRef() As String
Dim i As Integer, j As Integer
Dim Lig1 As Integer, Lig2 As Integer, N As Integer
Application.ScreenUpdating = False
With Sheets("analyse")
Lig1 = .Range("A65536").End(xlUp).Row + 1
.Range("A2:I" & Lig1).ClearContents
End With
With Sheets("import")
Lig2 = .Range("A65536").End(xlUp).Row
ReDim tabRef(Lig2, 7)
For i = 1 To Lig2 - 1
tabRef(i, 1) = CStr(.Cells(i + 1, 3))
tabRef(i, 2) = CStr(.Cells(i + 1, 4))
tabRef(i, 3) = CStr(.Cells(i + 1, 5))
tabRef(i, 4) = CStr(.Cells(i + 1, 7))
tabRef(i, 5) = CStr(.Cells(i + 1, 8))
tabRef(i, 6) = CStr(.Cells(i + 1, 9))
tabRef(i, 7) = CStr(.Cells(i + 1, 10))
Next i
End With
With Sheets("analyse")
For i = 1 To Lig2 - 1
If Application.CountIf(Range(.Cells(2, 1), .Cells(Lig2, 1)), tabRef(i, 1)) = 0 Then
.Cells(i + 1 - N, 1) = tabRef(i, 1)
.Cells(i + 1 - N, 2) = tabRef(i, 2)
.Cells(i + 1 - N, 3).Value = CDbl(tabRef(i, 3))
.Cells(i + 1 - N, 4).Value = CDbl(tabRef(i, 4))
.Cells(i + 1 - N, 5) = tabRef(i, 5)
.Cells(i + 1 - N, 6) = tabRef(i, 6)
.Cells(i + 1 - N, 7) = tabRef(i, 7)
Else
For j = 2 To i
If .Cells(j, 1) = tabRef(i, 1) Then
.Cells(j, 3) = CDbl(.Cells(j, 3)) + CDbl(tabRef(i, 3))
.Cells(j, 4) = CDbl(.Cells(j, 4)) + CDbl(tabRef(i, 4))
N = N + 1
End If
Next j
End If
Next i
End With
Application.ScreenUpdating = True
End Sub