Monsieur Excel
Pour tout savoir faire sur Excel !

20 mai 2008

Inversion prénom(s) et nom

Dans une liste en colonne A, nous disposons du nom de famille, suivi par une virgule et enfin le(s) prénom(s) de la personne concernée. L'objectif est d’obtenir une liste avec le(s) prénom(s) puis – séparé par un simple espace – le nom de famille.

La formule utilisée en B2, puis recopiée vers le bas, est :
=stxt(A2;cherche(",";A2)+1;100)&" "&gauche(A2;cherche(",";A2)-1)

Remarque 1 – Nous avons vu grand pour le troisième argument de stxt() mais cela ne gêne en rien le résultat…

Remarque 2 – Nous sommes obligés de réaliser deux fois la même recherche de la position de la virgule, mais c’est le prix à payer pour tout calculer en une seule formule.

Remarque 3 – Ceux qui n’apprécient pas la fonction stxt() peuvent utiliser une formule un peu plus longue : =droite(A4;nbcar(A4)-cherche(",";A4))&" "&gauche(A4;cherche(",";A4)-1)

3 Commentaire(s):

  • En ce qui concerne la remarque 2, on peut utiliser un nom, pour éviter la répétition de la formule.

    1. Se placer en B2

    2. Définir ainsi le nom "Pos" (comme Position virgule : Fait référence à =CHERCHE(",";A2)

    NB - Il est IMPÉRATIF que le nom ait été défini en relatif : =CHERCHE(",";A2) et non =CHERCHE(",";$A$2). Ainsi, en B2, Pos renverra la position de la virgule en A2, tandis qu’en B5, c’est à la position de la virgule en A5 que correspondra Pos.

    On peut ensuite utiliser Pos dans la formule, à la place de la fonction CHERCHE(). Par exemple en B2 :

    =STXT(A2;Pos + 1;100) & " " & GAUCHE(A2;Pos - 1)

    By Anonymous Michel Gaboly, sur 10:54 AM  

  • Certes, Michel !

    On peut d'ailleurs, de la même façon, simplifier n'importe quelle formule dans laquelle un bloc donné est répété.

    L'inconvénient est que le gain en compacité qui en résulte est compensé par une perte en lisibilité du modèle.

    By Blogger Hervé Thiriez, sur 7:23 AM  

  • Voici une solution en VBA, un peu pesante, mais qui présente l'avantage de pouvoir être appliquée n'importe où sur le tableur, si les cellules intéressantes sont sélectionnées.

    Ce blog est une merveille! Je vais créer un compte Google.

    Joseph Wehbe

    Private Sub CommandButton1_Click()

    Rangee1 = ActiveCell.Row
    NbRangees = Selection.Rows.Count
    MsgBox (NbRangees)
    j = ActiveCell.Column

    For i = Rangee1 To Rangee1 + NbRangees - 1
    NomComplet = Cells(i, j)
    PosVirgule = InStr(NomComplet, ",")
    LongueurPrenom = Len(NomComplet) - PosVirgule
    LongueurNom = PosVirgule - 1

    Prenom = Right(NomComplet, LongueurPrenom)
    Nom = Left(NomComplet, LongueurNom)
    Cells(i, j + 1) = Prenom & " " & Nom
    Next

    End Sub

    By Anonymous Anonyme, sur 12:31 PM  

Enregistrer un commentaire

<< Accueil