Compter les mots en enlevant les espaces et caractères spéciaux

zeduky

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de compter les mots d'une feuille de calcul en enlevant les caractères spéciaux tel que les espaces les ? ! $£ : etc ... j'ai bien trouvé une formule excel,mais très lourde et difficile à faire manipuler !! à mes collègues.

=SOMME(SI(NBCAR(SUPPRESPACE(DECALER(A1;1;0;NBVAL(A:A))))=0;0;NBCAR(SUPPRESPACE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DECALER(A1;1;0;NBVAL(A:A));",";" ");"?";" ");";";" ");".";" ");":";" ");"/";" ");"!";" ");"§";" ");"&";" ");"'";" ");"(";" ");"-";"");"_";" ");"@";" ");")";" ");"=";" ");"1";" ");"2";" ");"3";" ");"4";" ");"5";" ");"6";" ");"7";" ");"8";" ");"9";" ");"0";" ");"€";" ");"$";" ");"£";" ");"%";" ")))-NBCAR(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(SUBSTITUE(DECALER(A1;1;0;NBVAL(A:A));",";" ");"?";" ");";";" ");".";" ");":";" ");"/";" ");"!";" ");"§";" ");"&";" ");"'";" ");"(";" ");"-";"");"_";" ");"@";" ");")";" ");"=";" ");"1";" ");"2";" ");"3";" ");"4";" ");"5";" ");"6";" ");"7";" ");"8";" ");"9";" ");"0";" ");"€";" ");"$";" ");"£";" ");"%";" ");" ";""))+1))

Auriez vous une solution function vba avec function nbmots qui me convient bien si je pouvais intégrer de ne pas compter tous les caractères spéciaux et espaces !!

Public Function nbmots(cellules As Range)
Dim c As Range
Dim tablo

For Each c In cellules
tablo = Split(c, " ")
nbmots = nbmots + UBound(tablo) + 1
Next c

End Function


Milles merci d'avance :cool:
Pascal
 

Pièces jointes

  • compte les mots feuille sans caracteres speciaux.xls
    31.5 KB · Affichages: 19
  • compte les mots feuille sans caracteres speciaux.xls
    31.5 KB · Affichages: 23
  • compte les mots feuille sans caracteres speciaux.xls
    31.5 KB · Affichages: 23

Staple1600

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Bonjour à tous


Une petite macro glanée sur le net
Code:
Sub CountWords()
'source: Detong Technology Ltd.Hainan
Dim WordCount As Long
Dim Rng As Range
Dim S As String
Dim N As Long
For Each Rng In ActiveSheet.UsedRange.Cells
S = Application.WorksheetFunction.Trim(Rng.Text)
N = 0
If S <> vbNullString Then
N = Len(S) - Len(Replace(S, " ", "")) + 1
End If
WordCount = WordCount + N
Next Rng
MsgBox "Nombre de mots dans la feuille active: " & Format(WordCount, "#,##0")
End Sub
 
Dernière édition:

zeduky

XLDnaute Nouveau
Re : Compter les mots en enlevant les espaces et caractères spéciaux

bonjour JM
La macro est pas mal mais malheureusement elle me compte tous les caractères spéciaux et les chiffres et là est ma problématique je ne sais pas comment lui faire comprendre en vba
Mais merci qd même !
 

Staple1600

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Re

Il suffit dans ce cas au préalable de supprimer les caractères spéciaux (sur une copie de la feuille)
puis d’utiliser la macro précédente

ou alors d'utiliser les expressions régulières
(voir sur le net les infos sur le sujet)
 

zeduky

XLDnaute Nouveau
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Mais il existe pas un petit code vba qui pourrait me nettoyer tout ça ! que je pourrai inclure dans cette macro !!
Je ne suis pas du tout expert dans vb. j'ai fait deja pas mal de recherche sur ce sujet et d’où ma présence sur ce forum .. j'ai pas trouvé grand chose sur un code pour me nettoyer les caractères spéciaux et c'est pour ça que j'ai créé la formule ! mais elle est lourde et en matricielle !
Allez les codeurs donnez moi un coup de main :)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Re


Mets le volume à fond et bouge ton corps sur le dance-floor ;)
et laisse faire la grande Dalida (en lancant la macro O_Gemit_Dalida_Dans_VBA :)
Code:
Sub O_Gemit_Dalida_Dans_VBA()
RienQueDesMots
Parolesetparolesetparolesetparoles
End Sub

Private Sub RienQueDesMots()
Dim c As Range
With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "[^a-zA-Z0-9]"
For Each c In ActiveSheet.UsedRange.Cells
    If .test(c) Then c = VBA.Trim(.Replace(c, " "))
Next c
End With
End Sub
Private Sub Parolesetparolesetparolesetparoles()
Dim WordCount As Long
Dim Rng As Range
Dim S As String
Dim N As Long
For Each Rng In ActiveSheet.UsedRange.Cells
S = Application.WorksheetFunction.Trim(Rng.Text)
N = 0
If S <> vbNullString Then
N = Len(S) - Len(Replace(S, " ", "")) + 1
End If
WordCount = WordCount + N
Next Rng
MsgBox "Nombre de mots dans la feuille active: " & Format(WordCount, "#,##0")
End Sub
 

zeduky

XLDnaute Nouveau
Re : Compter les mots en enlevant les espaces et caractères spéciaux

JM
tu es un tube à toi tout seul !! enfin je vois le bout de code au loin :) juste un petit affinement :! peux tu aussi ne pas lui faire compter les chiffres !!
mais déjà c'est super muchos gracias
 

david84

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Bonjour,
une idée à tester et à compléter :
Code:
Public Function nbmots(cellules As Range)
Dim c As Range
Dim tablo

For Each c In cellules
    tablo = Split(Supprimer_car_spe(c.Value), " ")
    nbmots = nbmots + UBound(tablo) + 1
Next c

End Function

Function Supprimer_car_spe(mot As String) As String
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
  .Global = True
  .Pattern = "[!$]+" 'placer les autres caractères à éliminer entre les 2 crochets à la suite des 2 existants
  If .Test(mot) = True Then
    Supprimer_car_spe = Application.WorksheetFunction.Trim(.Replace(mot, ""))
  End If
End With
End Function
A+
 

Staple1600

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Re, Bonjour david84 ;)

zeduky
Dans mon précédent code, remplaces cette ligne
.Pattern = "[^a-zA-Z0-9]"
par
.Pattern = "[^a-zA-Z]"

david84
Tu peux expliquer pourquoi tu préfères utiliser Application.WorksheetFunction.Trim plutot que VBA.Trim comme je l'ai fait ?

EDITION: Bonjour pierrejean
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Bonjour à tous

Je l'ai pondu , je le poste
 

Pièces jointes

  • compte les mots feuille sans caracteres speciaux.xls
    36.5 KB · Affichages: 24
  • compte les mots feuille sans caracteres speciaux.xls
    36.5 KB · Affichages: 23
  • compte les mots feuille sans caracteres speciaux.xls
    36.5 KB · Affichages: 20

david84

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Re et le bonjour à pierrejean !
Tu peux expliquer pourquoi tu préféres utiliser Application.WorksheetFunction.Trim plutot que VBA.Trim comme je l'ai fait ?

Je préfère car le split utilise le séparateur " " donc autant nettoyer correctement la chaîne de caractères :
Code:
Sub toto()
Dim chaine As String
chaine = "   bonjour     staple       1600          "
MsgBox Trim(chaine)
MsgBox Application.WorksheetFunction.Trim(chaine)
End Sub
A+
 

Modeste geedee

XLDnaute Barbatruc
Re : Compter les mots en enlevant les espaces et caractères spéciaux

Bonsour®
expliquer pourquoi tu préfères utiliser Application.WorksheetFunction.Trim plutot que VBA.Trim comme je l'ai fait ?

différence entre :
Application.WorksheetFunction.Trim
équivalent de :SUPPRESPACE :supprime les espaces avant et après ainsi que les espaces redondants internes (i.e. ne laisse qu'un seul espace)
et
VBA.trim
supprime seulement les espaces avant et après
 

Discussions similaires

Réponses
306
Affichages
25 K

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16