Barre de recherche VBA, comment ne pas dissocier majuscules et minuscules ?

Bonjour à tous,

dans le cadre d'une mission de stage je dois développer un fichier clients sur Excel.

Pour rendre la recherche d'un client sur la feuille plus facile, j'ai fais une barre de recherche avec VBA mais la recherche prends en compte les majuscules et les minuscules en fonction de ce qui est tapé dans la barre de recherche (si on cherche le client "Cazaux", il faut obligatoirement taper "Cazaux" dans la barre de recherche, ça ne marchera pas avec les termes "cazaux" ou "CAZAUX").

Là est mon problème,

je voudrais savoir si il existait une fonction spécifique (comme la fonction sansAccent par exemple) qui permettrait de rechercher tout les termes présents dans le fichier sans prendre en compte les caractères en majuscule ou en majuscule ?

Merci pour votre aide.

Bonjour,

Pour chercher une valeur sans respecter la casse (sans se soucier des majuscules et minuscules), tu peux procéder de 4 façons, dont 2 qui sont quasi identiques, les voici:

  • Range.Find, la fonction Range.find permet de chercher une valeur dans une plage de cellules données, par défaut, cette fonction ne respecte pas la casse, elle trouvera "CAZAUX" même si tu cherches "cazaux", le respect de la casse est bien sûr paramétrable.
  • LCase : fonction qui fait partie de la classe "Strings", classe qui permet de manipuler des chaînes de caractères, LCase prend du texte et renvoie l'équivalent en minuscule, ainsi, "CAZAUX" donnerait "cazaux"
  • UCase : pareil que LCase, mais passe tout en majuscules
  • StrComp : Fait aussi partie de la classe "Strings", permet de comparer 2 chaînes de texte suivant différentes méthodes, voici la documentation de la fonction: https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/strcomp-function

Tu as peut-être d'autres méthodes, mais avec ces 4 solutions tu devrais déjà t'en sortir

Bonsoir, malgré mes efforts je n'arrive pas à intégrer les formules à ma macro

Sub Chercher()
Dim tab_mots() As String
Dim compteur As Byte
Dim ligne As Integer: Dim ligne_ext As Integer
Dim valider As Boolean
Dim entreprise As String: Dim nom_du_contact As String
Dim adresse_mail As String: Dim adresse_mail_2 As String
Dim telephone_bureau As String: Dim telephone_mobile As String
Dim fax As String: Dim telephone_domicile_contact_autres As String
Dim adresse As String: Dim cp As String
Dim ville As String: Dim pays As String
Dim chaine As String

purger
tab_mots = Split(Range("B4").Value, "")

ligne = 12: ligne_ext = 12

While Sheets("Importation").Cells(ligne, 1).Value <> ""
    valider = True

    entreprise = Sheets("Importation").Cells(ligne, 1).Value
    nom_du_contact = Sheets("Importation").Cells(ligne, 2).Value
    adresse_mail = Sheets("Importation").Cells(ligne, 3).Value
    adresse_mail_2 = Sheets("Importation").Cells(ligne, 4).Value
    telephone_bureau = Sheets("Importation").Cells(ligne, 5).Value
    telephone_mobile = Sheets("Importation").Cells(ligne, 6).Value
    fax = Sheets("Importation").Cells(ligne, 7).Value
    telephone_domicile_contact_autres = Sheets("Importation").Cells(ligne, 8).Value
    adresse = Sheets("Importation").Cells(ligne, 9).Value
    cp = Sheets("Importation").Cells(ligne, 10).Value
    ville = Sheets("Importation").Cells(ligne, 11).Value
    pays = Sheets("Importation").Cells(ligne, 12).Value

    chaine = entreprise & "-" & nom_du_contact & "-" & adresse_mail & "-" & adresse_mail_2 & "-" & telephone_bureau & "-" & telephone_mobile & "-" & fax & "-" & telephone_domicile_contact_autres & "-" & adresse & "-" & cp & "-" & ville & "-" & pays

    For compteur = 0 To UBound(tab_mots())

        If (Len(tab_mots(compteur)) > 1) Then
            If (InStr(1, sansAccent(chaine), sansAccent(tab_mots(compteur)), vbtexcompare) = 0) Then
                valider = False
                Exit For
            End If
        End If

    Next compteur

    If (valider = True) Then
        Cells(ligne_ext, 1).Value = entreprise
        Cells(ligne_ext, 2).Value = nom_du_contact
        Cells(ligne_ext, 3).Value = adresse_mail
        Cells(ligne_ext, 4).Value = adresse_mail_2
        Cells(ligne_ext, 5).Value = telephone_bureau
        Cells(ligne_ext, 6).Value = telephone_mobile
        Cells(ligne_ext, 7).Value = fax
        Cells(ligne_ext, 8).Value = telephone_domicile_contact_autres
        Cells(ligne_ext, 9).Value = adresse
        Cells(ligne_ext, 10).Value = cp
        Cells(ligne_ext, 11).Value = ville
        Cells(ligne_ext, 12).Value = pays

        ligne_ext = ligne_ext + 1
    End If

    ligne = ligne + 1
Wend

Cells(1, 1).Select

End Sub

Sub purger()
Dim ligne As Integer: Dim colonne As Byte
Dim image As Object

ligne = 12

For Each image In ActiveSheet.Pictures
    image.Delete
Next image

While (Cells(ligne, 1).Value <> "")
    For colonne = 1 To 12
        Cells(ligne, colonne).Value = ""
    Next colonne
    ligne = ligne + 1
Wend

End Sub

Function sansAccent(chaine As String) As String
    Dim ch_avec As String: Dim ch_sans As String
    Dim tampon As String: Dim i As Byte: Dim position As Byte

    ch_avec = "ÀÂÄÉÈÊËÎÏÔÖÇÛÜÙàâäéèêëîïôöçûüùÿ"
    ch_sans = "AAAEEEEIIOOCUUUaaaeeeeiioocuuuy"
    tampon = chaine

    For i = 1 To Len(tampon)
        position = InStr(ch_avec, Mid(tampon, i, 1))
        If position > 0 Then Mid(tampon, i, 1) = Mid(ch_sans, position, 1)
    Next

    sansAccent = tampon

End Function

Bonjour,

Je ne vois pas à quel endroit ton code ne fonctionne pas, pas évident sans le fichier en même temps

Le code fonctionne, seulement il prends en compte la casse, et la recherche est biaisée quand on utilise la barre de recherche.

Je pourrais formater l'utilisation du fichier en obligeant les employés à saisir les nouvelles données en majuscules dans la feuille 🤷‍♂️ mais le but est plutôt d'avoir quelque chose de souple qui permettrait aux employés d'entrer des données majuscules ou minuscules sans soucis.

Re,

Je sais pourquoi...

regarde attentivement:

            If (InStr(1, sansAccent(chaine), sansAccent(tab_mots(compteur)), vbtexcompare) = 0) Then
                valider = False
                Exit For
            End If

Tu ne vois toujours rien?

Et là?

If (InStr(1, sansAccent(chaine), sansAccent(tab_mots(compteur)), vbtexcompare) = 0) Then

La variable s'appelle vbTextCompare, comme VBA ne l'a pas reconnue car il manque le T de texT, il n'a pas mis les majuscules où il fallait, c'est pour ça que ta recherche ne marche pas bien, rajoute le T et tu devrais pouvoir rechercher sans regarder la casse.

Effectivement ça marche beaucoup mieux

Merci beaucoup

Re,

De rien!

J'ai fais essayé le fichier Excel à des collègues et la recherche se limite à 1 seul mot seulement, si l'on tape par exemple "cazaux paris" la recherche ne marche pas et affiche des lignes vides. Pourtant l'entreprise à "cazaux" dans la colonne "NOM" et "paris" dans la colonne "ADRESSE".

Dans ce cas là je ne sais absolument pas comment faire pour que la recherche fonctionne avec plusieurs termes différents séparés par un espace ?

Bonjour,

Débuguer un programme sans fichier c'est difficile... Je ne sais pas à quoi ressemble ton fichier, mais normalement tu ne devrais pas mettre deux informations différentes au même endroit, si tu cherches un nom et une adresse, ça devrait être stocké à deux endroits différents, et non au même endroit, séparés par un espace...

Bonjour à tous

Je plussoie.

Si tu as des entreprises et/ou des villes avec des noms composés, on découperait comment ?

Et puis ensuite ils vont demander une recherche sur n'importe quelle association de colonnes...

Si on veut chercher sur plusieurs champs, il faut prévoir la saisie de plusieurs champs de critères de recherche...

Rechercher des sujets similaires à "barre recherche vba comment pas dissocier majuscules minuscules"