REM Conception/Realisation @ASIMENGO
Public Function IsTextMatchItems(ByVal psText As String, ByVal psItems As String, Optional ByVal psItemsSeparator As String = "|") As Boolean
Dim aItems As Variant, i As Long
If psItems = "*" Then
'Si psItems égal "*" alors IsTextMatchItems renverra tjrs True
IsTextMatchItems = True
Else
'Si psItems différent de "*" alors il y'a 3 cas de figure en fonction du premier Item de la liste
aItems = Split(psItems, psItemsSeparator)
Select Case aItems(0)
Case "+":
'Le premier Item est "+", pour indiquer à la fonction de retrouver psText dans la liste des items à partir du deuxième Item
For i = 1 To UBound(aItems)
If psText = aItems(i) Then
IsTextMatchItems = True
Exit Function
End If
Next i
Case "-":
'Le premier Item est "-", pour indiquer à la fonction de ne pas retrouver psText dans la liste des items à partir du deuxième Item
For i = 1 To UBound(aItems)
If psText = aItems(i) Then
IsTextMatchItems = False
Exit Function
End If
Next i
IsTextMatchItems = True
Case Else:
'Le premier Item différent de "+" et "-", pour indiquer à la fonction de retrouver psText dans la liste de tous les items
For i = 0 To UBound(aItems)
If psText = aItems(i) Then
IsTextMatchItems = True
Exit Function
End If
Next i
End Select
End If
End Function
Remarque :
Cette fonction très simple peut servir à automatiser certains tests. Dans mon cas, son exploitation me permet de gérer plus simplement un formulaire avec onglets et toolbar. Pour chaque onglet j'ai la liste des cles des buttons du toolbar qui doivent s'afficher ou pas. Ainsi je peux généraliser cette fonctionnalité à d'autres formulaires. Banal mais bon ...
Les exemples étant plus parlant, je donne 4 exemples:
?IsTextMatchItems("x","*") --> renverra True
?IsTextMatchItems("x","y|x|s") --> renverra true
?IsTextMatchItems("x","+|yx|ax|s") --> renverra False
?IsTextMatchItems("x","-|yx|ax|s") --> renverra true
voila ...