Mettre quelques mots d'une chaine en majuscule

  • Initiateur de la discussion Initiateur de la discussion apt
  • 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 !

apt

XLDnaute Impliqué
Bonjour à tous,

J’aimerais par une fonction, ne mettre le contenu d’une cellule en majuscule, que certain mots et éviter certains d’autres.

Par exemple, si j’ai cette phrase :

boite à conserve 115 g

Elle devient :

Boite à Conserve 115 g

On peut remarquer que le a accentué "à" et la lettre g après le chiffre 115, ne sont pas concernés par la mise en majuscule.

Ca veut dire que l’ensemble de lettres suivantes :

à, â, ä, é, è, ê, de, des, le, la, les, d’, l’ ...

et toute lettre après un chiffre ne devra pas être mise en majuscule.

Merci d’avance.
 
Re : Mettre quelques mots d'une chaine en majuscule

Salut Mister Apt 😉

Voici une petite fonction personnalisée
Code:
Function MajusculeSpé(Rng As Range)
  Dim Ind As Integer, TabVal() As String, FlgNum As Boolean
  Dim sMot As String, sPhrase As String
  Dim NoMaj As String
  ' Activer la fonction à chaque changement
  Application.Volatile
  ' Tableau des éléments à ne pas mettre en majuscule
  NoMaj = "à, â, ä, é, è, ê, de, des, le, la, les, d’, l’"
  ' Eclater le contenu de la cellule dans un tableau
  TabVal = Split(Rng, " ")
  ' Mettre le FLAG de valeur numérique trouvée à 0
  FlgNum = False
  ' Pour chaque élément du tableau (chaque mot)
  For Ind = 0 To UBound(TabVal)
    ' Mémoriser le mot
    sMot = TabVal(Ind)
    ' Si ce mot est numérique on met le FLAG à VRAI
    If IsNumeric(sMot) Then FlgNum = True
    ' SI le FLAG est FAUX
    If FlgNum = False Then
      ' Si le mot ne fait pas partie de la liste
      If InStr(1, NoMaj, sMot) = 0 Then
        ' Créer la phrase avec le début du mot en majuscule
        sPhrase = sPhrase & Application.Proper(sMot) & " "
      Else
        ' SI le mot n'est pas à mettre en majuscule
        sPhrase = sPhrase & sMot & " "
      End If
    Else
      ' Le mot est un nombre
      sPhrase = sPhrase & sMot & " "
      ' si le mot est à la suite du nombre
      ' on met le flag à faux pour la suite éventuelle
      If Not IsNumeric(sMot) Then FlgNum = False
    End If
  Next Ind
  MajusculeSpé = sPhrase
End Function

Mise en pratique dans le fichier ci-joint 😱

A+
 

Pièces jointes

Re : Mettre quelques mots d'une chaine en majuscule

bonjour à tous,

trop fort le Bruno ! 😉
mais il semble y avoir qq erreurs !? 😕
peut être en un peu plus simple !?

Code:
Function MajusculeSpé2(Rng As Range)
Dim M$, I%, II%, LM%, Majus$, Minus$
Application.Volatile
M$ = Application.Proper(LCase(Rng)) 'tout en minus et 1'car d'un mot en majus
For I% = 1 To 13 'remet en minus les exceptions
  Majus$ = Choose(I%, "À", "Â", "Ä", "É", "È", "Ê", " De ", " Des ", " Le ", " La ", " Les ", " D’", " L’")
  Minus$ = Choose(I%, "à", "â", "ä", "é", "è", "ê", " de ", " des ", " le ", " la ", " les ", " d’", " l’")
  M$ = Replace(M$, Majus$, Minus$)
Next
LM% = Len(M$)
For I% = 1 To LM% 'remet en minus le 1'car après chiffre
 If IsNumeric(Mid(M$, I%, 1)) Then
    For II% = I% + 1 To LM%
     If Not IsNumeric(Mid(M$, II%, 1)) And Mid(M$, II%, 1) <> " " Then
        Mid(M$, II%, 1) = LCase(Mid(M$, II%, 1)): I% = II%: Exit For
     End If
    Next
 End If
Next
MajusculeSpé2 = M$
End Function
 

Pièces jointes

Dernière édition:
Re : Mettre quelques mots d'une chaine en majuscule

Salut Roland .. encore plus fort 😉

Mais il reste qq erreurs également yaisse1.gif 😉
 

Pièces jointes

  • ScreenShot104.jpg
    ScreenShot104.jpg
    17.7 KB · Affichages: 78
Re : Mettre quelques mots d'une chaine en majuscule

re:

tout à fait Bruno, bien vu !
effectivement il y a erreur avec les apostrophes !?
j'avais repris la chaine avec d’, l’ ...
et je viens de corriger avec d', l' ...

j'en ai rajouté Dans , En , ... mais il est vrai qu'il peut encore en rajouter !?
à lui de voir ...
 

Pièces jointes

Dernière édition:
Re : Mettre quelques mots d'une chaine en majuscule

Bonjour grand Bruno, Roland,

Merci pour vos réponses.

Pour limiter les tableaux de teste des mots à exclure, peut-on faire des testes sur la longueur des mots à un seule caractère et ne laisser que le tableau des mots à deux lettres et plus pour le teste?
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonsoir Roland,

Ca marche pour le momemnt.

Mais quelle l'utilité de cette ligne :

Code:
'ici si besoin, faire idem avec un autre caract
    M$ = Replace(M$, "À", "à")
 
Re : Mettre quelques mots d'une chaine en majuscule

bonjour,

M$ = Replace(M$, "À", "à")
ceci remplace dans la chaîne M$ tous les "À" en "à" s'il y en a !
c'est pour cela que j'ai mis en rem
'ici si besoin, faire idem avec un autre caract
exemple si tu veux remplacer É majusc en é minusc
M$ = Replace(M$, "É", "é")
 
Re : Mettre quelques mots d'une chaine en majuscule

re:

heu ... je crois qu'il te faut voir absolument l'aide VB car tu es un peu à côté de la plaque !

exemple avec têtu ! mais avec le É

M$ = "TÉTU"
M$ = Replace(M$, "É", "é") ... M$ sera ="TéTU"

M$ = Lcase(M$) ... M$ sera = "tétu"

si M$ = "tétu"
M$ = Ucase(M$) ... M$ sera = "TÉTU"
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonjour,
ci-joint un début de solution via une fonction utilisant une expression rationnelle (motif à enrichir par la suite en fonction des cas à traiter) :
Code:
Function Maj(chaine As String) As String
Dim oRegExp As Object, Matches As Object, i As Byte
'Application.Volatile
chaine = LCase(chaine)
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .Global = True
    .Pattern = "[a-zéèàëöôûüîï]{3,}"
    Set Matches = .Execute(chaine)
End With
For i = 0 To Matches.Count - 1
    chaine = Replace(chaine, Matches.Item(i), Application.WorksheetFunction.Proper(Matches.Item(i)))
Next i
Maj = Trim(chaine)
End Function
A+
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonjour le fil

re:
heu ... je crois qu'il te faut voir absolument l'aide VB car tu es un peu à côté de la plaque !
exemple avec têtu ! mais avec le É
M$ = "TÉTU"
M$ = Replace(M$, "É", "é") ... M$ sera ="TéTU"
M$ = Lcase(M$) ... M$ sera = "tétu"
Très très bon exemple mon cher Roland_M avec le mot bien choisi 🙄

Car avec M$ = "TÉTU"
M$ = Lcase(M$) ... M$ sera = "tétu"

Pourquoi vouloir faire un
Code:
M$ = Replace(M$, "É", "é")
😕

Apt tu as tout à fait raison

A bon entendeur 😉
 
Re : Mettre quelques mots d'une chaine en majuscule

heu

j'abandonne !

il faut revoir le début du fil pour tout comprendre !

car notre ami voulait des caractères bien spécifiés en minuscules !

je rappels son message du début !

------------------------------------------------------------
Bonjour à tous,

J’aimerais par une fonction, ne mettre le contenu d’une cellule en majuscule, que certain mots et éviter certains d’autres.

Par exemple, si j’ai cette phrase :

boite à conserve 115 g

Elle devient :

Boite à Conserve 115 g

On peut remarquer que le a accentué "à" et la lettre g après le chiffre 115, ne sont pas concernés par la mise en majuscule.

Ca veut dire que l’ensemble de lettres suivantes :

à, â, ä, é, è, ê, de, des, le, la, les, d’, l’ ...

et toute lettre après un chiffre ne devra pas être mise en majuscule.

Merci d’avance.
------------------------------------------------------------
 
Dernière édition:
- 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
Retour