Il n’est pas inhabituel dans un environnement de bureau de travailler avec des fichiers Excel créés par d’autres personnes. Certains de ces fichiers peuvent être assez différents des fichiers que vous pourriez créer. Par exemple, vous pouvez hériter d’un fichier dans lequel la première colonne contient le prénom d’une personne sur la première ligne, puis son nom de famille sur la deuxième ligne. (L’utilisateur a appuyé sur Alt + Entrée pour séparer le prénom du deuxième nom dans la même cellule.) Que faire si vous devez trier les lignes de la feuille de calcul en fonction du nom de famille de la personne?

La meilleure façon d’accomplir une telle tâche est peut-être d’insérer une nouvelle colonne dans la feuille de calcul – colonne B. (Cette colonne peut être masquée afin qu’elle n’apparaisse pas lorsque vous travaillez normalement avec la feuille de calcul ou lors de son impression.) la formule doit ensuite être placée dans chaque cellule de la colonne B:

=RIGHT(A2,LEN(A2)-FIND(CHAR(10),A2))

Évidemment, les références de cellule changeront lorsqu’elles seront placées dans la colonne B. Dans cette formule, la partie FIND détermine la position du caractère Alt + Entrée (le code de caractère de ce caractère est 10). La fonction DROITE renvoie les caractères de la cellule en commençant par le caractère suivant le caractère Alt + Entrée. Cette solution aboutit à la colonne B contenant les informations sur la deuxième ligne de la première colonne. Vous pouvez ensuite trier facilement en fonction des informations de la colonne B.

Il y a une hypothèse faite dans cette solution – qu’il n’y a que deux lignes dans chaque cellule de la colonne A. S’il y en a plus ou moins, la solution devient plus difficile. Si tel est le cas, la meilleure (et la plus simple) solution peut être de reformater la feuille de calcul afin que la clé de tri soit dans une colonne toute seule. Si cela n’est pas possible (pour une raison quelconque), la fonction VBA suivante définie par l’utilisateur peut être utilisée:

Function SecLine(x) As String     Dim B1 As Integer     Dim B2 As Integer          B1 = InStr(x, Chr(10))

B2 = InStr(B1 + 1, x, Chr(10))

If (B1 + B2) > 0 Then         If B2 > 0 Then             SecLine = Mid(x, B1 + 1, B2 – B1 - 1)

Else             SecLine = Mid(x, B1 + 1)

End If     End If End Function

Pour utiliser cette routine, insérez simplement ce qui suit dans les cellules de la colonne B:

=SecLine(A2)

Quel que soit le nombre de lignes dans la cellule A2 (dans ce cas), la fonction renvoie une chaîne représentant la valeur de la deuxième ligne.

_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 (2252) s’applique à Microsoft Excel 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban d’Excel (Excel 2007 et versions ultérieures) ici:

link: / excelribbon-Non-standard_Sorting [Non-standard Sorting].