Convertir Minuscules en majuscules sans accent

S

Super Rattata

Guest
Bonjour,

Je voudrais convertir le mot méchant en MECHANT.

Le probleme, lorsque j'utilise la fonction Ucase, le mot devient MECHANT avec un accent sur le E. Et moi je le ve pas cet accent...

Quelqu'un connait une formule ou fonction pour arriver à mes fins ?

Merci d'avance

Super Rattata
 
Y

Yeahou

Guest
Bonjour Super rattata, re effezero, le forum

Comme tu parles de ucase, tu dois vouloir une solution VBA, je te propose donccette macro faite en live qui a le mérite de traiter n'importe quel nombre de é dans le mot à tester.

A+


Sub Chgt_Car()
Dim Val_Cellule As String
Dim Compteur As Integer, Compteur2 As Integer
Val_Cellule = ActiveCell.Value
Do
Compteur = Len(Val_Cellule)
Compteur2 = InStr(1, Val_Cellule, "é", 1)
If Compteur2 = 0 Then Exit Do
Val_Cellule = Mid$(Val_Cellule, 1, Compteur2 - 1) & "e" & Mid$(Val_Cellule, Compteur2 + 1, Compteur - (Compteur2))
Loop
MsgBox UCase(Val_Cellule)
End Sub
 
@

@+Thierry

Guest
Bonjour Ândré, Yeahou, effeZERO, Super_Rattata, le Forum

Voici un code un peu plus élélaboré car je ne pense que que S.R. aura besoin aussi de "traduire" d'autres mots que Méchant... Mais toutes les voyelles susceptibles d'avoir un accent...

Option Explicit

Sub ConvertingUcase()
Dim TheString As String, TheLetter As String, TheUcase As String
Dim i As Byte

TheString = "Mais où est donc passé le grand méchant loup, il a été à la plage avec rïrî, rèrê, rûrü et rôrô !"


For i = 1 To Len(TheString)
TheLetter = Mid(TheString, i, 1)

Select Case TheLetter
Case Chr(224), Chr(225), Chr(226), Chr(227), Chr(228), Chr(229) 'Les "A"
TheLetter = Chr(65)
TheUcase = TheUcase & TheLetter
Case Chr(232), Chr(233), Chr(234), Chr(235) ' les "E"
TheLetter = Chr(69)
TheUcase = TheUcase & TheLetter
Case Chr(236), Chr(238), Chr(238), Chr(239) 'Les "I"
TheLetter = Chr(73)
TheUcase = TheUcase & TheLetter
Case Chr(243), Chr(243), Chr(244), Chr(245), Chr(246) 'Les "O"
TheLetter = Chr(79)
TheUcase = TheUcase & TheLetter
Case Chr(249), Chr(250), Chr(251), Chr(252) 'Les "U"
TheLetter = Chr(85)
TheUcase = TheUcase & TheLetter
Case Else
TheLetter = UCase(TheLetter)
TheUcase = TheUcase & TheLetter
End Select
Next

MsgBox TheUcase

End Sub


Voilà, je n'ai pas traîté les consonnes avec accent, ni le Y, mais on peut ajouter des Cas si besoin...

Bonne Journée
@+Thierry
 
Y

Yeahou

Guest
Re Bonjour tout le monde

Je me suis amusé à le faire en fonction personnalisée

A+

Function Maj_Sans_Accent(Ori As String) As String
Dim Compteur As Integer, Compteur2 As Integer
Dim Tab_Car(15, 2) As String, Chaine_Test As String
Tab_Car(1, 1) = "é": Tab_Car(1, 2) = "e"
Tab_Car(2, 1) = "è": Tab_Car(2, 2) = "e"
Tab_Car(3, 1) = "ê": Tab_Car(3, 2) = "e"
Tab_Car(4, 1) = "ë": Tab_Car(4, 2) = "e"
Tab_Car(5, 1) = "à": Tab_Car(5, 2) = "a"
Tab_Car(6, 1) = "â": Tab_Car(6, 2) = "a"
Tab_Car(7, 1) = "ä": Tab_Car(7, 2) = "a"
Tab_Car(8, 1) = "û": Tab_Car(8, 2) = "u"
Tab_Car(9, 1) = "ù": Tab_Car(9, 2) = "u"
Tab_Car(10, 1) = "ü": Tab_Car(10, 2) = "u"
Tab_Car(11, 1) = "ô": Tab_Car(11, 2) = "o"
Tab_Car(12, 1) = "ö": Tab_Car(12, 2) = "o"
Tab_Car(13, 1) = "î": Tab_Car(13, 2) = "i"
Tab_Car(14, 1) = "ï": Tab_Car(14, 2) = "i"
Tab_Car(15, 1) = "ç": Tab_Car(15, 2) = "c"
For Compteur = 1 To Len(Ori)
Chaine_Test = Mid$(Ori, Compteur, 1)
If Asc(Chaine_Test) > 223 Then
For Compteur2 = 1 To 15
If Chaine_Test = Tab_Car(Compteur2, 1) Then Chaine_Test = Tab_Car(Compteur2, 2): Exit For
Next Compteur2
Ori = Left(Ori, Compteur - 1) & Chaine_Test & Right(Ori, Len(Ori) - Compteur)
End If
Next Compteur
Maj_Sans_Accent = UCase(Ori)
End Function
 
T

Ti

Guest
la même chose que Thierry, mais en plus simple et sous forme de fonction utilisable partout, même dans une feuille Excel :

Function MajSansAccent$(ByVal Chaine$)
'Ti
Const VAccent = "àáâãäåéêëèìíîïðòóôõöùúûü", VSsAccent = "aaaaaaeeeeiiiioooooouuuu"
Dim Bcle&
For Bcle = 1 To Len(VAccent)
Chaine = Replace(Chaine, Mid(VAccent, Bcle, 1), Mid(VSsAccent, Bcle, 1))
Next Bcle
MajSansAccent = UCase(Chaine)
End Function

Sub test()
Dim Chaine$
Chaine = "Mais où est donc passé le grand méchant loup, il a été à la plage avec rïrî, rèrê, rûrü et rôrô !"
MsgBox MajSansAccent(Chaine)
End Sub
 
Y

Yeahou

Guest
Re Bonjour tout le monde

toujours la même fonction un peu améliorée

Cordialement, A+

Function Maj_Sans_Accent(Ori As String) As String
Dim Compteur As Integer, Compteur2 As Integer
Dim Tab_Car_Accent, Tab_Car, Chaine_Test As String
Tab_Car_Accent = Array("á", "à", "â", "ä", "ã", "å", "é", "è", "ê", "ë", "í", "ì", "î", "ï", "ó", "ò", "ô", "ö", "õ", "ð", "ú", "ù", "û", "ü", "ÿ", "ý", "ç")
Tab_Car = Array("a", "a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", "o", "o", "o", "o", "o", "o", "u", "u", "u", "u", "y", "y", "c")
For Compteur = 1 To Len(Ori)
If Asc(Mid$(Ori, Compteur, 1)) > 223 Then
Chaine_Test = Mid$(Ori, Compteur, 1)
For Compteur2 = LBound(Tab_Car) To UBound(Tab_Car)
If Chaine_Test = Tab_Car_Accent(Compteur2) Then Chaine_Test = Tab_Car(Compteur2): Exit For
Next Compteur2
Ori = Left(Ori, Compteur - 1) & Chaine_Test & Right(Ori, Len(Ori) - Compteur)
End If
Next Compteur
Maj_Sans_Accent = UCase(Ori)
End Function
 
@

@+Thierry

Guest
Arf !!! Arrrg, Arrrheu !

Et bien c'est encore une fois de plus génial cette idée de faire deux constantes et de faire un replace de la chaine en boucle (dire que je me suis fait les tables ansi !!! lol)

Par contre je ne suis pas totalement convaincu par le Tab_Car, mais de toute manière ce qui est au top ici, c'est que même ce qu'Excel n'a pas prévu on le trouve sur XLD !!! (à moins que quelqu'un ne se pointe encore avec une Fonction toute prête déjà existante ! lol) comme Proper où j'avais fabriqué dans le temps une Usine à gaz sans en connaître l'existence !!! lol

Encore Bravo !
Bon Appetit
@+Thierry
 
T

Ti

Guest
un petit test supplémentaire dans ma fonction pour que ça aille plus vite en cas de chaîne vide :

Function MajSansAccent$(ByVal Chaine$)
'Ti
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

Mais, comme toi Thierry, je me demande s'il n'est pas possible de faire directement en utilisant certaines options dans les fonctions intégrées de conversion de VB, mais c'était plus facile et plus rapide d'écrire la fonction que de fouiller dans l'aide...
 
Y

Yeahou

Guest
Bonjour à tous

tu as raison Thierry, la solution de Ti est, d'aprés mes tests, à peu prés 5% plus rapide tout en étant plus simple.
code judicieux, concis et efficace
Bravo au maître Ti

Cordialement, A+
 
J

Jean-Marie

Guest
Bonjour tout le monde

Eddy fait =MajSansAccent(minuscule(BUSSIÈRES PRÈS PIONSAT))

UCase(Chaine) peu être remplacer Format(chaine;">") mais format ne transforme pas les caractères accentués.

@+Jean-Marie
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren