Microsoft 365 Extraire un ou plusieurs mots commençant par une majuscule dans une chaine de caractères.

xtothej

XLDnaute Nouveau
Bonjour à tous,

Je sèche depuis une heure à trouver une formule matricielle ou sous-condition. Voici ma problématique :

J'ai dans ma colonne A un texte avec le nom d'une ville, par exemple :
20 km autour de St Martin du Mont

Je souhaiterais extraire dans la colonne B uniquement "St Martin du Mont".

J'ai plus de 4000 lignes, toutes différentes les unes des autres, le seul point commun que j'ai est la première lettre en Majuscule des villes que je souhaite extraire.

Vous trouverez ci-joint un exemple pour vous clarifier la situation.

Merci pour votre aide !
 

Pièces jointes

  • Extraction Villes.xlsx
    8.9 KB · Affichages: 12
Solution
Re

Oui, j'en ai une sous la main
(mais à utiliser avec parcimonie (peut-être) si 4000 lignes)
Je te laisse tester
=STXT(A1;MIN(SI(ESTERREUR(TROUVE(CAR(LIGNE(INDIRECT("65:90")));A1));"";TROUVE(CAR(LIGNE(INDIRECT("65:90")));A1)));9^9)
Formule matricielle à mettre en B1 puis recopie vers le bas
(à valider par CTRL+SHIFT+ENTER)
Test OK sur cet exemple
20 km autour de St Martin du Mont

Staple1600

XLDnaute Barbatruc
Re

Confiné pour confiné, j'ai épuisé mon stock de corvées dominicales
Alors chuis retourné dans VBE pour commettre cette petite fonction bancale
VB:
Public Function MotNP(S$) As String
Dim t, a, temp$
t = Split(S)
For Each a In t
If Left(a, 1) Like "[A-Z]" Then
temp = temp & " " & a
End If
Next a
MotNP = VBA.Trim(temp)
End Function
En théorie, elle fait pareil que celle du message#14 mais est plus simple à comprendre, non ?

PS: Suis pas sûr que le demandeur repasse, mais bon au moins le temps passe plus vite dans Excel.
 

patricktoulon

XLDnaute Barbatruc
re
il faut prendre en compte le fait qu'il y ai des mots en min entre 2 propercase
VB:
Function fonct(chaine As String)
    Dim t, a, deb&, i&
    deb = -1
    t = Split(chaine)
    For Each a In t
        i = i + 1
        If Left(a, 1) Like "[A-Z]" And deb = -1 Then deb = i - 1
        If deb > -1 Then If Left(a, 1) Like "[A-Z]" Then e = i -iif(i>0, 1,0)
    Next a
    For i = deb To e
    fonct = fonct & " " & t(i)
    Next
End Function
 

jmfmarques

XLDnaute Accro
Re, donc
Vous ne le savez peut-être pas tous, mais ce n'est pas pour les beaux yeux du roi de Prusse qu'il a été décidé qu'aucun nom de ville/village ne saurait comporter un ou plusieurs espaces, obligatoirement remplacés par des tirets.
Je vous laisse maintenant continuer sur cette lancée (de "récupération" de fautes), avec tous les aléas que cela implique
 

jmfmarques

XLDnaute Accro
ouais ... c'est d'ailleurs grâce à de telles disciplines que l'on sait par exemple distinguer saint Pierre, Saint-Pierre et saint-pierre dans
"j'ai prié saint Pierre dans l'église Saint-Pierre, puis me suis régalé avec un saint-pierre au restaurant du coin"
 

Discussions similaires

Statistiques des forums

Discussions
312 248
Messages
2 086 594
Membres
103 250
dernier inscrit
keks974