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 : 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
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.