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

xtothej

XLDnaute Nouveau
Bonjour,

Effectivement, j'ai trouvé quelques threads qui évoquaient l'extraction de datas vers une autres cellules, mais les formules proposées ne correspondaient pas à ma demande.

Je suis totalement preneur si tu en as un sous la main !
 

Staple1600

XLDnaute Barbatruc
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

•>xtothej
Une autre formule (sortie de la poussière de mes archives)
(Toujours testée avec un seul exemple)
=STXT(A1;MIN(TROUVE(CAR(LIGNE(INDIRECT("65:90")));A1&"ABCDEFGHIJKLMNOPQRSTUVWXYZ"));9^9)
NB: Toujours à valider avec CTRL+SHIFT+ENTER
 

patricktoulon

XLDnaute Barbatruc
re
@Staple1600 la 2d ne fonctionne que pour la derniere valeur
Capture.JPG
 

Staple1600

XLDnaute Barbatruc
Re

Relire mes messages et s'apercevoir que je précise sur quoi j'ai fait le test :rolleyes:

•>xtothej
Et une dernière pour la route, non point une formule
(mais une fonction VBA personnalisée)
VB:
Function PREMAJ(R As Range) As String
Dim oMat As Object
With CreateObject("vbscript.regexp")
    .Pattern = "[A-Z]": .ignorecase = False
    If .test(R.Text) Then
    Set oMat = .Execute(R.Text)(0)
    PREMAJ = Mid(R.Text, oMat.firstindex + 1, 9 ^ 9)
    Else
    PREMAJ = "Aucune correspondance"
    End If
End With
End Function
A mettre dans un module standard
Puis en B1 => =PREMAJ(A1)
NB: à n'utiliser que sur un PC.
(patricktoulon saura te dire pourquoi ;))
 

jmfmarques

XLDnaute Accro
Bonjour

Je ne vois personnellement pas une réelle difficulté à faire ce qui ressort du titre, à savoir :
Extraire un ou plusieurs mots commençant par une majuscule dans une chaine de caractères.
qui n'a plus rien à voir avec ce que l'on lit par exemple ensuite :
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".
 

Staple1600

XLDnaute Barbatruc
Re

Je laisse le soin des tests au demandeur.
Moi, je suis dans la poussière de mes archives
D'où je viens de sortir ceci
VB:
Function ProperCaseWords(S As String) As String
Dim X As Long, TempText As String, Words() As String
TempText = S
For X = 1 To Len(TempText)
  If Mid(TempText, X, 1) Like "[!A-Za-z ]" Then Mid(TempText, X) = " "
Next
Words = Split(Application.Trim(TempText))
For X = 0 To UBound(Words)
  If Words(X) <> StrConv(Words(X), vbProperCase) Or Len(Words(X)) = 1 Then Words(X) = ""
Next
ProperCaseWords = Application.Trim(Join(Words))
'credits:R.Rothstein
End Function
Ce qui donnera en B1: St Martin Mont
;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous :),

Une autre fonction personnalisée [ ville(...) ] qui accepte les lettres majuscules accentuées en tête de mot.

VB:
Function Ville(x As String)
Dim t, i&, j&, v$
   t = Split(x)
   For i = 0 To UBound(t)
      If UCase(Left(t(i), 1)) <> LCase(Left(t(i), 1)) Then
         If UCase(Left(t(i), 1)) = Left(t(i), 1) Then Exit For
      End If
   Next i
   For j = UBound(t) To 0 Step -1
      If UCase(Left(t(j), 1)) <> LCase(Left(t(j), 1)) Then
         If UCase(Left(t(j), 1)) = Left(t(j), 1) Then Exit For
      End If
   Next j
   If j >= i Then
      v = t(i)
      For i = i + 1 To j: v = v & " " & t(i): Next
   End If
   Ville = v
End Function
 

Pièces jointes

  • xtothej- Extraction Villes- v1.xlsm
    17.4 KB · Affichages: 11

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 094
Membres
103 116
dernier inscrit
kutobi87