Extraction de 2 mots d'une chaîne

Bonjour

Une liste déroulante crée permet de saisir le nom, le prénom et la fonction d'une personne d'un seul tenant

ex : "Hidalgo Anne Maire de Paris"

Mais, parfois, il faut écrire "Anne Hidalgo Maire de Paris", le prénom passe avant le nom...

Autant, j'arrive à extraire le nom avec Instr, pour le stocker dans une variable ,autant je coince pour extraire le prénom et en faire de même.

Bien sûr, je pourrais réutiliser la même procédure avec le restant de la chaîne ( "Anne Maire de Paris") et en extraire le mot "Anne" mais n'y a t-il pas plus une écriture plus adaptée avec une autre instruction ?

Merci de vos avis

Salut jpmalb,

plutôt que instr, tu peux splitter ta string à partir d'un délimiteur, ici, l'espace.

Pour une string "Anne Hidalgo maire de Paris" en [A1] :

Dim tSplit
tSplit = Split([A1], Chr(32))
For x = 0 To UBound(tSplit)
    sMsg = sMsg & tSplit(x) & "/"
Next
MsgBox sMsg

Tu obtiens ainsi...

Anne/Hidalgo/maire/de/Paris

... tSplit(0) et tSplit(1) contenant les deux premiers mots de la string.

A+, pour une aide supplémentaire.

Merci pour ton aide .. et ce tuyau. Je ne connaissais pas split..je vais me renseigner là dessus..

je reviens là dessus....

voilà ce que j'ai écrit

Sub separ()

End Sub

... mon but, c'était de récupérer le nom et le prénom dans 2 variables...

A la première passe, ça marche mais la seconde m'affiche le nom et le prénom l'un derrière l'autre...

comment faire pour récupérer le second, seul ?

Bonjour,

comme tu sais quelles valeurs tu veux pas la peine de boucler, comme te l'avait indiqué Curulis :

tSplit(0) et tSplit(1) contenant les deux premiers mots de la string.

tSplit = Split([A1], " ")
nom=tSplit(0)
prénom=tSplit(1)

Mais j'espère pour toi que ta liste est bien faite et que tu as toujours nom et prénom en 0 et 1, et pas de noms composés.

Avec "De La poulardière Rémi" tu vas récupérer "De" et La"...

eric

Salut l'équipe,

pour terminer l'explication d'Eriiic et si c'est toi qui crée cette liste, peut-être peux-tu alors te permettre d'utiliser la virgule comme séparateur entre les différents éléments?

De la Poulardière, Pierre Edouard, palefrenier du Roi"

... ce qui ne nous garantit toujours pas l'ordre entre NOM et Prénom.

Claude, François, chanteur

...

Donc, dans ton cas, personnellement, le meilleur système, je pense...

acteur, Pierre, RICHARD / Pierre, acteur, RICHARD / RICHARD, acteur, Pierre

... est la meilleure solution qui te permettra de retrouver tes jeunes facilement.

Sachant que le code ASCII des majuscules va de 65 à 90, celui des minuscule de 97 à 122, avec l'excellente relation d'Eriiic, Pierre Edouard, palefrenier du Roi, DE LA POULARDIERE en [A1], tu peux faire...

Dim tSplit, sNOM$, sPrénom$
'
tSplit = Split([A1], ",")
For x = 0 To UBound(tSplit)
    If Asc(Left(tSplit(x), 1)) < 95 Then
        If Asc(Right(Trim(tSplit(x)), 1)) < 95 Then sNOM = Trim(tSplit(x))
        If Asc(Right(Trim(tSplit(x)), 1)) > 95 Then sPrénom = Trim(tSplit(x))
    End If
Next
MsgBox sNOM & "  " & sPrénom

L'usage de TRIM permet de se prémunir d'un souci d'encodage.

J'aurais pu utiliser...

tSplit = Split([A1], ", ")

...avec ", [ESPACE]" comme délimiteur mais si l'espace venait à manquer, le résultat serait FAUX.

Avec mes remerciements à Eriiic pour le coup de main...

A+

...merci pour ces explications et ce coup de main... matinal....

Bonne journée à tous

Rechercher des sujets similaires à "extraction mots chaine"