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