Bonjour à tous,
Je dois récupérer des une DB de 200.000 lignes les données selon certains critères. Pour le moment j'utilise ce code pour récupérer le nombre de cas selon les trois critères :
Mais comme je dois le faire pour 300 agents, cela risque de durer. N'est-il pas possible d'avoir le résultat sans passer par toutes les étapes. Je pensais que le code suivant pourrait aider mais je n'arrive pas à le comprendre intégralement et donc pour l'adapter au besoin, c'est compliqué.
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 Sub FilTreElabore() Dim shTable: Set shTable = Sheets("ruwe data") Dim shFilters: Set shFilters = Sheets("Filters") With shTable Dim LastRow: LastRow = .Range("A1").End(xlDown).Row Dim LastCol: LastCol = .Range("A1").End(xlToRight).Column 'set columns Dim col, colAction, colFile, colAgt, colVerif, colWarning Dim colSubmit, colDone, colDone2 For col = 1 To LastCol Select Case .Cells(1, col) Case "Maand": colMois = col Case "teller": colCompteur = col Case "Bureau": colBur = col Case "Agent": colAgt = col Case "Dossiernummer": colDossNum = col Case "Type": colType = col Case "Dubbele verificatie": colDubVer = col Case "Classificatie": colClass = col Case "Start datum": colStDat = col Case "Eind datum": colFinDat = col Case "Status": colstatus = col Case "Agent afhandeling (status)": colAgTrait = col Case "Datum afhandeling (status)": colDatTrait = col Case "doorlooptijd DB/verif": colTpsTrait = col Case "doorlooptijd verificator": colTpsVerif = col Case "to do verif": colAVer = col Case "to do dossier": colDossAF = col Case "Team": colTeam = col End Select Next End With 'advanced filters Dim R Sheets("Filters").Activate 'Vider la table de réception et filtre Range("2:6").Clear Range("A11:N" & Range("A10").End(xlDown).Row).Clear With shFilters R = 2 sDone = "Notificaties" If sDone = "Notificaties" Then 'only "Soumis" .Cells(R, colAgt) = "Agent" .Cells(R, colType) = "Notificaties" .Cells(R, colstatus) = "Handled" End If End With With shTable R = shFilters.Range("A1").CurrentRegion.Rows.Count .Range(.Cells(1, 1), .Cells(LastRow, LastCol)).AdvancedFilter _ xlFilterCopy, _ shFilters.Range("A1:N" & R), _ shFilters.Range("A10:N10"), _ True End With LastRowFilt = shFilters.Range("A10").End(xlDown).Row - 10 MsgBox LastRowFilt End Sub
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 Option Explicit Private MODULE ' Module contenant les procédures utilisées dans le classeur illustrant le tutoriel Filtres avancés d'excel Function ExportByFilter(znData As Range, znCriteria As Range, Optional znExport As Range) As Long ' Author : Philippe Tulliez http://philippe.tulliez.be ' Date : 01/11/2012 ' Version : 1.0 ' Procédure d'exportation basée sur le filtre élaboré ' Valeur renvoyée : Nombre d'enregistrements exporté ' znData ' Table de données ' znCriteria ' Zone des critères ' [znExport] ' Zone d'exportation (si vide Exporte tout, en créant une feuille) If znExport Is Nothing Then ' Création de la feuille d'export et coloration en rouge Worksheets.Add before:=Sheets(1) With Worksheets(1): ActiveCell = .Range("A1"): .Tab.Color = vbRed: End With Set znExport = ActiveCell End If znData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=znCriteria, CopyToRange:=znExport ExportByFilter = znExport.CurrentRegion.Rows.Count - 1 End Function Public Sub ContrlFilterSelection() Application.ScreenUpdating = False Dim znSelection As Range Dim argData As Range, argCriteria As Range, argExport As Range Dim row As Byte ' N° de ligne Range("pnClearCriteria").Clear Set znSelection = Range("dbZnSelection") ' Zone sélection feuille [ControlFilters] Set argData = Range("dbZnDataList3") ' Table de données feuille [DataList3] Debug.Print znSelection.Address row = Range("pSelectionChoice") ' N° sélection dans la liste With Application.WorksheetFunction ' Zone Critères If Len(.Index(znSelection, row, 1)) Then Set argCriteria = Range(.Index(znSelection, row, 1)) ' Zone Export If Len(.Index(znSelection, row, 2)) Then Set argExport = Range(.Index(znSelection, row, 2)) End With Application.ScreenUpdating = True MsgBox "Nombre filtré " & ExportByFilter(argData, argCriteria, argExport) End Sub Function Formula(rng As Range) As String ' Fonction qui renvoie la formule de la cellule se trouvant en rng Formula = rng.FormulaLocal End Function
Une bonne âme pourrait me venir en aide ?
NB : je dois évidemment récupérer d'autres données avec d'autres critères. Si vous avez une solution pour faire cela en moins de temps qu'il n'en faut, je suis preneur.
Partager