J'ai essayé tous les filtres textuels mais je n'arrive pas à obtenir ce que je veux.
Je souhaite filtrer les lignes de mon tableau sur un mot mais pas sur une partie d'un mot.
Par exemple, si je met un filtre textuel avec contient et le mot "CHARGEUR", je vais avoir les résultats souhaités suivants :
Par contre je vais avoir aussi des résultats non souhaités comme :
STATION HYDRAULIQUE VANNE DÉCHARGEUR 1
CLAPET DÉCHARGEUR 24
....
Et si je filtre avec "égal à", je n'ai aucun résultat car le mot recherché n'est pas le seul de la cellule.
Savez-vous s'il existe une solution de filtrage pour cela ?
Sur des forums, j'avais vu la formule suivante pour rechercher un mot exact : ="=CHARGEUR" mais ça ne fonctionne pas dans mon filtre textuel.
Pour le fun, un essai via une fonction personnalisée et un peu de code dans le module de Feuil1; On conserve les possibilités de rechercher par mot complet ou par caractères.
La fonction personnalisée Function Contient(Target As String, S As String) As String recherche dans la chaîne Target le mot S ou les caractères contenus dans S.
si S ne se termine pas par /, alors on recherche dans Target les mots complets égaux à S
si S se termine par /, alors on recherche si les caractères de S (moins le caractère final /) se trouvent dans Target
La fonction Contient retourne X si Target contient le mot S (cas 1) ou si les caractères de S se retrouvent dans Target sinon contient retourne - (cas 2).
Les caractères génériques ? et * sont autorisés (comme pour la fonction like de vba). Peut être en particulier utile pour faire des recherches qui ne distinguent pas les caractères accentués de ceux qui ne le sont pas.
Pour filtrer par mot ou caractères, saisir le critère dans la cellule verte F1 (terminer par / pour chercher les caractères et pas seulement les mots complets)
Pour annuler le filtre, saisir le caractère * dans la cellule F1.
Des exemples de critère sont rajoutés via la liste déroulante située en cellule orange M1.
Code fonction contient:
VB:
Option Explicit
Option Compare Text
Function Contient(Target As String, S As String) As String
'si S se termine par / ==> on recherche les caractères compris dans S
'si S ne se termine pas par / ==> on recherche le mot S
Dim xmot
Contient = "-"
If Right(S, 1) <> "/" Then
For Each xmot In Split(Target)
If xmot Like S Then
Contient = "X"
Exit Function
End If
Next xmot
ElseIf Target Like "*" & Left(S, Len(S) - 1) & "*" Then Contient = "X"
End If
End Function