Décomposer une phrase en mots

Bonjour,

J'ai eu besoin d'une fonction capable de lire le xeme mot d'une phrase stockée dans une cellule. J'ai écrit ceci. Mais je suis certains que vous pourrez l'améliorer

la fonction prend deux arguments: la cellule à "lire" et l'index du mot à lire. Si ce second argument est omit, la fonction retourne le nombre de mots.

tous les commentaires sont les bienvenus.

Function xememot(mystr As String, Optional xieme As Integer)
 ' retourne soit le nombre de mot d'une chaine
 ' soit le xeme mot de cette chaine

    mylong = Len(mystr)
    Dim mots(255) As String
    ind_mot = 1
    flag_num = 0
        For i = 1 To mylong
            mylet = Mid$(mystr, i, 1)
            Select Case mylet
                Case " " 'debut de nouveau mot
                    ind_mot = ind_mot + 1
                    flag_num = 0
                    flag_signe = 0
                 Case "'"
                    mylet2 = Mid$(mystr, i + 1, 1)
                    Select Case mylet2
                        Case "s"
                            mots(ind_mot) = mots(ind_mot) & mylet & mylet2
                            i = i + 1
                        Case Else
                            ind_mot = ind_mot + 1
                            flag_num = 0
                            flag_signe = 0
                        End Select
                Case "a" To "z", "@" To "Z", "-", "À" To "ÿ"   
                    If flag_signe = 1 Then
                        ind_mot = ind_mot + 1
                        flag_num = 0
                        flag_signe = 0
                    End If
                    mots(ind_mot) = mots(ind_mot) & mylet
                    flag_num = 0
                Case 0 To 9
                    If flag_signe = 1 Then
                        ind_mot = ind_mot + 1
                        flag_num = 0
                        flag_signe = 0
                    End If

                    'en mode numérique, il faut faire attention aux "."
                    mots(ind_mot) = mots(ind_mot) & mylet
                    flag_num = 1
                Case "."
                    If flag_num = 1 Then 'si c'était un chiffre avant le point on lit le car suivant aussi
                        mylet2 = Mid$(mystr, i + 1, 1)
                        Select Case mylet2
                            Case 0 To 9
                                mots(ind_mot) = mots(ind_mot) & mylet & mylet2
                                i = i + 1
                            Case Else
                        End Select
                    End If
                Case Else
                    flag_signe = 1
            End Select
        Next i
        If xieme = 0 Then
            xememot = ind_mot
        Else
            xememot = mots(xieme)
        End If
End Function

salut le forum

Tu n'as pas pensé à la fonction Split

a=Split(Range("A1"))

Mytå

11dam06-v15-10-14.xlsm (168.59 Ko)

Comment ça marche ??

Ce doit etre interessant de la faire fonctionner mais comment

Merci de tes explications

Salut le forum

Novivevba45, tu copie le code donné par Fred dans un module standard.

Ensuite dans une feuille de clacul, tu cliques Fx, personnalisé et tu sélectionne la fonction.

Pour trouver le nombre de mots de la cellule A1

=xememot(A1)

Pour trouver le xième mot de la cellule A1 (ici le 6 ième)

=xememot(A1;6)

Mytå

Rechercher des sujets similaires à "decomposer phrase mots"