j'ai un code qui me permet de rechercher rapidement la valeur "Obsolète" dans la colonne AC et de récupérer les résultats dans une Listbox mais ce que j'aimerais c'est pouvoir récupérer la ligne entière sachant que le nombre de colonne est variable
j'ai modifié le début du code pour récupérer uniquement les numéros de lignes qui m'intéressent mais après je vois pas comment alimenter mon tableau c parcourant toutes les lignes dont le numéro est dans le dictionnaire. Voici le début du code modif
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 Sub recherchearchive2() Dim dico As Object Dim vMsn As Variant Dim Last_date As Date Dim Last_objet As String Dim a(), b(), c() Dim i As Long, j As Long, n As Long Dim lastrow As Long Dim tblo As Variant Dim tblo2() Dim Temp() Dim ligne As Long Dim Critere1 As String UserForm2.ListBox3.Clear Application.ScreenUpdating = False DoEvents rechercheobsolete '**************statut********************** Critere1 = "Obsolète" lastrow = ThisWorkbook.Sheets("Cvtheque").Range("A" & Rows.Count).End(xlUp).Row Temp = ThisWorkbook.Sheets("Cvtheque").Range("A1:AC" & lastrow).Value Set dico = CreateObject("Scripting.Dictionary") For i = 2 To UBound(Temp, 1) If Temp(i, 29) Like Critere1 Then If dico.Exists(Temp(i, 1) & " | " & Temp(i, 14)) = False Then 'on ajoute dnas le dico l'objet inexistant dico(CStr(Temp(i, 1)) & "|" & CStr(Temp(i, 14))) = CStr(Temp(i, 14)) & "|" & CStr(Temp(i, 15)) & "|" & CStr(Temp(i, 4)) & "|" & CStr(Temp(i, 2)) & "|" & CStr(i) End If End If Next i 'extraction du resultat n = dico.Count If n > 0 Then ReDim c(1 To n, 1 To 5) UserForm2.ALarchive.Visible = False ElseIf n = 0 Then UserForm2.ALarchive.Visible = True Exit Sub End If a = dico.Keys b = dico.Items For j = 1 To n 'c(i, 1) = a(i - 1) c(j, 1) = Split(b(j - 1), "|")(0) c(j, 2) = Split(b(j - 1), "|")(1) c(j, 3) = Split(b(j - 1), "|")(2) c(j, 4) = Split(b(j - 1), "|")(3) c(j, 5) = Split(b(j - 1), "|")(4) Next j Call tri(c(), 1, LBound(c, 1), UBound(c, 1)) UserForm2.ListBox3.ColumnCount = 4 UserForm2.ListBox3.List = c UserForm2.Repaint UserForm2.LBLwait.Visible = False Application.ScreenUpdating = True End Sub
j'avais pensé à faire un truc du genre :
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 Dim dico As Object Dim vMsn As Variant Dim Last_date As Date Dim Last_objet As String Dim a(), b(), c As Variant, k& Dim i As Long, j As Long, n As Long Dim lastrow As Long Dim tblo As Variant Dim tblo2() Dim Temp() Dim dercol As Long Dim ligne As Long Dim Critere1 As String UserForm2.ListBox3.Clear Application.ScreenUpdating = False DoEvents rechercheobsolete '**************statut********************** Critere1 = "Obsolète" lastrow = ThisWorkbook.Sheets("Cvtheque").Range("A" & Rows.Count).End(xlUp).Row dercol = ThisWorkbook.Sheets("Cvtheque").Cells(1, Cells.Columns.Count).End(xlToLeft).Column ThisWorkbook.Sheets("Cvtheque").Activate Temp = ThisWorkbook.Sheets("Cvtheque").Range(Cells(1, 1), Cells(lastrow, dercol)).Value Set dico = CreateObject("Scripting.Dictionary") For i = 2 To UBound(Temp, 1) If Temp(i, 29) Like Critere1 Then If dico.Exists(Temp(i, 1)) = False Then 'on ajoute dnas le dico l'objet inexistant dico(CStr(Temp(i, 1)) & "|" & CStr(Temp(i, 14))) = CStr(i) End If End If Next i
mais seule la première ligne apparaît, auriez-vous une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 n = dico.Count If n > 0 Then ReDim c(1 To n, 1 To 5) UserForm2.ALarchive.Visible = False ElseIf n = 0 Then UserForm2.ALarchive.Visible = True Exit Sub End If b=dico.items for j=1 to n c=thisworkbook.sheets("Cvtheque").range(cells(b(j-1),1)cells(b(j-1),dercol)).value next j
Partager