Nombre de fréquences de caractères (Microsoft Word)
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]
.