Supprimer accents et caractères spéciaux dans le même code VBA
Bonjour.
J'ai repris un code trouvé sur ce forum et l'ai adapté à mes besoins (merci Jean-Eric).
J'aimerai ajouter le remplacement de certains caracteres spéciaux (voir ci-après)
Je n'arrive pas à ajouter ces caracteres spéciaux dans mon code VBA car ils apparaissent en point d'exclamation "?"
Je cherche donc de l'aide pour ajouter à mon code le remplacement de ces caractères spéciaux comme :
- Alien³ (exposant 1 ou 2 ou 3) : à remplacer en espace et chiffre (Alien 3 dans cet exemple)
- ComⱯ ("A" majuscule à l'envers) : à remplacer par la lettre "a"
- Egō ("la lettre "o" avec un trait dessus - pas un tilde !) : à remplacer par la lettre "o"
- " --> les doubles guillemets comme caracteres dans une cellule : à remplacer par un espace
- tūre (la lettre "u" avec un trait dessus - pas un tilde !): à remplacer par la lettre "u"
Voici le code VBA que j'utilise :
Public Function Sans_accents(Chaine As String) As String'Cette fonction enlève également les OE, oe, Æ, æ qui posent un problème sur les sytèmes anglais.' remplacement des caractères accentués et -Dim a As String, b As StringDim i As Integer, u As Integer a = "ÇÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜàáâäåèéêëìíîïñòóôõöùúûüÿç!?%-.()+/°_…*·],:" b = "CAAAAAAEEEEIIIINOOOOOUUUUaaaaaeeeeiiiinooooouuuuyc " Chaine = Replace(Replace(Replace(Replace(Replace(Chaine, "œ", "oe"), _ "æ", "ae"), " - ", " "), "'", " "), "Æ,", "ae") For i = 1 To Len(Chaine) u = InStr(1, a, Mid(Chaine, i, 1), 0) If u Then Mid(Chaine, i, 1) = Mid(b, u, 1) Next i Sans_accents = ChaineEnd Function
Merci pour votre aide
Bonjour,
Essayez ceci:
Public Function Sans_accents(Chaine As String) As String
'Cette fonction enlève également les OE, oe, Æ, æ qui posent un problème sur les sytèmes anglais.
' remplacement des caractères accentués et -
Dim a As String, b As String
Dim i As Integer, u As Integer
a = "ÇÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜàáâäåèéêëìíîïñòóôõöùúûüÿç!?%-.()+/°_…*·],:"
b = "CAAAAAAEEEEIIIINOOOOOUUUUaaaaaeeeeiiiinooooouuuuyc "
Chaine = Replace(Replace(Replace(Replace(Replace(Replace(Chaine, """", " "), "œ", "oe"), "æ", "ae"), " - ", " "), "'", " "), "Æ,", "ae")
For i = 1 To Len(Chaine)
u = InStr(1, a, Mid(Chaine, i, 1), 0)
If u Then Mid(Chaine, i, 1) = Mid(b, u, 1)
On Error Resume Next
If Mid(Chaine, i, 1).Font.Superscript = True Then Mid(Chaine, i, 1) = Mid(Chaine, i, 1)
On Error GoTo 0
Select Case Asc(Mid(Chaine, i, 1))
Case 63
Mid(Chaine, i, 1) = "a"
Case 111
Mid(Chaine, i, 1) = "o"
Case 117
Mid(Chaine, i, 1) = "u"
End Select
Next i
Sans_accents = Format(Chaine, "@")
End FunctionCdlt
Bonsoir à tous,
Dans le temps j'avais commis une fonction : SansAccSansNumSansSig(x , xAcc , xNum , xSig)
- x => Texte à traiter
- xAcc => si différent de 0 alors on remplace les lettres accentuées par celles non accentuées
- xNum => si différent de 0 alors on supprime les chiffres de 0 à 9
- xSig => si différent de 0 alors on supprime les Signes (notamment de ponctuation)
On adaptera les constantes du code à son souhait - surtout la constante Signes.
La fonction, est utilisable sur une feuille de calcul ou en VBA.
Un exemple figure sur la feuille du classeur joint.
Le code est dans module1.
Hello,
Malheureusement ne fonctionne pas...
Les caracteres spéciaux mentionnés restent et ne sont pas changés
- Alien³ (exposant numéro 1 ou 2 ou 3) : à remplacer en espace et chiffre = " 3" ou " 1" ou " 2" (Alien 3 dans cet exemple)
- ComⱯ ("A" majuscule à l'envers) : à remplacer par la lettre "a"
- Egō ("la lettre "ō" avec un trait dessus - pas un tilde !) : à remplacer par la simple lettre "o"
- " --> les doubles guillemets comme caracteres dans une cellule : à remplacer par un espace
- tūre (la lettre "ū" avec un trait dessus - pas un tilde !) : à remplacer par la simple lettre "u"
Voici le code que vous m'avez proposé et que j'ai essayé:
Public Function Sans_accents(Chaine As String) As String
'Cette fonction enlève également les OE, oe, Æ, æ qui posent un problème sur les sytèmes anglais.
' remplacement des caractères accentués et -
Dim a As String, b As String
Dim i As Integer, u As Integer
a = "ÇÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜàáâäåèéêëìíîïñòóôõöùúûüÿç!?%-.()+/°_…*·],:"
b = "CAAAAAAEEEEIIIINOOOOOUUUUaaaaaeeeeiiiinooooouuuuyc "
Chaine = Replace(Replace(Replace(Replace(Replace(Chaine, "œ", "oe"), _
"æ", "ae"), " - ", " "), "'", " "), "Æ,", "ae")
For i = 1 To Len(Chaine)
u = InStr(1, a, Mid(Chaine, i, 1), 0)
If u Then Mid(Chaine, i, 1) = Mid(b, u, 1)
On Error Resume Next
If Mid(Chaine, i, 1).Font.Superscript = True Then Mid(Chaine, i, 1) = Mid(Chaine, i, 1)
On Error GoTo 0
Select Case Asc(Mid(Chaine, i, 1))
Case 63
Mid(Chaine, i, 1) = "a"
Case 111
Mid(Chaine, i, 1) = "o"
Case 117
Mid(Chaine, i, 1) = "u"
End Select
Next i
Sans_accents = Format(Chaine, "@")
End FunctionVous n'avez pas recopié ma proposition de code en entier, (où est passée la conversion des guillemets en " "?)
Chez moi ça marche bien, seul souci, c'est que le texte contenant l'exposant, si je fais une copie de votre demande avec Alien³, ça ne détecte pas, mais si je réécris le texte, là, ça fonctionne bien, la preuve ici.
Déposez un bout de fichier afin qu'on puisse faire des essais.
Cdlt
OUI effectivement je n'avais pas recopié votre proposition en entier...
J'ai du conservé les chaines de caractères "a =" et "b =" car elles comportaient le remplacement de caractères spéciaux en espaces dont j'avais besoin.
donc ne diffère de votre proposition que les 2 lignes suivantes :
a = "ÇÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜàáâäåèéêëìíîïñòóôõöùúûüÿç!?%-.()+/°_…*·],:"
b = "CAAAAAAEEEEIIIINOOOOOUUUUaaaaaeeeeiiiinooooouuuuyc Donc après recopie de votre proposition et conservation de mes 2 lignes ci-dessus, puis nouveau test, le résultats est :
Les guillemets ainsi que l'exposant (pour Alien³) sont remplacés correctement.
Les 3 autres caracteres spéciaux : "ō" (dans Egō) + "Ɐ" (dans ComⱯ) + ū (dans tūre) ne sont toujours pas remplacés !
Peut-être dois-je ressaisir ces caractères dans mon fichier excel ? Ils proviennent d'un copier/coller du web et non pas le même code ?
Si je dois les ressaisir dans Excel quelles touches dois-je utiliser pour les faire apparaître ? Je suis sur MACOS et EXCEL 16.75.2
Merci encore pour votre aide
Bonjour,
Les 3 autres caracteres spéciaux : "ō" (dans Egō) + "Ɐ" (dans ComⱯ) + ū (dans tūre) ne sont toujours pas remplacés
Déposez une copie de ces termes issue directement du site web, je verrai ce que je peux faire.
Et les propositions de Optimix et MaFraise ne conviennent-elles pas?
Cdlt
Voici les texte avec les caractères spéciaux tels que je l'ai ai copiés dans Excel:
- ComⱯ - Esprits Prisonniers
- Egō
- Òlòtūré
J'aime la proposition de MaFraise... je l'ai testée et elle fonctionne presque à 100% de ce que je recherche en terme de résultats... je dois juste l'adapter à mes besoins et donc j'ai besoin d'un peu de temps pour faire des tests plus poussés car j'ai des centaines de cas différents à vérifier (mon fichier Excel possède 8850 lignes différentes de texte à ce jour. J'étais donc parti sur votre proposition en premier qui me convenait très bien.
J'ai repris vos derniers éléments et copiés dans un fichier en colonne B, voici ce que ça donne en colonne D
Apparemment, tout marche bien, possible que ce soit le fait que vous soyez sous MAC.
Trouvé sur un site :
In addition, extended characters on the Mac are usually different than Windows because Windows used the ISO Latin-1 Character Set and the Mac uses the Roman character set.
Donc apparemment, on n'a pas les mêmes valeurs décimales pour ces caractères !
Merci encore pour votre aide
Bonsoir le Forum,
Quelqu'un peut-il me dire ou m'expliquer que modifier dans le code suivant :
a = "ÇÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜàáâäåèéêëìíîïñòóôõöùúûüÿç!?%-.()+/°_…*·],:"
b = "CAAAAAAEEEEIIIINOOOOOUUUUaaaaaeeeeiiiinooooouuuuyc "
Chaine = Replace(Replace(Replace(Replace(Replace(Chaine, "œ", "oe"), _
"æ", "ae"), " - ", " "), "'", " "), "Æ,", "ae")Pour :
Ne pas supprimer le tiret "-"
Remplacer les lettres suivantes de l'alphabet Croate " Č Ć DŽ Đ Š Ž " par " C C DZ DJ S Z" ?
Quand j'entre une de ces lettres dans la liste "a" elle apparait comme point d'interrogation.
D'avance merci de m'avoir lu ainsi que pour le temps que vous m'accordez.
