VBA - recherche d'un mot - caractères spéciaux

batfrit

XLDnaute Nouveau
Bonjour à tous,

je m'adresse à vous aujourd'hui en raison d'un problème dont je ne trouve pas de solution sur le forum ou sur le Net.

j'ai une base de données de projet (numéro, nom(s), chargé d'affaire, ...)
et j'aimerai pouvoir faire une recherche suivant certains paramètres.

grâce à un USF basique (un textbox et une listbox) j'aimerai afficher l'ensemble des lignes contenant le mot contenu dans le textbox.

j'ai utilisé ce bout de code:

For Each c In Workbooks("bddnum.xls").Sheets("bdd").Range("b1:b" & a)
If UCase(c) Like "*" & UCase(UserForm8.TextBox1) & "*" Then
UserForm8.ListBox1.AddItem
UserForm8.ListBox1.List(k, 1) = c
UserForm8.ListBox1.List(k, 0) = c.Offset(, -1)
UserForm8.ListBox1.List(k, 2) = c.Offset(, 3)
UserForm8.ListBox1.List(k, 3) = c.Offset(, 20)
UserForm8.ListBox1.List(k, 4) = c.Offset(, 13)
k = k + 1
End If
taille_progressbar = taille_progressbar + 180 / (4 * a)
Image2.Width = taille_progressbar
Me.Repaint
Next c


ce code me trouve effectivement ce que je veux, mais par exemple :

si je recherche "Briançon" et qu'il trouve "Briancon", il ne me l'affichera pas.

comment traiter les caractères spéciaux ?
 

ferdhy

XLDnaute Junior
Re : VBA - recherche d'un mot - caractères spéciaux

Bonjour,

Active la référence "Microsoft VBScript Regular Expressions x.y"
Ajoute la fonction suivante que je viens de recuperer sur le net:
Code:
Public Function SansAccent(ByVal strWord As String) As String
' Retourne la chaîne passée en paramètre sans les accents
    Dim oReg As RegExp
    Dim varTab(17, 2) As String
    Dim iCpt As Integer
 
    Set oReg = New RegExp
    varTab(1, 1) = "[ÀÁÂÃÄÅ]": varTab(1, 2) = "A"
    varTab(2, 1) = "[àáâãäå]": varTab(2, 2) = "a"
    varTab(3, 1) = "[Ç]": varTab(3, 2) = "C"
    varTab(4, 1) = "[ç]": varTab(4, 2) = "c"
    varTab(5, 1) = "[ÈÉÊË]": varTab(5, 2) = "E"
    varTab(6, 1) = "[èéêë]": varTab(6, 2) = "e"
    varTab(7, 1) = "[ÌÍÎÏ]": varTab(7, 2) = "I"
    varTab(8, 1) = "[ìíîï]": varTab(8, 2) = "i"
    varTab(9, 1) = "[Ñ]": varTab(9, 2) = "N"
    varTab(10, 1) = "[ñ]": varTab(10, 2) = "n"
    varTab(11, 1) = "[ÒÓÔÕÖ]": varTab(11, 2) = "O"
    varTab(12, 1) = "[òóôõö]": varTab(12, 2) = "o"
    varTab(13, 1) = "[ÙÚÛÜ]": varTab(13, 2) = "U"
    varTab(14, 1) = "[ùúûü]": varTab(14, 2) = "u"
    varTab(15, 1) = "[Ý]": varTab(15, 2) = "Y"
    varTab(16, 1) = "[ýÿ]": varTab(16, 2) = "y"
    varTab(17, 1) = "[ß]": varTab(17, 2) = "ss"
 
    With oReg
        .IgnoreCase = False
        For iCpt = 1 To UBound(varTab)
            If Len(varTab(iCpt, 1)) > 0 Then
                .Pattern = varTab(iCpt, 1)
                strWord = .Replace(strWord, varTab(iCpt, 2))
            End If
        Next iCpt
    End With
    SansAccent = strWord
 
    Set oReg = Nothing
End Function

dans ton code, change la ligne
If UCase(c) Like "*" & UCase(UserForm8.TextBox1) & "*" Then
par
If SansAccent(c) Like "*" & SansAccent(UserForm8.TextBox1) & "*" Then

Cordialement....

Ferdy
 

Discussions similaires

Statistiques des forums

Discussions
312 297
Messages
2 086 972
Membres
103 414
dernier inscrit
Congelus