Comme beaucoup de gens, Kirk copie des informations dans des feuilles de calcul Excel qui proviennent d’autres endroits. Les informations que Kirk copie généralement sont toutes en MAJUSCULES, et il souhaite les convertir en ce qu’Excel appelle « la casse appropriée » (seule la première lettre de chaque mot est en majuscule). Le problème est que la fonction de feuille de calcul PROPER, qui effectue la conversion, ne fait pas attention aux mots qu’elle met en majuscule. Ainsi, les mots comme a, an, in, et, le et avec sont tous initiaux. Kirk ne veut pas que ces mots (et peut-être d’autres) soient en majuscules.

Il existe plusieurs façons d’aborder ce problème. La première consiste à utiliser une formule assez longue pour effectuer la conversion:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( SUBSTITUTE(SUBSTITUTE(PROPER($B$13);" A ";" a "); " An ";" an ");" In ";" in ");" And ";" and "); " The ";" the ");" With ";" with ")

N’oubliez pas que tout cela est une formule unique. Il effectue la conversion de casse, mais remplace ensuite les mots minuscules souhaités (a, an, in et, the, par). Bien que cela soit relativement facile, l’utilité de la formule devient limitée à mesure que vous augmentez le nombre de mots pour lesquels des substitutions doivent être effectuées.

Une meilleure approche consiste peut-être à utiliser une macro de fonction définie par l’utilisateur pour effectuer la conversion de cas à votre place. La fonction suivante vérifie certains mots courants qui ne doivent pas avoir de majuscules initiales, en s’assurant qu’ils sont en minuscules.

Function MyProper(str As String)

Dim vExclude     Dim i As Integer     vExclude = Array("a", "an", "in", "and", _       "the", "with", "is", "at")



Application.Volatile     str = StrConv(str, vbProperCase)

For i = LBound(vExclude) To UBound(vExclude)

str = Application.WorksheetFunction. _           Substitute(str, " " & _           StrConv(vExclude(i), vbProperCase) _           & " ", " " & vExclude(i) & " ")

Next     MyProper = str End Function

Des mots peuvent être ajoutés au tableau, et le code détecte automatiquement les ajouts et vérifie ces mots ajoutés. Notez également que le code ajoute un espace avant et après chaque mot du tableau lors de sa vérification. Ceci afin que le code ne modifie pas des mots partiels (tels que « et » étant dans « stand ») ou des mots au début d’une phrase. Vous pouvez utiliser la fonction dans une feuille de calcul de cette manière:

=MyProper(B7)

Cette utilisation renvoie le texte modifié sans ajuster le texte d’origine en B7.

Si vous préférez, vous pouvez utiliser une fonction qui prend sa liste de mots à partir d’une plage nommée dans le classeur. La fonction suivante utilise une plage de cellules nommée MyList, avec un seul mot par cellule. Il suppose que cette liste se trouve dans une feuille de calcul nommée WordList.

Function ProperSpecial(cX As Range)

' rng = target Cell

Dim c As Range     Dim sTemp As String

sTemp = Application.WorksheetFunction.Proper(cX.Value)

For Each c In Worksheets("WordList").Range("MyList")

sTemp = Application.WorksheetFunction.Substitute( _           sTemp, Application.WorksheetFunction.Proper( _           " " & c.Value & " "), (" " & c.Value & " "))

Next c

ProperSpecial = sTemp End Function

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites ExcelTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / excelribbon-ExcelTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

ExcelTips est votre source pour une formation Microsoft Excel rentable.

Cette astuce (11267) s’applique à Microsoft Excel 2007 et 2010. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:

link: / excel-Modifying_Proper_Capitalization [Modification de la bonne capitalisation].