Moteur de recherche qui ne tient pas compte de la casse, ni des accents

Bonjour

Est-ce que quelqu'un peut m'aider svp ?

Mon code fonctionne très bien mais j'aimerai que ma recherche ne tienne pas compte de la casse, ni des accents...et qu'elle se fasse sur l'ensemble de la cellule si celle-ci comporte plusieurs mots !

Quelqu'un saurait me dire comment modifier mon code pour y arriver. J'imagine l'ajout d'une nouvelle variable ? Mais laquelle et comment faire ?

image
Private Sub TextBox1_Change()

Dim ligne As Integer

    Application.ScreenUpdating = False
For ligne = 6 To 500

        Sheets(1).Range("C" & ligne).EntireRow.Hidden = False

    If Sheets(1).TextBox1.Value <> "" Then
        If Sheets(1).Cells(ligne, 2).Value Like Sheets(1).TextBox1.Value & "*" Then

        Sheets(1).Range("C" & ligne).EntireRow.Hidden = False

        Else

        Sheets(1).Range("C" & ligne).EntireRow.Hidden = True

        End If

    End If

   Next ligne

       Application.ScreenUpdating = False

End Sub

Bonjour,

Remplacez votre code par celui-ci:

Option Compare Text

Private Sub TextBox1_Change()
    Dim ligne As Integer, DerLig As Long
    Dim Tableau As Range
    Application.ScreenUpdating = False
    Set Tableau = Range("Tableau1")
    DerLig = Tableau.ListObject.ListRows.Count
    For ligne = 6 To DerLig + 6
        Range("C" & ligne).EntireRow.Hidden = False
        If TextBox1.Value <> "" Then
            Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", "î", "ï", "ô", "ö", "ù", "û", "ü", "À")
            SansAccent = Array("a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "u", "u", "u", "A")
            Texte = Cells(ligne, 2)
            For i = 0 To 14
                Texte = Replace(Texte, Accent(i), SansAccent(i))
            Next i
            If Texte Like "*" & TextBox1.Value & "*" Then
                Rows(ligne).Hidden = False
            Else
                Rows(ligne).Hidden = True
            End If
        End If
    Next ligne
End Sub

Cdlt

Bonjour Marine, bonjour Arturo,

Le code proposé par Arturo contient cette ligne

If Texte Like "*" & TextBox1.Value & "*" Then

que je remplacerais par

If Texte Like TextBox1.Value & "*" Then

La recherche remonte toutes les lignes commençant par le texte saisi dans la TextBox (s -> Commençant par s)
sinon, la recherche remontera les lignes contenant le texte saisi dans la TextBox (s -> Contenant s)
Rien n'empêche de saisir * en 1er caractère dans la TextBox pour avoir contenant et non commençant

Bonjour clr,

Tout dépend ce que l'on recherche, pour ma part, je cherche toutes les cellules "contenant", exemple: je cherche toutes les cellules faisant référence à "Maladie", il n'y a en aucune commençant ainsi.

Reste à savoir ce que souhaite précisément le demandeur.

Cdlt

Effectivement, c'est bien ce qui était demandé mais je pense, peut-être à tort que Marine ne connaissait pas le caractère joker *.
Avec * implicite, on ne pourra pas avoir "commençant par", je trouve, mais ce n'est que mon point de vue, que ce serait dommage de ne pas s'autoriser cette option.

Avec * implicite, on ne pourra pas avoir "commençant par"
Comprends pas, si je tape "ass", on aura bien toutes les cellules commençant ou contenant "ass"
marinekali

Oui, mais pas seulement.
Un exemple avec in où personnellement, je souhaiterais privilégier les lignes commençant par in (indemnités, invalidité ...) .
La liste s'actualisant à chaque saisie de caractères, on se prive de ce filtre dynamique qui peut influencer la poursuite de la saisie. Avec une liste de 1 000 lignes par exemple, on risque de ne pas voir immédiatement ce que l'on recherche, on va devoir taper 3, 4 ... caractères supplémentaires avant de voir apparaitre ce que l'on cherche.
Et, si je souhaite faire une recherche plus large dans ce cas taper *in.

image

Vu comme cela, vous avez parfaitement raison.

Cdlt

bonjour Arturo83, clr, Marinekali,

une autre méthode : le tableau, on ajoute une colonne avec les termes sans accents et puis on utilise cette colonne pour un autofilter et récupère les cellules visibles de la colonne "avec accents". Cela fonctionne beaucoup plus vite

Messieurs bonsoir.

Arturo83 et clr, merci mille fois pour votre aide ! C'est parfait.

Je me suis posée la question aussi pour la recherche "commençant par" ou "contenant par" et je n'ai pas eu le temps de rebondir en revenant vers Arturo que je vois le message de clr. C'est top !

Alors, j'ai effectivement opté pour "commençant par", ce qui devrait effectivement être plus rapide. Et puis pour un terme "contenant par", les utilisateurs taperont * avant les caractères à rechercher dans la TextBox.

J'ai encore beaucoup appris. Je suis admirative.

Mille fois merci.

Ce site est vraiment génial ! Et c'est grâce à des personnes comme vous.

BsAlv, merci également même si je ne retiens pas ta solution.

Au plaisir.

Je passe le sujet en résolu.

bonjour le fil,

voici la macro d'Arturo84 légèrement modifiée et elle est maintenant 2 fois plus vite. ( 80 au lieu de 160 msec)

Private Sub TextBox1_Change()
     Dim ligne As Integer
     Dim Tableau As Range

     Accent = Array("à", "â", "ä", "é", "è", "ê", "ë", "î", "ï", "ô", "ö", "ù", "û", "ü", "À")
     Sansaccent = Array("a", "a", "a", "e", "e", "e", "e", "i", "i", "o", "o", "u", "u", "u", "A")

     Application.ScreenUpdating = False
     Set Tableau = Range("Tableau1")
     Tableau.EntireRow.Hidden = False     'toutes les lignes en même temps
     If TextBox1.Value = "" Then Exit Sub

     For ligne = Tableau.Row To Tableau.Row + Tableau.Rows.Count - 1
          Texte = Cells(ligne, 2)
          If Len(Texte) Then
               For i = 0 To 14
                    Texte = Replace(Texte, Accent(i), Sansaccent(i))
               Next i
          End If
          If Not Texte Like "*" & TextBox1.Value & "*" Then Rows(ligne).Hidden = True

     Next ligne
End Sub
Rechercher des sujets similaires à "moteur recherche qui tient pas compte casse accents"