IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Neutralisation des caractères accentués dans une recherche [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut Neutralisation des caractères accentués dans une recherche
    Bonjour le Forum,

    Voici la problématique que je souhaite vous soumettre.
    J'ai besoin de faire une recherche par n'importe quelle partie du nom dans une liste de 250 pays et d'afficher tous les résultats où l'on retrouve mon argument de recherche.
    J'utilise un code qui fonctionne très bien mais...
    Si je recherche "amer", il va retrouver "Cameroun" mais pas "Amérique"

    Vous l'avez compris, le problème sont les caractères accentués. Est-ce que l'un parmi vous aurait une fonction qui permettrait de retrouver les 2 mots que l'argument de recherche soit "amer" ou "amér" ?

    Merci d'avance.

    Henri

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 383
    Points : 659
    Points
    659
    Par défaut
    Bonjour,

    Il n'existe pas à ma connaissance de fonction "simple" permettant de faire cela.
    Il faudrait passer soit par une imbrication de SUBSTITUE ou alors créer une fonction personnalisée en VBA.
    Que ce soit l'une ou l'autre des manières, il y a plein d'exemples sur internet, tu n'as pas beaucoup cherché
    Demain, je vais commencer par m'acheter des lunettes. Et après, je verrai bien.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Si si, j'ai effectivement trouvé des choses, mais je tentais ma chance ici, quelque fois qu'une solution native VBA existerait.
    Merci quand même.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    Citation Envoyé par Henri1830 Voir le message
    Si si, j'ai effectivement trouvé des choses, mais je tentais ma chance ici, quelque fois qu'une solution native VBA existerait.
    Merci quand même.
    je pense que ca intéresse plusieurs d'entre nous tu peux partager c'est pas interdit
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2012
    Messages : 172
    Points : 80
    Points
    80
    Par défaut
    Bien volontiers !

    Voici le code de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function SupprimerAccents(ByVal sChaine As String) As String
    Dim sTmp As String, i As Long, p As Long
    Const sCarAccent As String = "ÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"
    Const sCarSansAccent As String = "AAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"
        sTmp = sChaine
        For i = 1 To Len(sTmp)
            p = InStr(sCarAccent, Mid(sTmp, i, 1))
            If p > 0 Then Mid$(sTmp, i, 1) = Mid$(sCarSansAccent, p, 1)
        Next i
        SupprimerAccents = sTmp
    End Function
    On peut donc l'utiliser de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        Range("A1").Value = "élève" ' Contenu de la cellule A1 : élève
        Range("A2").Value = SupprimerAccents(Range("A1")) ' Contenu de la cellule A2 : eleve
    End Sub
    Merci à Kiki29 qui a présenté cette fonction à cette page :
    https://www.developpez.net/forums/d1...es-caracteres/

    Enjoy !

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    On peut aussi le faire ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function SupprimerAccents(ByVal sChaine As String) As String
        dim sTmp
        Const sCarAccent As String = "ÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ"
        Const sCarSansAccent As String = "AAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy"
        sTmp = sChaine
     
        For i = 1 To Len(sCarAccent)
            sTmp=replace(stmp, mid(sCarAccent, i, 1), mid(sCarSansAccent, i, 1))
        Next i
     
        SupprimerAccents = sTmp
    End Function
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour le Forum,

    Citation Envoyé par Henri1830 Voir le message
    Est-ce que l'un parmi vous aurait une fonction qui permettrait de retrouver les 2 mots que l'argument de recherche soit "amer" ou "amér" ?
    Cette discussion est marquée résolue mais je n'ai pas vu de résolution alors je vous propose la mienne qui s'applique aux communes françaises.

    La recherche permet de saisir sans accents et de rechercher toutes les variantes et si l'on saisi une lettre accentuée seule celle-ci est prise en compte.
    Elle se fait à l'aide d'un filtre élaboré paramétré par ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    Option Explicit
    Dim idc As Long     ' index caractère
    Dim pda As Integer  ' position de l'accent
    Dim pdc As Integer  ' position du caractère
    Dim acc As String   ' accents
    Dim cac As String   ' caractères à accentuer
    Dim chs As String   ' chaine sélections
    Dim chx As String   ' choix sélection
    Dim tbc As String   ' table recherche
    Dim tba             ' table accents
     
    Private Sub Worksheet_Change(ByVal sel As Range)
    If Not Intersect(sel, [Choix]) Is Nothing Then
        If Len([Choix].Value) > 2 Then
            tba = Application.Transpose([accents].Cells.Value): cac = ""
            For idc = 1 To UBound(tba): cac = cac & Left(tba(idc), 1): Next idc
            acc = "_" & Join(tba, "_") & "_"
            chx = "*" & [Choix].Value & "*": tbc = chx: chs = ""
            Call ins_acc
            Cells([resu].Row + 1, [resu].Column).Resize(Cells(Rows.Count, [resu].Column).End(xlUp).Row, 3).ClearContents
            With Cells([Choisir].Row + 1, [Choisir].Column)
                .Resize([Choisir].Count, 1).ClearContents: tba = Split(tbc, "|")
                .Resize(UBound(tba), 1) = Application.Transpose(tba)
            End With
            [Base].AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=[Choisir], CopyToRange:=[resu], Unique:=False
            [E7].Activate: sel.Activate
        End If
    End If
    End Sub
     
    Public Sub ins_acc()
    Dim idx As Long
    Dim chc As String
        For idc = 1 To Len(chx)
            pdc = InStr(cac, Mid(chx, idc, 1)): If pdc > 0 Then Exit For
        Next idc
        If idc <= Len(chx) Then
            pda = InStr(acc, "_" & Mid(chx, idc, 1))
            For idx = pda + 2 To Len(acc)
                chc = Replace(chx, Mid(cac, pdc, 1), Mid(acc, idx, 1))
                tbc = tbc & "|" & chc: chs = chs & chc & "|"
                If Mid(acc, idx + 1, 1) = "_" Then Exit For
            Next idx
            idx = InStr(chs, "|"): chx = Left(chs, idx - 1): chs = Mid(chs, idx + 1): Call ins_acc
        End If
    End Sub
    Je joint le classeur pour un test plus facile.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/03/2014, 18h45
  2. [MySQL] Transformation des caractères accentués dans une table
    Par betadev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 06/01/2012, 11h58
  3. [XL-2003] échappement des caractères spéciaux dans une recherche
    Par Peanut dans le forum Excel
    Réponses: 4
    Dernier message: 02/12/2010, 19h14
  4. Réponses: 2
    Dernier message: 14/03/2007, 10h31
  5. Chaînes avec des caractères accentués dans Interbase
    Par François Marliac dans le forum Bases de données
    Réponses: 2
    Dernier message: 04/03/2004, 22h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo