Fonction FILTER qui ne filtre pas suffisamment

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.

Merci pour vos réponses.

Bonjour,
Un fichier d’exemple nous aidera bien.
Cordialement

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 ?

Ah effectivement ça a l’air beaucoup mieux, je ne pense qu’on trouvera plus simple, merci Cow18.

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.