Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour le forum

Avec l'autorisation de David, voici, en son hommage, une fonction personnalisée de Ti_ (Thierry Pourtier) convertissant une chaine de caractères en majuscules non accentuées.
Utilisable par VBA ou formule

Bien cordialement,@+
VB:
Function MajSansAccent$(ByVal Chaine$)
'conversion d'une chaîne texte en majuscules non accentuées
'V1.0 by Ti_ (Thierry Pourtier)
Const VAccent = "àáâãäåéêëèìíîïðòóôõöùúûü", VSsAccent = "aaaaaaeeeeiiiioooooouuuu"
Dim Bcle&
If Len(Chaine) > 0 Then
    For Bcle = 1 To Len(VAccent)
        Chaine = Replace(Chaine, Mid(VAccent, Bcle, 1), Mid(VSsAccent, Bcle, 1))
    Next Bcle
    MajSansAccent = UCase(Chaine)
End If
End Function

[édition : Voici une petite évolution en version 1.2 laissant le choix de la casse en paramètre optionnel, casse conservée convertie sans accents par défaut.]

VB:
Function MajVsMinSansAccent$(ByVal Chn_Txt$, Optional MajVsMin As Byte = 0)
'conversion d'une chaîne texte en majuscules ou minuscules non accentuées
'V1.0 by Ti_ (Thierry Pourtier) le 12-07-2004
'V1.2 by Bernard_XLD
'MajVsMin=0 ou omis -> casse conservée convertie sans accents
'MajVsMin=1 -> Majuscules sans accents
'MajVsMin=2 -> Minuscules sans accents
Const VAccent = "àáâãäåçéêëèìíîïðòóôõöñùúûüýÿÀÁÂÃÄÅÇÉÊËÈÌÍÎÏÐÒÓÔÕÖÑÙÚÛÜÝŸ", VSsAccent = "aaaaaaceeeeiiiioooooonuuuuyyAAAAAACEEEEIIIIOOOOOONUUUUYY"
Dim Bcle&
If Len(Chn_Txt) > 0 Then
    For Bcle = 1 To Len(VAccent)
        Chn_Txt = Replace(Chn_Txt, Mid(VAccent, Bcle, 1), Mid(VSsAccent, Bcle, 1))
    Next Bcle
    Select Case MajVsMin
    Case 1
        MajVsMinSansAccent = UCase(Chn_Txt)
    Case 2
        MajVsMinSansAccent = LCase(Chn_Txt)
    Case Else
        MajVsMinSansAccent = Chn_Txt
    End Select
    End If
End Function
 
Dernière édition:

polyme

XLDnaute Nouveau
Et si l'on ne veut pas faire de VBA:
Voici ce que j'ai fait: J'ai créé une fonction LAMBDA dans le gestionnaire de noms (Attention version Excel 2016+) de nom REP car substitue est trop longue : =LAMBDA(TXT;X;Y;SUBSTITUE(TXT;X;Y))
Puis une fonction SansAccent : =LAMBDA(TXT;REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(REP(TXT;"á";"a");"à";"a");"ä";"a");"â";"a");"é";"e");"è";"e");"ë";"e");"ê";"e");"í";"i");"ì";"i");"ï";"i");"î";"i");"ú";"u");"ù";"u");"ü";"u");"û";"u");"ó";"o");"ò";"o");"ö";"o");"ô";"o");"ç";"c");"ñ";"n"))
 

merinos

XLDnaute Accro
Bonjour @polyme ,

C'est plus rapide avec une table de substitution.

Lambda passe sur toutes les lignes de la table et effectue les remplacements.

Ici il remplace même "01/04" par "Janvier 2004"


Merinos
 

Pièces jointes

  • LAMBDA Substituteur text.xlsx
    46.9 KB · Affichages: 3

Statistiques des forums

Discussions
314 120
Messages
2 106 115
Membres
109 491
dernier inscrit
Jeannot mwilambwe