Diminuer le temps d’exécution d'une macro
Bonjour,
Je traite actuellement une base de trois tables : ProduitA, ProduitB et Relations.
Je souhaite déterminer les ProduitsA qui ont les mêmes relations avec des ProduitsB. Pour cela, j'ai concocté ce code VBA :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| Sub gamme()
Dim a, b, c As String
Dim k As Integer
Dim results As Worksheet
k = 1
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("rel")
LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
End With
Set results = Sheets.Add(After:=Sheets(Sheets.Count))
results.Name = "results"
With results
.Cells(1, 1) = "pv_sku"
.Cells(1, 2) = "concat"
End With
For i = 2 To LastLig
With ThisWorkbook.Worksheets("rel")
a = .Cells(i, 2)
b = .Cells(i, 1)
c = .Cells(i - 1, 2)
End With
With results
If a = c Then
.Cells(k, 2) = .Cells(k, 2) & b
Else
k = k + 1
.Cells(k, 1) = a
.Cells(k, 2) = b
End If
End With
Next i
End Sub |
Mon problème : Ce code me permet de traiter des feuilles de relations d'environ 20 000 à 40 000 sans problèmes. Cependant, dès que je dépasse 40 000 cela devient très long ou excel plante.
Du coup, premièrement, avez-vous des méthodes pour permettre de diminuer le temps d'exécution d'une macro ? (une certaine mise en forme, l'utilisation de fonctions plutôt que d'autres, etc...)
Deuxièmement, pensez-vous qu'il est possible de faire le même traitement avec du SQL ? (en effet, j'utilise PostgreSQL pour les grosses tables)
Merci d'avance
Cordialement, idate.