Bonjour,
Dans le cadre de mon travail, je me suis mis depuis peu à VBA, essentiellement sous Word 2003 dans un premier temps. Issu du monde 'grand système', j'ai quelque fois un peu de mal!!!
Ma problématique actuelle: je voudrais réaliser une macro pour pouvoir établir des statistiques (nombre de mots et de caractères) sur une cellule donnée d'un tableau Word.
Les statistisques sont ensuites reportées dans un autre tableau.
J'ai d'abord effectué ce codage, portant sur l'ensemble du tableau (le n° 1)à analyser, avec écriture du résultat dans le tableau n° 2:
-> Joie: ça marche...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 With ActiveDocument.Tables(1).Range wordCount = .ComputeStatistics(Statistic:=wdStatisticWords) charCount = .ComputeStatistics(Statistic:=wdStatisticCharacters) End With If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(2).Cell(Row:=3, Column:=2).Range .Delete .InsertAfter Text:="Mots: " & wordCount2 End With With ActiveDocument.Tables(2).Cell(Row:=3, Column:=3).Range .Delete .InsertAfter Text:="Chars: " & charCount2 End With End If
J'ai ensuite voulu réduire la portée du 'range' à une cellule donnée (la 2° de la deuxième colonne du 1° tableau):
-> Quel que soit le contenu de la cellule, j'ai en retour:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 With ActiveDocument.Tables(1).Cell(Row:=2, Column:=2).Range wordCount = .ComputeStatistics(Statistic:=wdStatisticWords) charCount = .ComputeStatistics(Statistic:=wdStatisticCharacters) End With If ActiveDocument.Tables.Count >= 1 Then With ActiveDocument.Tables(2).Cell(Row:=2, Column:=2).Range .Delete .InsertAfter Text:="Mots: " & wordCount1 End With With ActiveDocument.Tables(2).Cell(Row:=2, Column:=3).Range .Delete .InsertAfter Text:="Chars: " & charCount1 End With End If
Mots: 0
Chars: 0
J'ai pu vérifier (par .Select) que la cellule 'attaquée' était bien celle que je désirais, mais pas de résultat tout de même...
J'ai essayé une autre solution, trouvée sur le net:
Mais le comptage des mots prend en compte la marque de fin de cellule (pas trop grave, à la limite: il suffit de retrancher 1 et le tour est joué...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ActiveDocument.Tables(1).Cell(Row:=2, Column:=2).Select Selection.Find.Execute Replace:=wdReplaceAll -> Ca (au dessus), je ne vois pas franchement à quoi ça sert!! ActiveDocument.Tables(1).Cell(Row:=2, Column:=2).Select wordCount = Selection.Words.Count charCount = Selection.Characters.Count
Et le comptage des caractères prend en compte les espaces entre mots et la marque de fin de cellule, ce qui est plus génant pour moi (comment compter le nombre d'espaces, sinon??)....
Mes questions:
1. Quelqu'un a-t'il une solution???
2. Comme j'aime bien comprendre ce que je fais (et surtout ce que je n'arrive pas à faire!!): pourquoi les statistiques marchent quand le 'range' est défini sur tout le tableau, et pas quand il est défini sur une portion du tableau (cellule donnée, ligne entière ou colonne, j'ai testé les 3 avec le même résultats!!)... J'y perds mon VBA!! (Ce qui m'allège assez peu, je l'avoue, vu la faible étendue de mes connaissances !!).
En vous remerciant par avance!!!
Partager