Bonjour à tous!
Pour effectuer une recherche en boucle dans un fichier spécifique, puis copier des lignes entières dans le fichier où s'exécute la macro je me suis largement inspiré du code présent sur ce fil de discussion.
Après de nombreuses recherches notamment sur ce superbe site, je me vois confronté à un problème que je n'arrive pas à résoudre seul.
Aussi, je viens vous demander de l'aide.
Mon problème: je souhaite effectuer une recherche multi-critère avec le code que j'utilise (i.e. sélectionner des lignes de données qui possèdent 1, 2, etc. valeurs à définir).
Mes questions:
- Comment faire pour adapter le code afin d'effectuer une recherche avec plusieurs critères?
- Existe-t-il une méthode plus simple (j'étais parti sur des boucles "Do While / Loop" au début, mais je n'arrivais pas à trouver exactement ce que je voulais).
Voici le code que j'utilise actuellement:
Concrètement j'aimerai pouvoir utiliser par exemple les cellules D3, D5 et D7 de CS.Sheets("Critères") comme valeurs à définir pour la recherche.
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
72
73
74
75
76
77
78
79
80 Option Explicit Dim J As Integer 'variable globale index ligne destination '=================================================================================== ' ' stFind : Valeur cherchée ' rOu: Plage de recherche ' ' Retour = Nb de fois trouvé ' ' Modifier procédure TraiteC en fonction ' du traitement à effectuer... Function iBoucleCherche(stFind As String, rOU As Range) As Integer Dim c As Range Dim stAdd As String 'Memo premier element Dim bFinBoucle As Boolean Dim iNb As Integer Set c = rOU.Find(stFind, After:=rOU.Cells(1), LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False) On Error GoTo 0 stAdd = c.Address bFinBoucle = False While Not c Is Nothing And Not bFinBoucle iNb = iNb + 1 TraiteC c On Error Resume Next Set c = rOU.FindNext(After:=c) bFinBoucle = (c.Address = stAdd) On Error GoTo 0 Wend iBoucleCherche = iNb End Function ' ' Fonction de traitement ' A modifier suivant les besoins.. Sub TraiteC(c As Range) Debug.Print c.Address & " ... " & c.Value '----- le traitement proprement dit... ' ici copie ligne entiére dans feuille 2 'emplacement où l'on souhaite copier les lignes c.EntireRow.Copy ThisWorkbook.Sheets("Data").Rows(J) J = J + 1 End Sub '======================================================================================= Sub MonTest() Dim date_du_jour As Variant Dim classeur As Workbook Dim CS As Workbook 'variable date_du_jour = Format(CDate(DateSerial(Year(Date), Month(Date), Day(Date) - 1)), "ddmmyyyy") 'Classeur source Set CS = ActiveWorkbook Application.ScreenUpdating = False 'Chercher données dans CSV Set classeur = Workbooks.Open("\\...\...\STOCK_AU_" & [date_du_jour] & ".csv", _ False, True, Local:=True) 'Boucler sur les données J = 1 ' Debug.Print iBoucleCherche(CS.Sheets("Critères").Range("D3").Value, classeur.Sheets("STOCK_AU_" & [date_du_jour]).Cells) 'Pour fermer le fichier .csv Workbooks("STOCK_AU_" & [date_du_jour] & ".csv").Close False 'Rétablir le rafraichissement Application.ScreenUpdating = True 'Mise en forme: Autofit Range("A:AZ").Columns.AutoFit End Sub
En espérant avoir été assez clair, je reste à votre disposition pour toute précision.
Merci d'avance pour votre aide,
Esculape
Partager