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.








Répondre avec citation


et si celle-ci est pertinente pensez à voter 




Partager