Découper des chaines de caractères

fatima_i

XLDnaute Nouveau
Bonjour tout le monde,

Pourriez vous m'aider svp. en fait j'ai dans une même cellule( B) le nom + le prénom de la personne je veux les séparer pour avoir le nom dans une cellule (c) et le prénom dans une autre cellule (d), dans les noms et prénom j ai des cas particulier
ce n'est pas tjs un mot pour le prénom et un mot pour le nom

la particularité de ma base c'est que mes prénoms sont tjs en minuscule sauf la première lettre et les nom de famille en majuscule

donc quelle technique utiliser pour séparer le mots en majuscule des mots en minuscule (en tenant pas compte de la première lettre).
j'ai met en pièce jointe une capture d'écran qui montre la structure de ma base.
j'ai trouvé sur ce forum ce code mais il ne marche pas.

Sub Macro1()
Dim cel As Range 'déclare la variable cel
Dim x As Integer 'décalre la variable x

'boucle 1 sir toutes les cellules éditées de la colonne A
For Each cel In Range("A1:A" & Range("A65536").End(xlUp).Row)

'boucle 2 sur tous les caractères de la cellule
For x = 1 To Len(cel.Value)
'condition : si le caractère est une majuscule (voir code des caractères)
If Asc(Mid(cel.Value, x, 1)) > 65 And Asc(Mid(cel.Value, x, 1)) < 91 Then
cel.Offset(0, 1).Value = Left(cel.Value, x - 2) 'écrit le prénom en colonne B
cel.Offset(0, 2).Value = Mid(cel.Value, x) 'écrit le nom en colonne C
Exit For 'sort de la boucle 2
End If 'fin de la condition
Next x 'prochain caractère de la boucle 2
Next cel 'prochaine cellule de la boucle 1
End Sub



Une idée SVP??
 

Pièces jointes

  • excel.jpg
    excel.jpg
    56.9 KB · Affichages: 67
  • excel.jpg
    excel.jpg
    56.9 KB · Affichages: 68
  • excel.jpg
    excel.jpg
    56.9 KB · Affichages: 67

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Découper des chaines de caractères

Bonjour,

Code:
Function Prenom(chaine)
   Application.Volatile
   i = Len(chaine)
   Do While Asc(Mid(chaine, i, 1)) < 96 And i > 1
      i = i - 1
   Loop
   Prenom = Left(chaine, i)
End Function
Function Nom(chaine)
   Application.Volatile
   i = Len(chaine)
   Do While Asc(Mid(chaine, i, 1)) < 96 And i > 1
      i = i - 1
   Loop
   Nom = Mid(chaine, i + 2)
End Function

des exemples:

http://boisgontierjacques.free.fr/fichiers/fonctionsperso/Fonction_inverseNomPrenom.xls

JB
 

Pièces jointes

  • Classeur1.xls
    25.5 KB · Affichages: 86
  • Classeur1.xls
    25.5 KB · Affichages: 83
  • Classeur1.xls
    25.5 KB · Affichages: 91
Dernière édition:

mromain

XLDnaute Barbatruc
Re : Découper des chaines de caractères

bonjour,

une autre solution avec une fonction VBA aussi.

a+
 

Pièces jointes

  • Classeur4.xls
    31.5 KB · Affichages: 85
  • Classeur4.xls
    31.5 KB · Affichages: 87
  • Classeur4.xls
    31.5 KB · Affichages: 87

Catrice

XLDnaute Barbatruc
Re : Découper des chaines de caractères

Bonjour,

Ci-joint, une solution Macro

Edit : + les fonctions ....
 

Pièces jointes

  • Classeur1.xls
    32.5 KB · Affichages: 119
  • Classeur1.xls
    32.5 KB · Affichages: 124
  • Classeur1.xls
    32.5 KB · Affichages: 120
Dernière édition:

fatima_i

XLDnaute Nouveau
Re : Découper des chaines de caractères

Bonjour,

Code:
Function Prenom(chaine)
   Application.Volatile
   i = Len(chaine)
   Do While Asc(Mid(chaine, i, 1)) < 96 And i > 1
      i = i - 1
   Loop
   Prenom = Left(chaine, i)
End Function
Function Nom(chaine)
   Application.Volatile
   i = Len(chaine)
   Do While Asc(Mid(chaine, i, 1)) < 96 And i > 1
      i = i - 1
   Loop
   Nom = Mid(chaine, i + 2)
End Function



JB
Merci d'avoir me répondre.
Il faut mettre ce code dans un macro ou sous un bouton?

il m'affiche erreur de compilation end sub attendu.
 
Dernière édition:

fatima_i

XLDnaute Nouveau
Re : Découper des chaines de caractères

merci beaucoup sa marche. Mais j'ai un autre problème qui est:
- Normaliser la colonne prenom pour ne garder que le vrai prenom et non pas tous les prenoms de la personne. car en france dans les document juridique on met le vrai prenom suivi du prenom de son pere suivi du prenom de son parrain
il faut donc garder que le vrai prenom et eliminer les prenom juridique.
pour les femme il y a née et le nom de famille avant le mariage je veux aussi eliminer cela
la difficulté réside dans le fait que le vrai prenom est parfois composé donc pour avoir le vrai prenom on ne peut pas se contenter de garder que le premier mot, il faut garder les deux premier mot, comparer les 2 premiers mots a la liste des prenoms composé qui existe en france si les 2 premiers mots correspondent a un prenom compose alors on garde les 2 premiers mots comme prenom sinon on garde que le premier mot comme prenom.

avez vous des idées SVP?
 
Dernière édition:

fatima_i

XLDnaute Nouveau
Re : Découper des chaines de caractères

Bonjour,

sur la pièce jointe "liste_exemple" le prénom de la ligne 12 se compose de trois mot (Bernard christian julien) , on comparant les deux premiers mot avec tous les nom composé qui existe sur la liste "liste_référence" on le trouve pas donc je garde qu'un seule mot( le premier). par contre le prénom Jean philippe en ligne 18, on le trouve dans la liste référence donc on le grade comme il est.

les pièces jointes:

liste_exemple.jpg
liste_reference.jpg

Merci d'avance
 

Pièces jointes

  • liste_exemple.jpg
    liste_exemple.jpg
    33 KB · Affichages: 46
  • liste_reference.jpg
    liste_reference.jpg
    31.2 KB · Affichages: 46

fatima_i

XLDnaute Nouveau
Re : Découper des chaines de caractères

Pour résoudre le problème précédent j'ai fait ce script mais il m'affiche l'erreur d'exécution 9 l'indice n'appartient pas à la sélection.
Private Sub CommandButton2_Click()
Dim Tableau() As String
Dim prenomtest As String
Dim i As Long 'Integer
Dim j As Long 'Integer
Dim estcomp As Boolean
Dim prenom As String



For j = 1 To Worksheets("Feuil22").Range("C135").End(xlUp).Row
prenom = Cells(j, 3)

Tableau = Split(prenom, " ")
'tableau est désormé un tableau dans lequel se trouve les different prénom

prenomtest = Tableau(0) & " " & Tableau(1)



'prenomtest constien maintenant les deux premier prenom
' exemple pour jean francois marc prenomtest= jean francois

'Ensuite tu compares prenomtest à ta liste qui se trouve en feuil2 colonne A

estcomp = False
'For i = 1 To Feuil21.Range("A379528").End(xlUp).Row


For i = 1 To Worksheets("Feuil21").Range("A65536").End(xlUp).Row

'If Feuil21.Cells(i, 1) = prenomtest Then
If Worksheets("Feuil21").Cells(i, 1) = prenomtest Then
estcomp = True
Exit For
End If
Next i
Next j
If estcomp Then
' prenom = prenomtest
' ajouter par fifi
Worksheets("Feuil22").Cells(i, 3) = prenom
Else
'prenom = Tableau(0)
Worksheets("Feuil22").Cells(i, 3) = Tableau(0)
End If

'prenom contient maintenant le prenom de la personne composé ou non

MsgBox (prenom)


End Sub




pourriez vous m'aider à faire marcher ce code SVP?
 

Discussions similaires

Réponses
2
Affichages
187
Réponses
9
Affichages
477

Statistiques des forums

Discussions
312 613
Messages
2 090 236
Membres
104 463
dernier inscrit
lbo