!Déconcaténer... cellules sous Excel

Résolu
fran -  
 fran -
Bonjour,

Je recupére dans une colonne(Excel) des noms et prénoms concaténer dans le désordre le plus complet.
ex: pierre DURAND, DUPOND Jean etc...
Comment pourais-je faire ressortir les noms dans une colonne et les prénoms dans une autre colonne, sachant que les prénoms sont écrits en minuscule et les noms en majuscule. Mon patron me le réclamme bien évidemment pour demain (2000 cellules environ)
Merci de votre aide

françois

6 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Y a un peu plus court :-D
    Clic drpoit sur le nom de l'onglet >> Voir le code.
    dans le fenêtre qui s'ouvre tu colle ..
    Sub Separer()
    Dim Lig As Long, TB
        On Error Resume Next
        For Lig = 1 To Range("A65536").End(xlUp).Row
            TB = Split(Cells(Lig, 1), " ")
            If Asc(Right(TB(0), 1)) < 97 Then
                Cells(Lig, 2) = TB(0): Cells(Lig, 3) = TB(1)
            Else
                Cells(Lig, 3) = TB(0): Cells(Lig, 2) = TB(1)
            End If
        Next Lig
    End Sub

    Ensuite tu met le curseur DANS la macro et tu tape F5
    A+
    1
  2. Maxime
     
    A raison d'une personne par ligne c'est à dire UN nom et UN prénom ?

    Et comme séparateur espace ou virgule, toujours ?

    Et si tu veux que ça aille vite, réponds vite parce que moi dans 15 minutes, je décroche.
    0
    1. fran
       
      merci de l'interet à mon pb

      Oui un nom et un prenom par celule et par ligne
      ex: Cellule A2 = Jean DUPOND , résultat, cellule B2 DUPOND, cellule C2 Jean
      Cellule A3 = DURAND Pierre, résultat, cellule B3 DURAND, cellule C3 Pierre
      soit pouvoir ranger les noms en colonne B et les prénoms en colonne C

      Merci A+

      françois
      0
  3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Ce n'est pas très compliqué, en supposant que tes Noms et prénoms sont dans ta colonne A et que chaque nom et prénom est séparé par un espace
    mets la plage en colonne A en surbrillance, clic droit Copier/clic droit collage spécial/cocher valeur ce qui aura pour effet de supprimer la formule de concaténation et fixer les valeurs.
    Alors que la plage est toujours en surbrillance,
    sous 2003 données/Convertir/Délimité/suivant/cocher Espace/suivant et terminé

    sous 2007 onglet Données/module outils de données/Convertir/Délimité/suivant/cocher espace/suivant/terminé

    A+
    Mike-31

    Une période d'échec est un moment rêvé pour semer les graines du savoir.
    0
    1. Maxime
       
      Mike, ce n'est pas une formule, c'est une chaine toute pourrie... résultat d'une fonction ou d'une interface chaise-clavier, peu importe. On ne peut plus rien défaire, là pour autant que j'aie compris. Il faut donc parser, splitter...
      0
  4. Maxime
     
    Ok voici la bête :

    Tu fais F11 (éditeur VB), dans la partie gauche (tree), tu sélectionne la racine, clic droit, ajouter MODULE.

    Dans le module tu colles ceci :

    Option Explicit

    Function CleanString(Cel As Range) As String
    Dim Tmp As String
    Tmp = CStr(Cel)
    Tmp = Replace(Tmp, ",", " ")
    Tmp = Replace(Tmp, ";", " ")
    CleanString = Tmp
    End Function

    Function IsItCaps(S As String) As Boolean
    Dim i As Integer
    Dim Ok As Boolean
    Dim C As String
    Ok = True
    For i = 1 To Len(S)
    C = Mid(S, i, 1)
    If C < "A" Or C > "Z" Then
    Ok = False
    Exit For
    End If
    Next i
    IsItCaps = Ok
    End Function

    Function FirstName(Cel As Range) As String
    Dim Tmp As String
    Dim Found As Integer
    Dim Tbl() As String
    Tmp = CleanString(Cel)
    Tbl = Split(Tmp, " ")
    If UBound(Tbl) = 1 Then
    If IsItCaps(Tbl(0)) Then FirstName = Tbl(1) Else FirstName = Tbl(0)
    Else
    FirstName = "ErParmCount"
    End If 'UBount(Tbl) = 1
    End Function

    Function LastName(Cel As Range) As String
    Dim Tmp As String
    Dim Found As Integer
    Dim Tbl() As String
    Tmp = CleanString(Cel)
    Tbl = Split(Tmp, " ")
    If UBound(Tbl) = 1 Then
    If IsItCaps(Tbl(0)) Then LastName = Tbl(0) Else LastName = Tbl(1)
    Else
    LastName = "ErParmCount"
    End If 'UBount(Tbl) = 1
    End Function

    Puis dans ton tableau tu utilises

    =firstname(celluleconcaténée)
    =lastname(celluleconcaténée)

    Bonne soirée,
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    Salut Lermite, tu m'as pris de vitesse. J'étais parti sur des fonctions personnalisées, je reconnais les performences de ton code.
    je mets tout de même mes deux fonctions personnalisées

    Public Function Prenom_minus(zone As Range)
    Application.Volatile
    Dim tmpStr() As String, i As Long
    Prenom_minus = ""
    tmpStr = Split(zone(1, 1).Text, " ")
    For i = LBound(tmpStr) To UBound(tmpStr)
    If UCase(tmpStr(i)) <> tmpStr(i) Then Prenom_minus = Prenom_minus & tmpStr(i) & " "
    Next i
    If Len(Prenom_minus) <> 0 Then Prenom_minus = Left(Prenom_minus, Len(Prenom_minus) - 1)
    End Function

    Public Function Nom_Majusc(zone As Range)
    Application.Volatile
    Dim tmpStr() As String, i As Long
    Nom_Majusc = ""
    tmpStr = Split(zone(1, 1).Text, " ")
    For i = LBound(tmpStr) To UBound(tmpStr)
    If UCase(tmpStr(i)) = tmpStr(i) Then Nom_Majusc = Nom_Majusc & tmpStr(i) & " "
    Next i
    If Len(Nom_Majusc) <> 0 Then Nom_Majusc = Left(Nom_Majusc, Len(Nom_Majusc) - 1)
    End Function
    0
  7. fran
     
    re bonjour,

    Merci Maxime, lermitte222 et Mike-31, vous m'avez vraiment aidés ça marche merci encore et continuez ....

    françois
    0