Texte AnalyseChaine

Magic_Doctor

XLDnaute Barbatruc
Renvoie la totalité des mots ou le nombre de mots, en MAJUSCULES ou en minuscules ou commençant par une MAJUSCULE suivie de minuscules, contenus dans une chaîne de caractères.
Renvoie aussi la longueur de la totalité des mots ou celle du nombre de mots, en MAJUSCULES ou en minuscules ou commençant par une MAJUSCULE suivie de minuscules, contenus dans la même chaîne de caractères.

VB:
Function AnalyseChaine%(cadena$, x As Byte, Optional longueur As Byte = 0)
'************************************************************************
'Renvoie la totalité des mots ou le nombre de mots, en MAJUSCULES ou en minuscules ou commençant
'par une MAJUSCULE suivie de minuscules, contenus dans une chaîne de caractères.
'Renvoie aussi la longueur de la totalité des mots ou celle du nombre de mots, en MAJUSCULES ou en minuscules ou commençant
'par une MAJUSCULE suivie de minuscules, contenus dans la même chaîne de caractères.
'Magic_Doctor
'************************************************************************
'- cadena : une chaîne de caractères
'- x : si = 1 --> tous les mots quels qu'ils soient (chiffres y compris)
'      si = 2 --> mots en MAJUSCULES
'      si = 3 --> mots en minuscules
'      si = 4 --> mots commençant par une MAJUSCULE suivie de minuscules
'      si = 5 --> nombres
'- longueur : si longueur = 0 (ou omis) --> nombre de types de mots cherchés
'             si longueur = 1 --> somme de la longueur de tous les types de mots cherchés (espaces exclus)
'             si longueur = 2 --> somme de la longueur de tous les types de mots cherchés (espaces inclus)

Dim tmp, nbmots As Integer, mot() As String, i As Integer, lemot As String, n As Integer, nbmm As Integer
Dim longword As Byte, longallwords As Byte

    cadena = Application.WorksheetFunction.Trim(cadena)  'suppression de tous les éventuels espaces superflus de la chaîne
    tmp = Split(cadena, " ")
    nbmots = UBound(tmp) + 1                             'nombre total de mots (quels qu'ils soient) dans la chaîne
    mot = Split(cadena)
    
    For i = 1 To nbmots
        lemot = mot(i - 1)  'Option Base 0
        Select Case x
            Case 1  'tous les mots quels qu'ils soient (chiffres y compris)
                n = 1
                longword = Len(lemot)
            Case 2  'mots en MAJUSCULES
                n = IIf(IsNumeric(lemot), 0, IIf(UCase(lemot) = lemot, 1, 0))
                longword = IIf(IsNumeric(lemot), 0, IIf(UCase(lemot) = lemot, Len(lemot), 0))
            Case 3  'mots en minuscules
                n = IIf(IsNumeric(lemot), 0, IIf(LCase(lemot) = lemot, 1, 0))
                longword = IIf(IsNumeric(lemot), 0, IIf(LCase(lemot) = lemot, Len(lemot), 0))
            Case 4  'mots commençant par une MAJUSCULE suivie de minuscules
                n = IIf(IsNumeric(lemot), 0, IIf(Left(lemot, 1) = UCase(Left(lemot, 1)) And Mid(lemot, 2, 1) = LCase(Mid(lemot, 2, 1)), 1, 0))
                longword = IIf(IsNumeric(lemot), 0, IIf(Left(lemot, 1) = UCase(Left(lemot, 1)) And Mid(lemot, 2, 1) = LCase(Mid(lemot, 2, 1)), Len(lemot), 0))
            Case 5  'nombres
                n = IIf(IsNumeric(lemot), 1, 0)
                longword = IIf(IsNumeric(lemot), Len(CStr(lemot)), 0)
        End Select
        nbmm = nbmm + n  'nombre de mots
        longallwords = longallwords + longword  'somme des longueurs de tous les mots recherchés
    Next
    AnalyseChaine = IIf(longueur = 0, nbmm, IIf(longueur = 1, longallwords, longallwords + nbmm - 1))

End Function
 

Discussions similaires

Statistiques des forums

Discussions
315 127
Messages
2 116 538
Membres
112 774
dernier inscrit
Foudil59