Bonjour à tous,
J'ai un petit soucis d'optimisation sur une macro qui copie/colle des ligne selon un critères vers les onglets correspondants (dédiés aux critères).
J'ai un dépassement de capacité, de plus pour le peu de ligne copiée, cela prends un temps fou.
ex: Si j'ai 'ADQ03' dans la colonne K alors copie/colle la ligne vers l'onglet ADQ03
J'ai un total de 11 feuilles:
- 1 feuille qui le résultat d'une extraction SQL (environ 200 000 lignes, 2 critères prennent 150 000 lignes)
- 10 feuilles dédiés aux critères (vierge donc en attente des données provenant de la feuille DATA
Alors bien sur je pourrais filtrer selon critère et ensuite copier/coller manuellement mais l'extraction se fait quotidiennement.
Voici (une partie) de ma macro (avec seulement 2 critères) :
En attente de vos idées, je vous souhaite une bonne journée
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
44
45
46
47 Sub Copy() Application.ScreenUpdating = False Dim i As Long Dim j As Integer Dim sh As Worksheet Dim feuillePrincipale As Worksheet Dim AQD03Sheet As Worksheet Dim QDR06acSheet As Worksheet Set feuillePrincipale = ThisWorkbook.Sheets("DATA") Set AQD03Sheet = ThisWorkbook.Sheets("AQD03") Set QDR06acSheet = ThisWorkbook.Sheets("QDR06ac") For Each sh In ThisWorkbook.Worksheets If sh.Name = "AQD03" Then i = 2 j = 2 While Not IsEmpty(feuillePrincipale.Cells(i, 1)) If feuillePrincipale.Cells(i, 11).Value Like "AQD03*" Then feuillePrincipale.Cells.Rows(i).EntireRow.Copy AQD03Sheet.Rows(j) j = j + 1 End If i = i + 1 Wend End If If sh.Name = "QDR06ac" Then i = 2 j = 2 While Not IsEmpty(feuillePrincipale.Cells(i, 1)) If feuillePrincipale.Cells(i, 11).Value Like "QDR06ac*" Then feuillePrincipale.Cells.Rows(i).EntireRow.Copy QDR06acSheet.Rows(j) j = j + 1 End If i = i + 1 Wend End If Next Application.ScreenUpdating = True End Sub
Partager