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

Re,

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.
------------------------------------------------------------
Désolé 😱

Mais il faut rappeler également sa question
Bonsoir Roland,
Ca marche pour le moment.
Mais quelle l'utilité de cette ligne :
Code:
'ici si besoin, faire idem avec un autre caract
    M$ = Replace(M$, "À", "à")
Car ta fonction marche parfaitement sans le REPLACE() 😉

Au plaisir et A+
 
Re : Mettre quelques mots d'une chaine en majuscule

re:

bien sûr Bruno, mais, j'avais mis ceci:

-------------------------------------------
'ici si besoin, faire idem avec un autre caract
M$ = Replace(M$, "À", "à")
-------------------------------------------

en prévision, pour que notre ami puisse avoir la possibilité d'y mettre des caractères à exclure comme bon lui semble !
je voulais simplement lui faciliter le travail !

ce n'est pas évident d'évaluer le niveau de connaissance de l'interlocuteur !?
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonsoir Roland, Bruno.

Merci pour vous deux de vos réponses.

Roland > Je voulais simplement améliorer la solution.

Pourquoi, même en ouvrant autre classeur, la fonction se déclenche automatiquement ?

Pourtant ce deuxième classeur n'utilise pas cette fonction ?

J'ai remarqué cela, en ajoutant des Msgbox à la fonction, et chaque fois que j’active les macros d’un nouveau classeur, je vois défiler ces messages, comme que c’était la fonction se charge automatiquement à chaque

Une explication ?

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

Bonsoir Apt

L'instruction
Code:
Application.Volatile
Indique a Excel de d'utiliser cette fonction à chaque recalcul de l'appli 😉

Edit : oups, on c'est croisé Roland_M

A+
 
Re : Mettre quelques mots d'une chaine en majuscule

salut Bruno

oui ! le problème si Application.Volatile est mis en rem
il faut que Apt sache que la fonction ne s'effectura plus que s'il y a modif dans la cellule concernée !
il faut choisir !

EDIT

ou alors, en laissant Application.Volatile
mettre dans ThisWorbook:

Private Sub Workbook_Activate()
Application.Calculation = xlCalculationAutomatic
End Sub

Private Sub Workbook_Deactivate()
Application.Calculation = xlCalculationManual
End Sub

mais je suis pas certain du résultat !

qu'en penses-tu Bruno ?
 
Dernière édition:
Re : Mettre quelques mots d'une chaine en majuscule

re

je viens d'ouvrir le classeur et j'ai simplement créé un autre classeur !
j'ai mis pour tester un Msgbox pour voir !
effectivement lorsqu'on entre une donnée dans cet autre classeur
la fonction est exécutée !

quelqu'un a t'il une explication ?
là je suis un peu pris de court !

j'y réfléchi en attendant !
 
Re : Mettre quelques mots d'une chaine en majuscule

Re,

Roland_M, avec Application.Volatile c'est l'application qui lance les fonctions volatiles
Donc que tu sois dans n'importe quel classeur ce genre de fonction est lancée

Mais il y a une parade ... et oui 😉 🙂
Code:
Function MajusculeSpeciale(Rng As Range)
Dim M$, I%, I1%, I2%, II%, LM%, MaxMot%, Majus$, Minus$
Application.Volatile
'
' Tester si la fonction est appeler du classeur contenant la fonction
' Si ce n'est pas le cas on sort de la fonction
If Application.Caller.Parent.Parent.Name <> ActiveWorkbook.Name Then Exit Function
'tout en minus et 1'car de chaque mot en majusc
M$ = Application.Proper(LCase(Rng))
'ici si besoin, faire idem avec un autre caract
M$ = Replace(M$, "À", "à")


I1% = 0: I2% = 1: MaxMot% = 3 'remet en minus les mots de 1à3 car maxi
Do
 I1% = InStr(I2%, M$, " "): If I1% = 0 Then Exit Do
 I2% = InStr(I1% + 1, M$, " ")
 I% = I2% - I1% - 1: If I% <= 0 Then Exit Do
 If I% > 0 And I% <= MaxMot% Then Mid(M$, I1% + 1, 1) = LCase(Mid(M$, I1% + 1, 1))
Loop


I% = 0 'remet en minus 1'car des mots avec une apostrophe
Do: I% = InStr(I% + 1, M$, "'"): If I% = 0 Then Exit Do
 Mid(M$, I% - 1, 1) = LCase(Mid(M$, I% - 1, 1))
Loop


LM% = Len(M$) 'remet en minus le 1'car après chiffre
For I% = 1 To LM%
 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
MajusculeSpeciale = M$
End Function

A+
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonsoir,
@apt : as-tu testé ma proposition ? Correspond-elle à ton attente ? Il serait bien de ton côté que tu nous livre un fichier exemple plus fourni dans lequel tu envisages les différents cas possibles à traiter.
A+
 
Re : Mettre quelques mots d'une chaine en majuscule

re

j'avais justement à l'instant essayé ceci pour lui ajouter ceci au début de la function !

If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Function

EDIT salut à toi David !
 
Re : Mettre quelques mots d'une chaine en majuscule

Bonsoir Roland, Bruno,

oui ! le problème si Application.Volatile est mis en rem
il faut que Apt sache que la fonction ne s'effectura plus que s'il y a modif dans la cellule concernée !
il faut choisir !

Oui, j'aimerais que le déclenchement se fait à la fin d'une saisie d'une cellule de la colonne B ou C.

Code:
If Target.Column = 2 Or Target.Column = 3 Then
MajusculeSpecial Target 
End if

Voir en PJ.
 

Pièces jointes

Re : Mettre quelques mots d'une chaine en majuscule

re

Apt, reprends ceci, ou le code Bruno ! résultat idem !

Code:
Function MajusculeSpeciale(Rng As Range)
If ActiveWorkbook.Name <> ThisWorkbook.Name Then Exit Function
Dim M$, I%, I1%, I2%, II%, LM%, MaxMot%, Majus$, Minus$
Application.Volatile
'tout en minus et 1'car de chaque mot en majusc
M$ = Application.Proper(LCase(Rng))
'ici si besoin, faire idem avec un autre caract
M$ = Replace(M$, "À", "à")

I1% = 0: I2% = 1: MaxMot% = 3 'remet en minus les mots de 1à3 car maxi
Do
 I1% = InStr(I2%, M$, " "): If I1% = 0 Then Exit Do
 I2% = InStr(I1% + 1, M$, " ")
 I% = I2% - I1% - 1: If I% <= 0 Then Exit Do
 If I% > 0 And I% <= MaxMot% Then Mid(M$, I1% + 1, 1) = LCase(Mid(M$, I1% + 1, 1))
Loop

I% = 0 'remet en minus 1'car des mots avec une apostrophe
Do: I% = InStr(I% + 1, M$, "'"): If I% = 0 Then Exit Do
 Mid(M$, I% - 1, 1) = LCase(Mid(M$, I% - 1, 1))
Loop

LM% = Len(M$) 'remet en minus le 1'car après chiffre
For I% = 1 To LM%
 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
MajusculeSpeciale = M$
End Function
 
Re : Mettre quelques mots d'une chaine en majuscule

Salut David84

Bonsoir,
@apt : as-tu testé ma proposition ? Correspond-elle à ton attente ? Il serait bien de ton côté que tu nous livre un fichier exemple plus fourni dans lequel tu envisages les différents cas possibles à traiter.
A+
Ta proposition d'utilisation d'expression régulière est impécable 😉
Mais tu sais que le commun des mortels, c'est plutôt compliquer à comprendre 😛

Au plaisir
 
- 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