Bonsoir à tous,
J'aimerais comparer une plage à un tableau Tbl.
Je voulais utiliser la fonction InArray, mais ça ne marche pas :
Alors j'ai ajouté quelques lignes de codes pour remplacer le travail de cette fonction...
Code : Sélectionner tout - Visualiser dans une fenêtre à part if cel.Value inarray(tbl) then range("F" & Cel.Row).Value="#" & Strdate & "#"
1 - Existe-t-il une fonction similaire pour comparer une valeur à toutes les valeurs d'un tableau en une seule fois ?
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 Sub Comparer() Dim WS1 As Worksheet, WS2 As Worksheet Dim i As Long, j As Long Dim Tbl() As String, Strg As String, Strdate As String Dim C As Range, Cel As Range Set WS1 = Sheets("feuil1") Set WS2 = Sheets("feuil2") Strdate = Format(Now, "dd/mm/yy") '-- Remplir le tableau Tbl par les valeurs de la colonne A correspondante i = 1 For Each C In WS2.Range("F2:F" & WS2.[F65000].End(xlUp).Row) If C.Value = "Done" Then ReDim Preserve Tbl(i) Tbl(i) = WS2.Range("A" & C.Row) i = i + 1 End If Next C '-- Regrouper les valeurs du Tbl dans la chaine Strg pour faciliter la comparaison avec InStr For j = 1 To UBound(Tbl) Strg = Strg & Tbl(j) & "|" Next j '-- S'il y a une valeur de la colonne A feuille 1 qui corresponde à une valeur de Tbl '-- On écrit la date d'aujourd'hui dans la colonne F For Each Cel In WS1.Range("A2:A" & [A65000].End(xlUp).Row) 'if cel.Value inarray(tbl) then range("F" & Cel.Row).Value="#" & Strdate & "#" If InStr(Strg, Cel.Value) = 1 Then Range("F" & Cel.Row).Value = "#" & Strdate & "#" End If Next Cel End Sub
2 - Si mon tableau Tbl comporte 4 valeurs, la dernière boucle du code ne considère la comparaison juste avec Instr que pour la première valeur seulement !
3 - Sinon comment réduire ces lignes de codes ?
Merci d'avance.
Partager