J'ai besoin d'extraire les noms de famille, qui sont toujours écrits en majuscules, des cellules, où est écrit tout le nom. Le nom peut avoir différentes formes par exemple:
J'ai essayé de trouver des VBA sur le Web. J'ai trouvé celui-ci, mais il extrait également les prénoms d'une lettre qui sont également en majuscules:
Function UpperWords(str As Variant) As String Dim i As Integer, sTemp As String, StrTmp As String For i = 0 To UBound(Split(str, " ")) StrTmp = Split(str, " ")(i) If UCase(StrTmp) = StrTmp Then sTemp = sTemp & " " & StrTmp Next i UpperWords = Trim(sTemp) End Function
Je dois définir dans le VBA le mot majuscule que je veux à extraire contient au moins deux lettres.
Merci pour vos idées.
3 Réponses :
Ajoutez le test au Si:
Function UpperWords(str As Variant) As String
Dim i As Integer, sTemp As String, StrTmp As String
For i = 0 To UBound(Split(str, " "))
StrTmp = Split(str, " ")(i)
If UCase(StrTmp) = StrTmp And Len(StrTmp) > 1 Then sTemp = sTemp & " " & StrTmp
Next i
UpperWords = Trim(sTemp)
End Function
Salut, cela fonctionne avec la condition Len (StrTmp)> 2. "." a également été compté à la longueur de la chaîne. Merci beaucoup!
Si vous voulez extraire les noms de famille , vous pouvez utiliser une formule / une fonction pour faire exactement cela. La mise en majuscules ne semble pas pertinente.
Formule de la feuille de calcul
Function lastName(S As String) As String
lastName = Mid(S, InStrRev(Trim(S), " ") + 1)
End Function
UDF
=TRIM(RIGHT(SUBSTITUTE(TRIM(A1)," ",REPT(" ",99)),99))
Dim regEx As Object
Dim allMatches As Object
Dim Surname As Variant
Dim rng As Range
Dim cell As Range
Dim m As Match
Set rng = ThisWorkbook.Worksheets("Sheet2").Range("A1:A4")
For Each cell In rng
Set regEx = CreateObject("VBScript.RegExp")
With regEx
.IgnoreCase = True
.MultiLine = False
.Pattern = "\s([A-Z]+)$"
.Global = True
End With
Set allMatches = regEx.Execute(cell.Value)
For Each m In allMatches
Surname = m.SubMatches(0)
Debug.Print Surname
Next
Next cell