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

  • Initiateur de la discussion Initiateur de la discussion xtothej
  • Date de début Date de début
  • Mots-clés Mots-clés
    excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
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 !
 
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
 
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
 
Re

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

•>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 😉)
 
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".
 
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
😉
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour