Compter mots dans cellule

manuBX

XLDnaute Occasionnel
Bonjour LE FORUM
Une petite question pour un dimanche soir !!!:D:p:p

J arrive à compter le nombre de mots dans une cellule ou plusieurs même avec plusieurs espaces
=SI(A1="";"0";NBCAR(SUPPRESPACE(A1))-NBCAR(SUBSTITUE(SUPPRESPACE(A1);" ";""))+1)

=(SI(A1="";"0";NBCAR(SUPPRESPACE(A1))-NBCAR(SUBSTITUE(SUPPRESPACE(A1);" ";""))+1))+(SI(A8="";"0";NBCAR(SUPPRESPACE(A8))-NBCAR(SUBSTITUE(SUPPRESPACE(A8);" ";""))+1))


Est ce qu il y a plus simple comme formule ?:confused:
Et comment les transformer en macro
CI JOINT FICHIER
Si vous avez une idée je suis preneur !!!!!!!!!!!!:rolleyes:
A+
 

Pièces jointes

  • COMPTER NOMBRE MOT.xls
    25 KB · Affichages: 218

Tibo

XLDnaute Barbatruc
Re : Compter mots dans cellule

Bonjour,

Plus simple, pas certain, mais une proposition avec la fonction SOMMEPROD :

Avec la phrase en A1, en B1 :

Code:
=SOMMEPROD((STXT(SUPPRESPACE(A1);LIGNE(INDIRECT("1:"&NBCAR(SUPPRESPACE(A1))));
1)=" ")*1)+1

Je te laisse tester

@+
 

ROGER2327

XLDnaute Barbatruc
Re : Compter mots dans cellule

Bonsoir à tous
Une fonction personnalisée :
Code:
[COLOR="DarkSlateGray"][B]Function compteMots&(r As Range)
Dim sp, oCel As Range, x$, i&
   sp = Array(",", ";", ".", "!", "?", ":", "-", "'", Chr(160), vbLf, vbCr)
   For Each oCel In r.Cells
      x = CStr(oCel.Value)
      For i = 0 To UBound(sp)
         x = Replace(x, sp(i), Space(1))
      Next i
      x = WorksheetFunction.Trim(x)
      If x <> "" Then compteMots = compteMots + UBound(Split(x)) + 1
   Next oCel
End Function[/B][/COLOR]
L'argument de la fonction est une cellule ou une plage de cellules.​
ROGER2327
#3519


Vendredi 6 Merdre 137 (Saint Cucufat, mécène, SQ)
4 Prairial An CCXVIII
2010-W20-7T20:34:49Z
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Compter mots dans cellule

Re...
Je joins mon fichier de travail.
La fonction a été légèrement améliorée.​
ROGER2327
#3521


Vendredi 6 Merdre 137 (Saint Cucufat, mécène, SQ)
4 Prairial An CCXVIII
2010-W20-7T22:26:18Z
 

Pièces jointes

  • CompteMots_3521.xls
    20.5 KB · Affichages: 318
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Compter mots dans cellule

Bonjour, salut Tibo, Paritec et Roger,

Sous les fonctions complémentaires Morenfunc (à télécharger gratuitement sur la toile) il y a =NB.MOTS(texte;séparateur) qui le fait.

Cette fonction est toutefois limitée à une longueur de texte de 254 caractères.
 

manuBX

XLDnaute Occasionnel
Re : Compter mots dans cellule

Bonjour ROGER et le forum

Bravo et merci
Mais vu cette démonstration il faut m expliquer si POSSIBLE:rolleyes:
Vu mes connaissances en excel:(
1 ) la formule {=SOMME(SI(A1:A2="";"0";NBCAR(SUPPRESPACE(A1:A2))-NBCAR(SUBSTITUE(SUPPRESPACE(A1:A2);" ";""))+1))}
Pourquoi {} a quoi ils servent et comment les mettre je pige pas
est ce la fonction somme qui les mets ? je suppose que oui
je vais faire le test;)
2 ) la macro
si on pouvait la décortiquer en y mettant quelques explications
Parce qu il ya des termes que je:(:confused::eek:
Merci d avance
A+
 

ROGER2327

XLDnaute Barbatruc
Re : Compter mots dans cellule

Re...
  1. La formule est une formule matricielle : il faut la valider par Ctrl + Maj + Entrée, ce qui fera apparaître la mise en accolade.
  2. Code commenté :
    Code:
    [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]
Demandez des précisions en cas de besoin...​
ROGER2327
#3525


Samedi 7 Merdre 137 (Nativité de Monsieur Plume, propriétaire, SQ)
5 Prairial An CCXVIII
2010-W21-1T09:26:00Z
 

ROGER2327

XLDnaute Barbatruc
Re : Compter mots dans cellule

Re...
Merci ROGER ,PARITEC, TIBOet le FORUM

Merci pour les indications
il me reste à assimiler:eek:
Merci à tous
A+
Vous verrez que, finalement, ce n'est pas si difficile à assimiler. N'hésitez pas à aller voir dans les fichiers d'aide : par exemple, si la fonction Split() vous intrigue, l'aide fournie avec VBA vous éclairera utilement.​
Bon courage !

ROGER2327
#3527


Samedi 7 Merdre 137 (Nativité de Monsieur Plume, propriétaire, SQ)
5 Prairial An CCXVIII
2010-W21-1T09:56:22Z
 

pierrejean

XLDnaute Barbatruc
Re : Compter mots dans cellule

bonjour à tous

Je me permets une petite rectification à l'explication de ROGER :) :)
La fonction Trim() ote les espaces devant et derrière l'argument et non les espaces multiples dans l'argument
Pour s'en convaincre tester:

Code:
Sub essai()
MsgBox (UBound(Split(Trim(" 1          2 "), " ")))
End Sub
 

ROGER2327

XLDnaute Barbatruc
Re : Compter mots dans cellule

Re...
bonjour à tous

Je me permets une petite rectification à l'explication de ROGER :) :)
La fonction Trim() ote les espaces devant et derrière l'argument et non les espaces multiples dans l'argument
Pour s'en convaincre tester:

Code:
Sub essai()
MsgBox (UBound(Split(Trim(" 1          2 "), " ")))
End Sub
Entièrement d'accord avec vous, pierrejean !
C'est pourquoi je ne l'emploie pas, préférant utiliser WorksheetFunction.Trim qui, malgré l'homonymie, n'a strictement aucun rapport.

Quelques fonctions à tester :
Code:
[COLOR="DarkSlateGray"][B]Function tata(x)
   tata = WorksheetFunction.Trim(x)
End Function

Function toto(x)
   toto = Strings.Trim(x)
End Function

Function tutu(x)
   [COLOR="SeaGreen"]'Version laxiste de la précédente.[/COLOR]
   tutu = Trim(x)
End Function[/B][/COLOR]
ROGER2327
#3529


Samedi 7 Merdre 137 (Nativité de Monsieur Plume, propriétaire, SQ)
5 Prairial An CCXVIII
2010-W21-1T10:27:00Z
 

pierrejean

XLDnaute Barbatruc
Re : Compter mots dans cellule

Re

Il me faut donc vous presenter mes plus plates excuses pour n'avoir pas saisi cette nuance essentielle
Vous connaissant j'eusse du tourner 7 fois autour de mon clavier avant de taper une anerie
Et merci pour les tata ,toto et tutu que j'experimente de ce pas
 

Discussions similaires