Excel : Séparation Prénoms NOMS

Résolu
Bonjour,

Je souhaite vous communiquer une formule qui me sert deja à séparer des NOMS en MAJUSCULE suivis des Prénoms en Minuscule (juste 1ere lettre en maj.)

Vous serez t il possible de me donner le critère à modifier pourqu'il me sépare maintenant les Prénoms en Minuscules suivis des NOMS en MAJUSCULE ?????? SVP...

En d'autres termes :
Au début je voulai séparer : COMMENTCAMARCHE Paul
Et maintenant je cherche à faire : Paul COMMENTCAMARCHE

Voici ma belle macro :

Sub SepareNomPrenom()
Dim i As Integer
Dim vDerniereLigne
Dim Chaine As String
Dim vASC As Integer
Dim x As Integer, y As Integer
vDerniereLigne =3333
For i = 1 To 3333
Chaine = Range("A" & i).Value
y = 1
Do
x = InStr(y, Chaine, " ")
If x > 0 Then
vASC = Asc(Mid(Chaine, x + 2, 1))
Else
vASC = 0
End If
y = x + 1
Loop Until vASC < 65 Or vASC > 90 Or x = 0
If vASC <> 0 Then
Range("B" & i).Value = UCase(Left(Chaine, x - 1))
Range("C" & i).Value = (Right(Chaine, Len(Chaine) - x))
End If
Next i
End Sub

D'avance merci ! ! ! !

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Comprend pas trop ta demande et ton code mais ...
    pour inverser le nom et prénom
    nom en majuscules et prénom 1) majuscule puis miuscule

    tablo = Split(Range("A1"))  
     Range("A1") = Application.Proper(tablo(1)) & " " & UCase(tablo(0))

    :-x

    ainsi bidOChoN RObERt

    devient
    Robert BIDOCHON

    c'est ce que tu voulais ?
    1. bonjour,

      itou michel_m..

      Peo_o, as tu par hasard essayé ces formules ? :

      =GAUCHE(A1;CHERCHE(" ";A1)) te renvoi ce qui est avant le " "
      et
      =DROITE(A1;NBCAR(A1)-CHERCHE(" ";A1)) ce qui est après.

      et donc après tu en fait bien ce que tu veux : dans deux cellules différentes ou bien re-concaténer à l'envers :
      ==DROITE(A1;NBCAR(A1)-CHERCHE(" ";A1))&" "&GAUCHE(A1;CHERCHE(" ";A1))

      mais je pense que cela révèle sans doute qu'on ne comprend pas trop ce que tu veux faire...
      1. hello Michel.... pas tout à fait ça, mais j'ai la reponse ! ! ! ! mais MERCI pour ta réactivité ! ! !

        le but du jeu : j'ai :

        BIDAUCHON Pierrette TRUCMUCHE
        donc la premiere macro me separe :
        BIDAUCHON puis Pierrette TRUCMUCHE

        et la seconde macro pour séparer :
        Pierette puis TRUCMUCHE ! ! !

        et voici donc la seconde Macro :

        Sub SepareNomPrenom()
        Dim i As Integer
        Dim vDerniereLigne
        Dim Chaine As String
        Dim vASC As Integer
        Dim x As Integer, y As Integer
        vDerniereLigne =3333
        For i = 1 To 3333
        Chaine = Range("A" & i).Value
        y = 1
        Do
        x = InStr(y, Chaine, " ")
        If x > 0 Then
        vASC = Asc(Mid(Chaine, x + 2, 1))
        Else
        vASC = 0
        End If
        y = x + 1
        Loop Until vASC < 97 Or vASC >122 Or x = 0
        If vASC <> 0 Then
        Range("B" & i).Value = (Left(Chaine, x - 1))
        Range("C" & i).Value = (Right(Chaine, Len(Chaine) - x))
        End If
        Next i
        End Sub

        Merci ! ! ! ! ! !

        PS: Je n'arrive pas a faire fonctionner ta Macro???? pourtant j'ai ecris en A1 BIDAUCHON Robert et je la lance sur B1... mais ca marche pô.... Ai je fais une erreur, elle peut m'etre utile ! ! ! !

        D'avance merci
        1. Contributeur
          Ma macro remplaçait Nom Prénom par Prénom NOm dans la m^me cellule

          par exemple dans zone A1:A10 nom prénom

          for lig=1 to 10
          tablo=tablo(cells(lig,1))
          cells(lig,1) = Application.Proper(tablo(1)) & " " & UCase(tablo(0))
          next
        2. Merci, Michel_m ! ! ! !

          Belle journée

          PeOO
      2. Le code ci-dessous fait en une étape ce que tu as décrit :

        BIDAUCHON Pierrette TRUCMUCHE => BIDAUCHON  |  Pierrette  |  TRUCMUCHE


        Sub separerlesnoms()
        reste = ActiveCell.Value
        i = 1
            While InStr(reste, " ") > 0
                etape = Left(reste, InStr(reste, " "))
                reste = Right(reste, Len(reste) - InStr(reste, " "))
                ActiveCell.Offset(0, i).Value = etape
                i = i + 1
            Wend
          ActiveCell.Offset(0, i).Value = reste
        End Sub


        Code a modifier et à améliorer dans son fonctionnement si tu as bps de lignes à traiter évidemment...
        1. Hello Dobo69,

          merci pour ton aide, mais cette "action" est disponible directement en allant dans excel à l'onglet "Données/convertir - - - > separer par des espaces...

          Enfin, comme tu t'en doute, le but du jeu est de separer le nom (qui peut etre composé), le(s) prénom(s) et enfin le nom d'epouse (qui peut egalement etre composé)...

          mais j'ai mis en ligne ci-dessus la macro qui permet de le faire....

          Merci encore

          PeOO
          1. cette "action" est disponible directement en allant dans excel à l'onglet 
            oui OK, mais souvent une macro cherche à automatiser des actions faites souvent...
            Enfin, comme tu t'en doute
            , non justement : ta problématique n'était pas très clair. Maintenant que tu as expliqué, elle l'est un peu plus...
            Et je suis heureux pour toi que tu ais trouvé finalement. :-)
          2. Dobo69, bonjour,

            en relisant le post, et avec un peu plus d'experience aujourd'hui, je me rend compte qu'effectivement tout cela n'était pas très clair et que, je n'avai pas compris qu'il fallait ajouter une boucle pour étandre ta formule à toute une liste !!!

            Merci donc pour ta réponse du moment pleine de tact !!!!

            Il est souvent possible de confondre une maladresse ou incompréhension en malpolitesse ou j'menfoutisation... donc encore merci pour ton aide !!!

            belle continuation

            Peo_O