Extraire nom et prénom composé en VBA

maval

XLDnaute Barbatruc
Bonjour à tous.

Voilà, j'ai une liste de nom prénom sur une feuille " base de données", et donc dans ma colonne "A", j'ai des informations de type NOM PRÉNOM.
Alors en fait, ce que je voudrais faire, c'est séparer les nom et le prénom, c'est que ce n'est pas si simple : il y a des noms composés. Donc en général, il y a un tiret entre les deux noms, mais pas toujours (ex. DUPONT DURAND). Ensuite, même chose pour les prénoms : le tiret n'est pas toujours présent (ex. ANNE MARIE) et bien souvent en majuscule ou minuscule ou alors la première lettre en majuscule .
Donc je ne sais pas si c'est faisable, mais je voudrais séparer les noms et prénoms qui sont dans une même colonne, dans deux colonnes séparées "K:L".

Merci d'avance à ceux qui prendront la peine de m'aider.

Cordialement
Maval
 

Pièces jointes

  • Nom Prenom.xlsm
    9.3 KB · Affichages: 180
  • Nom Prenom.xlsm
    9.3 KB · Affichages: 209
  • Nom Prenom.xlsm
    9.3 KB · Affichages: 198

camarchepas

XLDnaute Barbatruc
Re : Extraire nom et prénom composé en VBA

Bonjour Maval,

Et oui pas facile, voir impossible en automatique .

Surtout si tu as un truc du genre : JEAN JACQUES FRANCOIS DE LA TRONCHE EN BIAIS.

Une des solution possible serait de te proposer les x combinaisons possibles et à toi de choisir.

Après tu peux aussi vouloir jouer l'intelligence artificielle, avec apprentissage des combinaisons probables .

Reste à savoir pour quel usage cela est destiné .

Sauf su tu veux travailler pour G.D.F ( Usine à gaz)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Extraire nom et prénom composé en VBA

Bonjour maval,

Comme à priori, il n'y a pas de règles bien définies, je procèderai de la façon suivante:

  • sélectionner la zone des Noms-Prénoms dans la colonne A
  • dans le menu (ruban) Données, choisir Convertir.
  • dans la boîte de dialogue, sélectionner le type délimité
  • cliquer sur Suivant
  • dans la boîte de dialogue, cocher l'espace comme séparateur
  • cliquer sur Terminer


Puis à la mimine, corriger toutes les lignes dont la colonne C n'est pas vide...
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Extraire nom et prénom composé en VBA

Bonjour Ma Pomme , re Maval.

En regardant ta liste , il n'y a pas de cas compliqué.

Donc juste un petit code sans prétention :

Code:
Option Explicit

Sub Decompose()
Dim Tourne As Long, FinLigne As Long
Dim Phrase As String
Dim Nom As String, Prenom As String
FinLigne = Range("A" & Rows.Count).End(xlUp).Row
For Tourne = 3 To FinLigne
Phrase = Range("A" & Tourne)
Nom = Split(Phrase, " ")(0)
Prenom = Split(Phrase, " ")(1)
Range("B" & Tourne) = Nom
Range("C" & Tourne) = Prenom
Next Tourne
End Sub
 

Pièces jointes

  • Nom Prenom.xlsm
    17 KB · Affichages: 289
  • Nom Prenom.xlsm
    17 KB · Affichages: 234
  • Nom Prenom.xlsm
    17 KB · Affichages: 223

maval

XLDnaute Barbatruc
Re : Extraire nom et prénom composé en VBA

Bonjour , Mapomme,

Je vous remercie beaucoup mais avec le code de Camarchepas qui me semble très bien est-il possible de convertir dans les colonnes les noms et prénoms comme c'est le cas mais avec uniquement les première lettres en majuscule ?

Un grand merci et un bon WE malgré la pluie

Maval
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Extraire nom et prénom composé en VBA

Bonjour maval, camarchepas

Un grand merci et un bon WE malgré la pluie

En Anjou côté pluie, ça donne... :p

Toute la pluie....jpg
 

newediu

XLDnaute Nouveau
Re : Extraire nom et prénom composé en VBA

Bonjour,
J'ai utilisé ce bout de code pour séparer nom et prénom, à l'identique, sauf que ma colonne est "D" au lieu de "A".
En réalité, je mets un petit bout de code supplémentaire qui identifie la colonne ayant le champ NOM :
Code:
Cells(1, [A1:X1].Find("NOM", LookAt:=xlWhole).Column).EntireColumn.Select
LaColonne = ActiveCell.Column

Dans ces conditions, je ne peux plus utiliser Range mais plutôt Cells (Tourne, LaColonne) pour positionner ma cellule active sur le premier nom à diviser.
Mon code devient :
Code:
FinLigne = Range(LaColonne & Rows.Count).End(xlUp).Row
For Tourne = 2 To FinLigne
'Phrase = Range("D" & Tourne)
Phrase = Cells(Tourne, LaColonne)

Nom = Split(Phrase, " ")(0)
Prenom = Split(Phrase, " ")(1)
Range("B" & Tourne) = Nom
Range("C" & Tourne) = Prenom
Next Tourne

J'ai des erreurs en pagaille et notamment la 13. J'ai mis Phrase, Nom et Prenom en variant
Voilà un code qui ne bugue pas mais qui ne splite pas...
Code:
Cells(1, [A1:X1].Find("NOM", LookAt:=xlWhole).Column).EntireColumn.Select
LaColonne = ActiveCell.Column

FinLigne = Range("A" & Rows.Count).End(xlUp).Row
For Tourne = 2 To FinLigne
'Phrase = Range("D" & Tourne)
Phrase = Cells(Tourne, LaColonne)
Nom = Split(Phrase, " ")
Prenom = Split(Phrase, " ")
Range("E" & Tourne) = Nom
Range("F" & Tourne) = Prenom
Next Tourne
En sachant que E et F devront être la colonne + 1 et + 2 de l'active column...
Quelqu'un peut-il m'aider ?
merci d'avance.
ED.


Bonjour Ma Pomme , re Maval.
En regardant ta liste , il n'y a pas de cas compliqué.
Donc juste un petit code sans prétention :
Code:
Option Explicit
Sub Decompose()
Dim Tourne As Long, FinLigne As Long
Dim Phrase As String
Dim Nom As String, Prenom As String
FinLigne = Range("A" & Rows.Count).End(xlUp).Row
For Tourne = 3 To FinLigne
Phrase = Range("A" & Tourne)
Nom = Split(Phrase, " ")(0)
Prenom = Split(Phrase, " ")(1)
Range("B" & Tourne) = Nom
Range("C" & Tourne) = Prenom
Next Tourne
End Sub
 
Dernière édition:

newediu

XLDnaute Nouveau
Re : Extraire nom et prénom composé en VBA

Merci pour cette piste !
Effectivement LaColonne récupère la lettre...
Cela me permet de redéclarer Phrase, Nom et Prenom en string et de réintroduire la Range.
Mon split ne fonctionne pas mais...
Si je mets en dur du texte dans Nom et Prenom, tout baigne. Autrement dit, il ne reconnait pas la valeur dans Phrase comme étant deux mots. Il prend pour Nom, l'ensemble de la chaine et pour Prenom, j'ai une erreur 9. C'est cohérent.
Ce code fonctionne :
Code:
FinLigne = Range(LaColonne & Rows.Count).End(xlUp).Row
  For Tourne = 2 To FinLigne
    'Phrase = Range(LaColonne & Tourne)
    Phrase = "Je suis"
    Nom = Split(Phrase, " ")(0)
    Prenom = Split(Phrase, " ")(1)
    Range("E" & Tourne) = Nom 'resultat : Je
    Range("F" & Tourne) = Prenom 'resultat : suis
  Next Tourne

Ma question serait : comment puis-je faire pour qu'il identifie le texte de la cellule "Prenom Nom" comme deux mots ?
ED

Bonjour ,

Sauf si l'on obtient la lettre de la colonne contenant non ?

dim laColonne as string
LaColonne = Split(Range("A1:X1").Find("NOM", LookAt:=xlWhole).Address, "$")(1)
 
Dernière édition:

newediu

XLDnaute Nouveau
Re : Extraire nom et prénom composé en VBA

Bonjour,
Je pensais avoir la réponse en convertissant la colonne de format standard en format texte...
Mais en réalité, je dois me mettre dans la cellule qui contient "Prenom Nom" et supprimer l'espace entre Prenom et Nom puis en remettre un nouveau... Quelle galère. Y aurait-il un moyen par VBA de réaliser cette opération avant de lancer mon Split ?..
ED
 
Dernière édition:

newediu

XLDnaute Nouveau
Re : Extraire nom et prénom composé en VBA

Je me réponds à moi même... pour la postérité...
Je fais un copier des valeurs sans format avant de lancer ma macro. Et ça baigne !
Merci de m'avoir lu

Bonjour,
Je pensais avoir la réponse en convertissant la colonne de format standard en format texte...
Mais en réalité, je dois me mettre dans la cellule qui contient "Prenom Nom" et supprimer l'espace entre Prenom et Nom puis en remettre un nouveau... Quelle galère. Y aurait-il un moyen par VBA de réaliser cette opération avant de lancer mon Split ?..
ED
 

newediu

XLDnaute Nouveau
Re : Extraire nom et prénom composé en VBA

La première partie de mes splits fonctionne maintenant et c un peu grace à toi !
Maintenant, j'ai un autre défi à relever mais je n'ai pas encore bcp cherché mais enfin, voila.

J'ai une colonne A avec une date (format cellule standard)
Je souhaiterais pouvoir spliter en vba la cellule en 2 avec d'un coté le mois écrit en toutes lettres et de l'autre l'année
Autrement dit, j'aurais :
15/11/2015 dans la colonne A
15 novembre dans la colonne B
2015 dans la colonne C.

Toute piste pour y arriver sera la bienvenue.
Merci d'avance
ED.

Ed ,

Si tu pouvais juste me mettre ce que tu as et ce que tu veux en 3 ou 4 lignes dans un Excel ce serait plus claire.

Je pense qu'il faut reparamétrer le split ....
 

Discussions similaires

  • Question
Microsoft 365 Nom et prénom
Réponses
3
Affichages
289

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 182
dernier inscrit
moutassim.amine