Bonjour, j’ai un besoin assez basique, rechercher si un élément est présent dans un tableau, mais j’ai un pb avec la fonction FILTER :
Si ma liste de départ est
[« Jean-Pierre »,« Laurent »,« Fabrice »]
et que je cherche si l’élément « Jean » est présent, la sous-liste renvoyée par la fonction FILTER me renvoie systématiquement « Jean-Pierre » or ça n’est pas ce que j’attends, je m’attends à ce que ça me renvoie une liste vide.
Existe-t-il un moyen de contourner ce comportement par défaut ?
La doc indique Filter( SourceArray, Match, [Include], [Compare] )
et pour info j’ai essayé d’agir sur les paramètres Include et Compare mais ça n’a rien changé.
Ou alors existe-t-il une autre fonction qui fait exactement ce que je veux ?
Ensuite je sais que je peux me créer moi-même à la main une fonction qui recherche un élément dans une liste mais j’aimerais éviter.
il faut ajouter des chaines au début et fin et puis filtrer ou l’inverse
Sub ddd()
Dim Arr, Fl1, Fl2
Arr = Array("Jean-Pierre", "Laurent", "Fabrice")
Fl1 = Filter(Arr, "pierre", 1, 1)
If UBound(Fl1) > -1 Then
sep = "|~|"
sp = Split(Mid(sep & Join(Fl1, "|") & sep, 3), "~")
Fl2 = Filter(sp, "|pierre|", 1, 1)
If UBound(Fl2) > -1 Then
MsgBox "trouvé"
Else
MsgBox "no pierre ""exacte"""
End If
Else
MsgBox "no *pierre* "
End If
End Sub
Merci Cow18, je ne doute pas que ton code fonctionne mais dans ce cas autant que j’écrive une fonction toute bête qui parcourt chaque élément de la liste et qui compare chaque élément avec la valeur recherchée.
Mais je trouve vraiment incroyable qu’il n’existe pas un moyen plus simple, pourtant mon besoin est vraiment basique, comment se fait-il que le langage n’offre pas une fonction toute prête qui fait le job ??
Sub Lomic()
Dim Arr, MaValeur, i
MaValeur = "Pierre"
Arr = Array("Jean-Pierre", "Laurent", "Fabrice")
i = Application.Match(MaValeur, Arr, 0)
If IsNumeric(i) Then
MsgBox MaValeur & " se trouve à position " & i & ", l'index est " & i - 1
Else
MsgBox MaValeur & " ne se trouve pas dans vos noms"
End If
End Sub
alors comme ça ?