formateur informatique

Fréquences de répétitions des lettres en VBA Word

Accueil  >  Bureautique  >  Word  >  Word VBA  >  Fréquences de répétitions des lettres en VBA Word
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Fréquence des lettres

A des fins statistiques, nous allons apprendre dans ce nouveau volet à calculer la fréquence de répétition des caractères et plus précisément des lettres présentes dans le document. Et pour cela, c'est une nouvelle astuce VBA Word qui va nous permettre de parcourir tout le document caractère à caractère.

Document source
Pour la mise en place de cette nouvelle astuce, nous proposons tout d'abord de récupérer un document offrant quelques paragraphes. Nous découvrons effectivement un document constitué de quelques paragraphes. Ils ont été insérés automatiquement grâce à une fonction de Word que nous avions démontrée à l'occasion de la toute première astuce de cette série.

Procédure et variables
Pour entrer dans le vif du sujet, nous devons commencer par créer la procédure pour accueillir le code VBA destiné à livrer ces statistiques.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Word,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément ThisDocument,
Ainsi, nous affichons la feuille de code attachée au document en cours, au centre de l'écran. Bien entendu, elle est vierge pour l'instant. Pour une macro utilisable par tous les documents Word, nous devrions la coder dans un module de l'élément Normal. Il s'agit du modèle Word. C'est à vous de choisir.
  • Dans la feuille de code, créer la procédure compterCar comme suit :
Sub compterCar()

End Sub


Maintenant qu'elle existe, nous pouvons initialiser les variables nécessaires au développement.
  • Dans les bornes de la procédure, ajouter les déclarations de variables suivantes :
Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String


End Sub


Nous déclarons tout d'abord un tableau de variables (tabCar) capable d'accueillir 26 éléments (0 To 25) pour les 26 lettres de l'alphabet. Il est déclaré comme un tableau d'entiers car ce sont les codes Ascii de ces lettres que nous allons y stocker. Ensuite, nous déclarons une variable (i) comme un entier court. Son rôle est de prélever le code Ascii de la lettre en cours d'analyse dans le document. Ce sont ces valeurs que nous devrons stocker dans le tableau de variables. Puis, nous déclarons une variable (chaqueCar) que nous ne typons pas (As Variant). Elle doit servir à parcourir chaque caractère du document. Son type sera forcé par la boucle For Each que nous devons engager. Enfin nous déclarons la variable retour comme un texte (As String). C'est elle qui doit consolider les statistiques de fréquence des lettres pour les restituer sur un nouveau document Word.

Parcourir les caractères du document
Il est maintenant question d'analyser chaque caractère du document.
  • A la suite du code de la procédure, créer la boucle For Each suivante :
Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String

For Each chaqueCar In ActiveDocument.Characters
i = Asc(chaqueCar)

Next chaqueCar


End Sub


La propriété Characters de l'objet VBA Word ActiveDocument renvoie la collection de tous les caractères présents dans le document. C'est ainsi que dans cette boucle For Each, la variable chaqueCar est reconnue comme un caractère, celui en cours d'analyse, en partant du premier jusqu'au dernier. A chaque passage dans la boucle, donc pour chaque caractère les uns après les autres, nous prélevons les codes Ascii respectifs grâce à la fonction VBA Asc.

Analyser les lettres de l'alphabet
Nous devons utiliser ces codes Ascii identifiant les lettres pour incrémenter les répétitions dans le tableau de variables, à chaque fois qu'une même lettre est rencontrée. Il est important de savoir que la première lettre de l'alphabet (la lettre a) correspond au code Ascii 97 tandis que la dernière (la lettre z) correspond au code Ascii 122. Elles sont toutes dans l'enchaînement. Il est donc question d'ignorer tous les caractères dont les codes Ascii ne sont pas compris dans cette fourchette. Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String

For Each chaqueCar In ActiveDocument.Characters
i = Asc(chaqueCar)
If i >= 97 And i <= 122 Then

End If

Next

End Sub


C'est donc une double vérification que nous engageons pour nous assurer que le code précédemment prélevé est bien compris dans la fourchette des lettres de l'alphabet.

Comptabiliser les fréquences
S'il s'agit bien d'une lettre de l'alphabet, à chaque fois qu'elle est rencontrée, il est question d'incrémenter sa fréquence dans le tableau de variables sur la position correspondante. Mais attention, le tableau de variables démarre à la rangée zéro pour terminer à la rangée 25. Pour réajuster les codes Ascii sur ces emplacements, nous devons donc les décrémenter de quatre vingt dix-sept (97) unités.
  • Dans les bornes de l'instruction conditionnelle, ajouter la ligne VBA suivante :
Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String

For Each chaqueCar In ActiveDocument.Characters
i = Asc(chaqueCar)
If i >= 97 And i <= 122 Then
tabCar(i - 97) = tabCar(i - 97) + 1
End If
Next

End Sub


Ainsi, à chaque fois qu'une même lettre est rencontrée, son score de fréquence est incrémenté sur sa position réajustée de 97 unités dans le tableau de variables.

Statistiques de fréquences
Maintenant, il est question de rendre compte de ces résultats statistiques sur un nouveau document.
  • Après la boucle For Each, ajouter les deux instructions VBA suivantes :
Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String

For Each chaqueCar In ActiveDocument.Characters
i = Asc(chaqueCar)
If i >= 97 And i <= 122 Then
tabCar(i - 97) = tabCar(i - 97) + 1
End If
Next

Documents.Add
Selection.TypeText "Décompte des lettres en minuscules - Les majuscules ne sont pas comptées." & vbCrLf


End Sub


C'est tout simplement la méthode Add de l'objet VBA Word Documents qui permet de créer un nouveau document vierge. Dans l'enchaînement, nous exploitons la méthode TypeText de l'objet Selection pour inscrire un titre sur la première ligne de ce nouveau document.

Maintenant, nous devons passer en revue les 26 éléments du tableau de variables pour restituer les fréquences de répétition pour chacune des lettres de l'alphabet. Et pour cela,une boucle bornée For Next est particulièrement dédiée.
  • A la suite et fin de la procédure, ajouter la boucle For Next suivante :
Sub compterCar()
Dim tabCar(0 To 25) As Integer
Dim i As Byte: Dim chaqueCar As Variant
Dim retour As String

For Each chaqueCar In ActiveDocument.Characters
i = Asc(chaqueCar)
If i >= 97 And i <= 122 Then
tabCar(i - 97) = tabCar(i - 97) + 1
End If
Next

Documents.Add
Selection.TypeText "Décompte des lettres en minuscules - Les majuscules ne sont pas comptées." & vbCrLf

For i = 0 To 25
retour = Chr(i + 97) & " : " & tabCar(i) & vbCrLf
Selection.TypeText Text:=retour
Next i


End Sub


Nous parcourons donc les 26 éléments du tableau de variables. Nous restituons la lettre de l'alphabet associée au code Ascii grâce à la fonction VBA Chr (Chr(i + 97)). Puis, nous lui associons par concaténation (&) son score de répétition (tabCar(i)) avec un retour à la ligne (& vbCrLf) pour les énumérer toutes les unes en dessous des autres. Dès lors, sur ce nouveau document, nous exploitons de nouveau la méthode TypeText de l'objet VBA Selection pour inscrire un à un les résultats en dessous du titre précédemment inscrit.
  • Enregistrer les modifications (CTRL + S) puis exécuter le code (F5),
  • Dès lors, basculer sur Word (ALT + Tab),
Comme vous pouvez le voir, vous débouchez sur un nouveau document livrant les statistiques consolidées par le code VBA. Chaque lettre de l'alphabet est affichée avec sa fréquence en regard.

Statistiques de fréquences de répétition des lettres de l-alphabet dans un document Word en VBA

Par exemple, la dernière lettre de l'alphabet, la lettre z, est recensée à 22 reprises dans le document original. Et si sur ce document d'origine, vous engagez une recherche (CTRL + F) de la lettre z, vous constatez que le résultat fourni par la fenêtre de recherche corrobore parfaitement cette donnée statistique.

Nombre de répétitions pour une lettre dans un document Word

Néanmoins, des dissonances peuvent être trouvées dans la mesure où notre code VBA ne compte pas les lettres en majuscule à ce stade.

 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn