Premier espace à droite

Bonjour,

Dans une formule Excel,
Je cherche à extraire le prenom d'un chaine de noms et prenom. Exemple :

DUPONT DURANT Louis

donc il faut que je puisse déterminer le nombre de caractéres avant le premier 'espace en partant de la droite.

Merci pour votre aide
Configuration: Windows 2003 / Internet Explorer 6.0

6 réponses

  1. bonjour,

    j'ai rencontré un problème similaire il y a un moment
    et j'ai écris ça car il n'existe pas de fonction inverse.
    Si cela te convient alors pense à mettre en résolu

    =TrouveVersGauche(" ";A8;19) renverra 14

    =STXT(A8;F8;2) renverra <Espace L>
    Le code ci joint doit être mis dans un module

    Sub test()
    Dim X, Y As Integer
        Y = Len("DUPOND DURAND Louis")
        X = TrouveVersGauche(" ", "DUPOND DURAND Loius", Y)
    
    End Sub
    
    Public Function TrouveVersGauche(Charactère As String, Chaine As String, Position As Integer) As Integer
    Application.Volatile
    Dim i As Integer
    For i = Position - 1 To 0 Step -1
        If Mid(Chaine, i, 1) = Charactère Then
            TrouveVersGauche = i
            Exit For
        End If
    Next
    
    End Function
    0
    1. Oups Bidouilleu... je rafraichis pas et j'ai pas vu ton message. Pardon :)
      0
  2. Bonjour,

    Pour isoler le prénom, tu peux sélectionner la colonne avec noms et prénoms avec 3 ou 4 colonnes vides à droite

    => Données / Convertir / cocher délimité / et cocher l'espace comme séparateur / Terminer
    Chaque mot entre espace sera dans une colonne.

    S'il y a des noms composés sans trait d'union, ils seront scindés. Tu les regroupes sur une autre colonne en concaténant comme ceci =A1&" "&B1 et tu tires vers le bas
    Puis un copier / collage spécial / valeur sur les deux nouvelles colonnes nom et prénom récupérés pour figer, et tu peux supprimer le reste.

    Sinon, j'ai déjà vu une formule matricielle qui fait ça mais s'il y a des prénoms composés sans trait d'union, ça se complique... mais il y aura certainement d'autres idées !
    0
    1. Pas de mal
      moi j'ai simplifié comme je peux mais je précise que si la fonction ne trouve pas le charactère cherché elle renvoie #VALEUR

      ; )
      0
      1. Contributeur
        Bonjour tout le monde,

        et par formule :
        =STXT(A1;MAX((STXT(A1;LIGNE(1:50);1)=" ")*LIGNE(1:50));50)
        formule matricielle à valider par shift+ctrl+entrée
        Si la chaine peut dépasser les 50 car. modifier les 50 (3 fois)
        eric
        0
        1. Contributeur
          PS : une correction car j'avais oublié la recopie incrémentée vers le bas (merci argixu :-) ):
          =STXT(A1;MAX((STXT(A1;LIGNE($1:$50);1)=" ")*LIGNE($1:$50));50)

          et une autre intéressante qu'argixu n'a pas osé proposer :
          =DROITE(A1;EQUIV(" ";STXT(A1;NBCAR(A1) - LIGNE(INDIRECT("1:" & NBCAR(A1)));1);0))

          Toutes les 2 sont matricielles
          eric
          0