Tester si une valeur est présente dans un Array de dimmenssion 1
Salut
Pour répondre à un post sur DVP, j'ai eu besoin de rechercher si une valeur appartenait à une liste array.
J'ai dans un premier temps voulu utiliser Filter, malheureusement cette méthode recherche un texte partiel et retourne donc des entrée contenant qu'une partie du texte recherché.
Je suis alors tombé sur cette discussion et j'ai modifié un peu le code pour qu'il soit plus flexible et corresponde à mon besoin de recherche de valeur complète.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 'adapté à partir de
'https://www.developpez.net/forums/d1531998/logiciels/microsoft-office/excel/macros-vba-excel/tester-appartient-tableau/#post8316965
Function FilterEx(SourceArray, Match As String, Optional LookIn As XlLookAt = xlWhole, Optional Include As Boolean = True, Optional Compare As VbCompareMethod = vbTextCompare) As Variant
Dim MyTab As Variant
Dim ExactMatch As String
MyTab = SourceArray
ExactMatch = Match
If LookIn = xlWhole Then
'On ne prendra que la valeur exact
MyTab = Split("¤" & Join(MyTab, "¤;¤") & "¤", ";")
ExactMatch = "¤" & Match & "¤"
End If
'On effectue la recherche
FilterEx = Filter(MyTab, ExactMatch, Include, Compare)
End Function
Function ExistInArray(SourceArray, Match As String) As Boolean
'On utilise les paramètres par défaut de FilterEx
ExistInArray = UBound(FilterEx(SourceArray, Match)) > -1
End Function |
Vous avez peut-être une autre méthode plus simple, si c'est le cas je suis preneur.
++
Qwaz
rechercher si une valeur appartenait à une liste array
Bonjour à toutes et tous
Si j'ai bien compris (?), j'utilise ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11
| Sub test()
Dim tablo
tablo = Array(25, 124, 963, 745)
MsgBox Not IsError(Application.Match(745, tablo, 0)) 'renvoi vrai
MsgBox Not IsError(Application.Match(74, tablo, 0)) 'renvoi faux
MsgBox Not IsError(Application.Match("vasypoupou", tablo, 0)) 'renvoi faux
MsgBox Application.Match(124, tablo, 0) 'renvoi 2 (2ème index du tablo)
End Sub |
mais je ne suis pas encore assez réveillé ;)
Eric