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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Partager