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

Statistiques des forums

Discussions
312 206
Messages
2 086 219
Membres
103 158
dernier inscrit
laufin