Scott cherche un moyen d’obtenir un « nombre de fréquences » de tous les caractères d’un document. Il aimerait savoir combien de fois chaque caractère, les codes ASCII 9 à 255, apparaît. Il est possible d’utiliser Rechercher et remplacer pour déterminer le nombre de caractères individuels (recherchez simplement un caractère en question puis remplacez-le par lui-même), mais une telle approche serait fastidieuse, au mieux, si vous deviez le faire pendant 247 différents codes de caractères pour obtenir les informations souhaitées.

Une telle tâche doit être effectuée avec une macro, mais il existe plusieurs façons de l’aborder. Une façon consiste à écrire une macro rapide qui parcourra chaque membre de la collection Character, en examinant chacun et en attribuant ce caractère à l’un des nombreux compteurs.

Sub CountChars1()

Dim iCount(0 To 255) As Integer     Dim i As Integer     Dim vCharacter As Variant     Dim sTemp As String

' Initialize the array     For i = 0 To 255         iCount(i) = 0     Next i

' Fill the array     For Each oCharacter In ActiveDocument.Characters        i = Asc(oCharacter)

iCount(i) = iCount(i) + 1     Next

' Add document for results     Documents.Add     Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255     For i = 9 To 255         sTemp = Chr(i)

If i < 32 Then sTemp = Trim(Str(i))

sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))

sTemp = sTemp & vbCrLf         Selection.TypeText Text:=sTemp     Next i End Sub

La macro utilise le tableau iCount pour accumuler les décomptes de chaque code de caractère, puis un nouveau document est créé pour afficher les résultats. (Le document de résultats peut être formaté comme vous le souhaitez.)

Cette approche peut bien fonctionner pour des documents relativement courts, jusqu’à quelques pages. Lorsque le document s’allonge, la macro ralentit. Pourquoi?

Parce qu’il faut beaucoup de temps pour utiliser la collection Characters pour une raison quelconque. Si la macro est trop lente pour vos documents, vous voudrez la modifier un peu pour qu’elle fonctionne uniquement avec des chaînes.

Sub CountChars2()

Dim iCount(0 To 255) As Long     Dim i As Long     Dim j as integer     Dim lCharCount As Long     Dim sDoc As String     Dim sTemp As String

' Initialize the array     For i = 0 To 255         iCount(i) = 0     Next i

' Assign document to a huge string     lCharCount = ActiveDocument.Characters.Count     sDoc = ActiveDocument.Range(0, lCharCount)



' Fill the array     For i = 1 to Len(sDoc)

j = Asc(Mid(sDoc, i, 1))

iCount(j) = iCount(j) + 1     Next

' Add document for results     Documents.Add     Selection.TypeText Text:="ASCII Character Count" & vbCrLf

' Only output codes 9 through 255     For i = 9 To 255         sTemp = Chr(i)

If i < 32 Then sTemp = Trim(Str(i))

sTemp = sTemp & Chr(9) & Trim(Str(iCount(i)))

sTemp = sTemp & vbCrLf         Selection.TypeText Text:=sTemp     Next i End Sub

Notez que cette version de la macro fourre tout le document dans une seule chaîne, sDoc. Cette chaîne peut ensuite être traitée très, très rapidement par la macro. (Un document de 635 pages n’a pris qu’environ 30 secondes à traiter sur mon système.) Étant donné que cette version est conçue pour fonctionner avec des documents plus longs, notez également que certains des types de variables ont été modifiés pour refléter la probabilité de comptes plus importants.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites WordTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / wordribbon-WordTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

WordTips est votre source pour une formation Microsoft Word rentable.

(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (411) s’applique à Microsoft Word 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban de Word (Word 2007 et plus tard) ici:

link: / wordribbon-Character_Frequency_Count [Character Frequency Count].