Convertir Minuscules en majuscules sans accent

  • Initiateur de la discussion Initiateur de la discussion Super Rattata
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
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
 
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
 
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
 
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...
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
31
Affichages
3 K
Retour