Muhammad a une longue liste de noms d’entreprises dans une feuille de calcul. Le nom de chaque entreprise a en quelque sorte supprimé tous les espaces, de sorte que (par exemple) ils apparaissent comme «AstroPhysics» au lieu de «Astro Physics». Muhammad a besoin d’un moyen de traiter tous les noms de société pour insérer un seul espace entre toute occurrence d’une lettre majuscule, à l’exception de la première lettre de la cellule. Il se demande s’il existe un moyen simple de le faire.

Il existe plusieurs façons d’ajouter les espaces. Avant de passer aux inévitables solutions macro-basées, vous voudrez peut-être examiner les noms de société. Il se peut qu’il y ait simplement un caractère non imprimable entre chaque mot du nom, au lieu d’un espace. Vous pouvez le déterminer en modifiant la cellule, en positionnant le point d’insertion quelques caractères avant une majuscule, puis en appuyant plusieurs fois sur la flèche droite. Vous devriez voir le point d’insertion se déplacer d’un seul espace vers la droite après chaque pression; s’il semble « hésiter » là où devrait être l’espace, alors il y a là un caractère non imprimable.

Dans ce cas, la meilleure solution consiste à effectuer une opération Rechercher et remplacer pour remplacer le caractère non imprimable par un espace réel. (Vous pouvez sélectionner le caractère non imprimable – maintenez la touche Maj enfoncée tout en appuyant sur la flèche droite sur l’endroit où vous pensez qu’il se trouve – et copiez-le. Collez-le ensuite dans la zone Rechercher pour effectuer votre recherche.)

En supposant que les données ne contiennent pas de caractères non imprimables, vous pouvez également essayer d’utiliser une approche non macro. L’approche la plus simple consiste peut-être à ajouter une ou deux colonnes d’assistance. Dans le premier, vous pouvez entrer une formule pour déterminer la position de la deuxième lettre majuscule dans le nom de l’entreprise. En supposant que le nom de l’entreprise se trouve dans la cellule A1, la formule qui suit doit être saisie sous forme de formule matricielle:

=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)

Si cette formule a été entrée dans la cellule B1, vous pouvez utiliser ce qui suit pour insérer l’espace dans le nom d’origine de la société:

=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)

Cependant, cette approche présente un énorme inconvénient: elle suppose que vos données d’origine suivent un format très strict. Cela fonctionne à merveille avec les noms de sociétés qui commencent par une majuscule et qui nécessitent l’insertion d’un seul espace. Si le nom ne correspond pas à ces paramètres, cela ne fonctionnera pas comme prévu.

Bien sûr, vous pouvez surmonter ces problèmes si vous utilisez une macro pour insérer les espaces. Voici une approche simple qui examine chaque caractère de la cellule. Si le caractère est une lettre majuscule, un espace est inséré avant le caractère. Lorsque la macro est terminée, la chaîne est replacée dans la cellule.

Function Add_Spaces(ByVal sText As String) As String    Dim CharNum As Long    Dim FixedText As String    Dim CharCode As Long

FixedText = Left(sText, 1)



For CharNum = 2 To Len(sText)

CharCode = Asc(Mid(sText, CharNum, 1))

If CharCode >= 65 And CharCode <= 90 Then          FixedText = FixedText & " " & Mid(sText, CharNum, 1)

Else          FixedText = FixedText & Mid(sText, CharNum, 1)

End If    Next CharNum

Add_Spaces = FixedText End Function

L’utilisation de la macro est simple; si le nom de la société est dans la cellule A1, alors ce qui suit est utilisé:

=Add_Spaces(A1)

Une approche plus compacte consiste à s’appuyer sur des expressions régulières pour localiser les majuscules et insérer un espace, comme illustré ci-dessous:

Function SplitCaps(str As String) As String     Dim objRegex As Object     Set objRegex = CreateObject("vbscript.regexp")



With objRegex         .Global = True         .Pattern = "([a-z])([A-Z])"

SplitCaps = .Replace(str, "$1 $2")

End With End Function

Cette technique de macro particulière nécessite que vous activiez les expressions régulières. Vous faites cela dans l’éditeur VB en choisissant Outils | Références et puis faire défiler les références disponibles pour rechercher l’option Microsoft VBScript Regular Expressions 5.5. Assurez-vous que la case à cocher à gauche de la référence est cochée, puis cliquez sur OK. Vous pouvez ensuite utiliser la fonction SplitCaps à partir d’Excel de la même manière que vous pourriez utiliser la fonction Add_Spaces.

Bien entendu, la pertinence de toute approche dépendra, en grande partie, des caractéristiques des données avec lesquelles vous travaillez. Si les noms de votre société d’origine incluent plusieurs lettres majuscules séquentielles (telles que «ABCCorp»), vous vous retrouverez avec trop d’espaces dans votre sortie, tels que «ABCCorp». devient « A B C Corp. » au lieu de « ABC Corp. ». En outre, les caractères autres que des lettres peuvent jeter une clé dans les travaux tels que « H&M »

devient « H&M » ou reste comme « H&M » (selon l’approche macro que vous utilisez).

Dans le but de surmonter certains de ces noms de société étranges, vous pouvez essayer une approche macro différente qui vérifie s’il existe plusieurs lettres majuscules séquentielles et ajuste la sortie en conséquence.

Sub AddSpaces()

Dim i As Integer     Dim j As Integer     Dim PriorCap As Boolean     Dim temp As String

j = 1

Do While Cells(j, 2) <> ""

Cells(j, 3) = ""

PriorCap = True         For i = 1 To Len(Cells(j, 2))

Select Case Mid(Cells(j, 2), i, 1)

Case "A" To "Z", "-"

If PriorCap = False Then                         Cells(j, 3) = Cells(j, 3) & " " & _                           Mid(Cells(j, 2), i, 1)

Else                         Cells(j, 3) = Cells(j, 3) & _                           Mid(Cells(j, 2), i, 1)

End If                     PriorCap = True                 Case Else                     Cells(j, 3) = Cells(j, 3) & _                       Mid(Cells(j, 2), i, 1)

PriorCap = False             End Select         Next i         j = j + 1     Loop End Sub

_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 (12810) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365.