Division des cellules par cas (Microsoft Excel)
Manik a une feuille de calcul qui, dans la colonne A, a des valeurs de texte au format « mikeDAVIS », où le prénom de la personne est en minuscules et le nom de famille est en majuscules. Il aimerait diviser les noms en deux colonnes distinctes, selon le cas du texte.
Cela peut être accompli à l’aide d’une formule ou d’une macro. Quelle que soit l’approche que vous utilisez, la clé est de déterminer où le texte passe des minuscules aux majuscules. Cela ne peut être fait qu’en examinant chaque caractère de la chaîne. Donc, si vous souhaitez utiliser une approche formule, vous devrez utiliser une formule matricielle. La formule matricielle suivante renvoie le nom de tout ce qui se trouve dans la cellule A1:
=MID(A1,MATCH(1,(CODE(MID(A1,ROW($1:$255),1))>=65) * (CODE(MID(A1,ROW($2:$255),1))<90),)+1,255)
N’oubliez pas, puisqu’il s’agit d’une formule matricielle, vous devez l’entrer en appuyant sur Ctrl + Maj + Entrée. Il renvoie tout ce qui se trouve dans la cellule en commençant par la première lettre majuscule trouvée. Ainsi, dans « mikeDAVIS », il renverrait « DAVIS » et dans « mikeDavis », il renverrait « Davis ». En supposant que vous utilisez la formule matricielle dans la cellule B1, vous pouvez ensuite déterminer le prénom en utilisant ce qui suit:
=SUBSTITUTE(A1,B1,"")
Il s’agit d’une formule régulière, pas d’une formule matricielle.
Il existe de nombreuses formules matricielles similaires qui peuvent accomplir à peu près la même tâche. Par exemple, cette formule matricielle renverra le prénom (tous les caractères jusqu’au premier caractère majuscule) de tout ce qui se trouve dans la cellule A1:
=LEFT(A1,MAX((CODE(MID(A$1,ROW(INDIRECT("1:"& LEN(A1))),1))>96)*ROW(INDIRECT("1:"&LEN(A1)))))
Vous pouvez ensuite utiliser la même formule régulière (celle qui utilise la fonction SUBSTITUTE) pour dériver le nom de famille.
Si vous souhaitez utiliser une approche macro pour trouver les noms, tout ce que vous avez à faire est de trouver une formule qui renverra l’emplacement de la première lettre majuscule dans le texte. Le code suivant renvoie ce « point de changement » dans le texte:
Function GetFirstUpper(MyCell As Range) As Integer Dim sCellValue As String Dim i As Integer sCellValue = Trim(MyCell.Value) i = 1 Do While (Asc(Mid(sCellValue, i, 1)) > 90 _ Or Asc(Mid(sCellValue, i, 1)) < 65) _ And i < Len(sCellValue) + 1 i = i + 1 Loop If i > Len(sCellValue) Then GetFirstUpper = 99 Else GetFirstUpper = i End If End Function
Pour utiliser la fonction, supposons que le nom soit dans la cellule A1. Vous pouvez trouver le prénom et le nom en utilisant ces formules dans votre feuille de calcul:
=LEFT(A1,GetFirstUpper(A1)-1) =MID(A1,GetFirstUpper(A1),LEN(TRIM(A1))-GetFirstUpper(A1)+1)
Si vous préférez que votre macro renvoie les noms réels, vous pouvez utiliser la suivante pour tout renvoyer avant la première lettre majuscule:
Function GetFirstName(MyCell As Range) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim(MyCell.Value) i = 1 Do While (Asc(Mid(sCellValue, i, 1)) > 90 _ Or Asc(Mid(sCellValue, i, 1)) < 65) _ And i < Len(sCellValue) + 1 i = i + 1 Loop If i > Len(sCellValue) Then GetFirstName = sCellValue Else GetFirstName = Left(sCellValue, i - 1) End If End Function
Pour utiliser la macro, tout ce que vous avez à faire est d’utiliser ce qui suit dans une cellule de feuille de calcul. (Cela suppose que la chaîne de texte à évaluer se trouve dans la cellule A1.)
=GetFirstName(A1)
Une variation mineure de la macro vous permettra de récupérer de la même manière le nom de famille, qui est supposé être tout en commençant par la première lettre majuscule rencontrée.
Function GetLastName(MyCell As Range) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim(MyCell.Value) i = 1 Do While (Asc(Mid(sCellValue, i, 1)) > 90 _ Or Asc(Mid(sCellValue, i, 1)) < 65) _ And i < Len(sCellValue) + 1 i = i + 1 Loop If i > Len(sCellValue) Then GetLastName = sCellValue Else GetLastName = Mid(sCellValue, i) End If End Function
Si vous préférez, vous pouvez combiner les macros en une seule fonction qui, en fonction de ce que vous spécifiez, renvoie le prénom ou le nom:
Function GetName(MyCell As Range, sWanted As String) As String Dim sCellValue As String Dim i As Integer sCellValue = Trim(MyCell.Value) i = 1 Do While (Asc(Mid(sCellValue, i, 1)) > 90 _ Or Asc(Mid(sCellValue, i, 1)) < 65) _ And i < Len(sCellValue) + 1 i = i + 1 Loop If i > Len(sCellValue) Then GetName = sCellValue Else If LCase(sWanted) = "first" Then GetName = Left(sCellValue, i - 1) Else GetName = Mid(sCellValue, i) End If End If End Function
Pour utiliser cette fonction combinée, il vous suffit de spécifier le nom que vous voulez:
=GetName(A1, "First")
Le mot « First » passé en paramètre de cette manière renvoie le prénom (tout avant la première lettre majuscule). Toute autre chaîne passée comme deuxième paramètre (comme « Last » ou « xxx » ou « Rest » ou même « ») entraîne le renvoi du nom de famille.
_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 (9091) s’applique à Microsoft Excel 2007, 2010, 2013, 2016, 2019 et Excel dans Office 365. Vous pouvez trouver une version de cette astuce pour l’ancienne interface de menu d’Excel ici:
lien: / excel-Splitting_Cells_by_Case [Division des cellules par cas]
.