0
votes

Comment extraire des mots en majuscules (avec au moins deux lettres)

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:

  • Jan H. NOVAK
  • Petr Karel POUZAR
  • Frantisek Ix GREGOR

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.


0 commentaires

3 Réponses :


0
votes

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


1 commentaires

Salut, cela fonctionne avec la condition Len (StrTmp)> 2. "." a également été compté à la longueur de la chaîne. Merci beaucoup!



0
votes

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))


0 commentaires

0
votes
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

0 commentaires