Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/11/2011, 09h25   #1
Membre à l'essai
 
Inscription : avril 2009
Messages : 53
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 53
Points : 20
Points : 20
Par défaut Compter TOUS les mots colorés

Bonjour,

Je voudrais simplement compter tous les mots coloré d'un document...mais vraiment tous! C'est à dire ceux qui sont en entête et dans les "pseudo-images" aussi (pseudo-images, c'est les "dessin" de word, vecteur je crois ou un truc comme ça) ainsi que les mots qui ont été supprimé (le suivi des modifications est activé bien sûr ^^)

Pour l'instant, mon code ne compte que les mots qui sont dans le "contenu" du document, pas l'entête/pied de page ni les dessins ni les mots supprimés.

Apparemment, les images et les entête/pieds de page ne font pas parti des paragraphes de base. Et les mots supprimés ne sont pas pris en compte =s

Merci à ceux qui voudrait bien m'aider

EDIT:
J'ai trouvé comment prendre en compte les entêtes et pieds de page, en passant par les Sections.
Par contre, Section.Headers et Section.Footers, c'est pareil quelle que soit la section apparemment, ça contient tous les entêtes/pieds de page du document j'ai l'impression...c'est bizarre
Du coup, ça marche, mais ça ne compte qu'une fois les entêtes/pieds de page et pas autant de fois qu'ils apparaissent (sur chaque page de la section normalement...à moins que je comprenne mal la notion de "Section" )

Donc, il faut savoir comment compter les entêtes/pieds de page le "bon nombre de fois" et comment compter les mots se trouvant dans une image vectorielle (c'est comme ça que s'appelle les dessins word? )

J'attends vos commentaires/aides/insultes

Re EDIT ^^ :
J'ai réussi à prendre en compte les "images" (appeler "Formes Automatique"...enfin je crois ) en utiliser la collection Shapes, par contre, je n'ai pas réussi à récupérer les mots sans sélectionner les shapes (Shape.Select), si quelqu'un sait comment faire, je suis tout ouïe
Voici le code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
Private Type chooseColor
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    rgbResult As Long
    lpCustColors As String
    Flags As Long
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
 
Private Declare Function ChooseColorAPI Lib "comdlg32.dll" Alias _
"ChooseColorA" (pChoosecolor As chooseColor) As Long
 
Private Declare Function FindWindow Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
 
Private Function GetWinwordHwnd() As Long
    Dim hWnd As Long
 
    hWnd = FindWindow("opusApp", vbNullString)
    GetWinwordHwnd = hWnd
End Function
 
Private Function ColorChooser() As Long
    Dim cc As chooseColor
    Dim lReturn As Long
 
    cc.lStructSize = Len(cc)
    cc.hwndOwner = GetWinwordHwnd()
    cc.hInstance = 0
    cc.lpCustColors = StrConv("Red", vbUnicode)
    cc.Flags = 0
 
    lReturn = ChooseColorAPI(cc)
    ColorChooser = 0
    If lReturn <> 0 Then
       ColorChooser = cc.rgbResult
    End If
End Function
 
Function RemovePunctuation(str As String) As String
    Dim mot As String
    mot = CStr(str)
    mot = Replace(mot, ".", " ")
    mot = Replace(mot, ",", " ")
    mot = Replace(mot, "-", " ")
    mot = Replace(mot, "!", " ")
    mot = Replace(mot, "#", " ")
    mot = Replace(mot, """", " ")
    mot = Replace(mot, "$", " ")
    mot = Replace(mot, "%", " ")
    mot = Replace(mot, "'", " ")
    mot = Replace(mot, "(", " ")
    mot = Replace(mot, ")", " ")
    mot = Replace(mot, "*", " ")
    mot = Replace(mot, "+", " ")
    mot = Replace(mot, "?", " ")
    mot = Replace(mot, "@", " ")
    mot = Replace(mot, "[", " ")
    mot = Replace(mot, "]", " ")
    mot = Replace(mot, "\", " ")
    mot = Replace(mot, "_", " ")
    mot = Replace(mot, "{", " ")
    mot = Replace(mot, "}", " ")
    mot = Replace(mot, "|", " ")
    mot = Replace(mot, "~", " ")
    mot = Replace(mot, "&", " ")
    mot = Replace(mot, "/", " ")
    mot = Replace(mot, ";", " ")
    mot = Replace(mot, ":", " ")
    mot = Replace(mot, "`", " ")
    mot = Replace(mot, "^", " ")
    mot = Replace(mot, "£", " ")
    mot = Replace(mot, "°", " ")
    mot = Replace(mot, "=", " ")
    mot = Replace(mot, "§", " ")
    mot = Replace(mot, "<", " ")
    mot = Replace(mot, ">", " ")
    mot = Replace(mot, "¤", " ")
    mot = Replace(mot, Chr(7), " ")
    mot = Replace(mot, Chr(11), " ")
    mot = Replace(mot, Chr(13), " ")
    mot = Replace(mot, Chr(133), " ")
    mot = Replace(mot, Chr(147), " ")
    mot = Replace(mot, Chr(148), " ")
    mot = Replace(mot, Chr(150), " ")
    mot = Replace(mot, Chr(171), " ")
    mot = Replace(mot, Chr(187), " ")
    RemovePunctuation = mot
End Function
 
Sub wordCount()
    Dim colorToFind As Long
    Dim mot As String
    Dim coloredWordsCount As Long
 
    colorToFind = ColorChooser
 
    coloredWordsCount = 0
 
 
 
    For Each h In Sections.First.Headers
        For Each W In h.Range.Words
            mot = RemovePunctuation(W.Text)
            If Trim(mot) <> "" And W.Font.Color = colorToFind Then
                coloredWordsCount = coloredWordsCount + 1
            End If
        Next W
    Next h
    For Each f In Sections.First.Footers
        For Each W In f.Range.Words
            mot = RemovePunctuation(W.Text)
            If Trim(mot) <> "" And W.Font.Color = colorToFind Then
                coloredWordsCount = coloredWordsCount + 1
            End If
        Next W
    Next f
    For Each s In Sections
        For Each W In s.Range.Words
            mot = RemovePunctuation(W.Text)
            If Trim(mot) <> "" And W.Font.Color = colorToFind Then
                coloredWordsCount = coloredWordsCount + 1
            End If
        Next W
    Next s
    For Each s In Shapes
        s.Select
        For Each W In Selection.Range.Words
            mot = RemovePunctuation(W.Text)
            If Trim(mot) <> "" And W.Font.Color = colorToFind Then
                coloredWordsCount = coloredWordsCount + 1
            End If
        Next W
    Next s
 
    MsgBox (coloredWordsCount)
End Sub
J'ai toujours le problème des mots supprimés, je continue à chercher si je trouve comment faire.

Si vous avez des idées, n'hésitez pas
Kazuko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/11/2011, 17h02   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 333
Points : 29 239
Points : 29 239
Salut,

Déjà :

Citation:
Du coup, ça marche, mais ça ne compte qu'une fois les entêtes/pieds de page et pas autant de fois qu'ils apparaissent (sur chaque page de la section normalement...à moins que je comprenne mal la notion de "Section" )
Ne sera pas possible.
Même s'il est affiché plusieurs fois, il n'est présent qu'une seule fois dans le document.

Pour les images, si le mot est un "vecteur", Word ne pourra pas le compter, il faut qu'il soit en texte.

Pour les Shapes, une fois sélectionnés, il faut travailler sur la Selection.

Code :
1
2
3
Shapes(1).Select
For Each myWd in Selection.Word
...
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/11/2011, 08h20   #3
Membre à l'essai
 
Inscription : avril 2009
Messages : 53
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 53
Points : 20
Points : 20
Bonjour, merci pour ton intérêt

Pour les entêtes, c'est pas bien grave, on peut, au pire, compter le nombre de page et faire une bête multiplication.
Pour les shapes, je sais, j'ai trouvé (sauf que c'est Shapes(1).Range.Word )

Pour les mots supprimés, une petite solution, passer en mode normal avant d'exécuter la macro (en activant les marques bien sûr), ça compte aussi les mots supprimés

Merci Oli pour ton aide

Donc, pour résumer, le code ci-dessus compte les mots en couleur que ce soit dans l'entête, le pied de page (une seule fois pour ceux-ci), le contenu du document, les "formes automatiques" (shapes) et, si on passe en mode d'affichage normal (Affichage > Normal) les mots supprimés sont aussi compter.
Si ça peut aider quelqu'un

Bonne journée
Kazuko est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h17.


 
 
 
 
Partenaires

Hébergement Web