[COLOR="DarkSlateGray"][B]Function compteMots&(r As Range)
[COLOR="SeaGreen"]'r est la plage de cellules à traiter.[/COLOR]
Dim sp, oCel As Range, x$, i&
[COLOR="SeaGreen"]'Le tableau sp contient la liste des caractères considérés comme séparateurs de mots. _
On peut en supprimer, ou en ajouter d'autres en fonction des besoins.[/COLOR]
sp = Array(",", ";", ".", "!", "?", ":", "-", "'", "(", ")", "...", """", "«", "»", "*", Chr(133), Chr(160), vbLf, vbCr)
For Each oCel In r.Cells [COLOR="SeaGreen"]'Pour chaque cellule de la plage...[/COLOR]
x = CStr(oCel.Value) [COLOR="SeaGreen"]'x prend la valeur de la cellule sous forme de chaîne de caractères.[/COLOR]
For i = 0 To UBound(sp) [COLOR="SeaGreen"]'Pour chaque caractère de la liste sp...[/COLOR]
x = Replace(x, sp(i), Space(1)) [COLOR="SeaGreen"]'...on remplace chacune de ses occurences par une espace.[/COLOR]
Next i
x = WorksheetFunction.Trim(x) [COLOR="SeaGreen"]'Remplacement des espaces consécutives par une espace unique.[/COLOR]
If x <> "" Then compteMots = compteMots + UBound(Split(x)) + 1 [COLOR="SeaGreen"]'La seule ligne un peu compliquée. _
Split(x) renvoie un tableau de base zéro dont les éléments sont les mots successifs contenu dans x. _
UBound(Split(x)) + 1 donne le nombre d'éléments du tableau Split(x). _
compteMots = compteMots + UBound(Split(x)) + 1 incrémente le nombre de mots. _
La condition If x <> "" Then ... fait que cette incrémentation n'a lieu que si la chaîne x n'est pas "".[/COLOR]
Next oCel
End Function[/B][/COLOR]