IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Statistiques dans une cellule donnée d'un tableau Word


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant Monétique
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Monétique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Statistiques dans une cellule donnée d'un tableau Word
    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:

    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
    -> Joie: ça marche...

    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):

    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
    -> Quel que soit le contenu de la cellule, j'ai en retour:
    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:
    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
    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é...)
    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!!!

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Ça me semble bien compliqué


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim stTemp As String
     
    ActiveDocument.Tables(1).Cell(3, 1).Select
    MsgBox Selection.Words.Count - 1
     
    End Sub
    Pour les caractères

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    Dim stTemp As String
    Dim i As Integer
     
    ActiveDocument.Tables(1).Cell(3, 1).Select
    MsgBox Selection.Characters.Count - 1
    For i = 1 To Selection.Characters.Count - 1
        Debug.Print i & " - " & Selection.Characters(i)
    Next i
     
    End Sub

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant Monétique
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Monétique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup pour votre réponse.

    Effectivement, la syntaxe proposée est beaucoup plus simple.

    J'ai toutefois encore un léger problème avec la partie comptage des caractères:
    Pour exemple, j'ai mis dans la cellule cible le texte suivant: "Je suis beau" (ce n'est un exemple, pas une certitude, malheureusement pour moi!! ;-)))
    Le comptage des mots me donne bien 3 mots, en revanche, la msgbox me livre 12 caractères, y compris donc les 2 espaces...
    Mais je pense que je n'ai pas tout à fait compris l'utilité de la boucle qui suit l'affichage de la msgbox; pouvez-vous éclairer la lanterne d'un malheureux bleu en la matière (dieu qu'il est loin, mon cher Cobol-CICS-DB2!!)???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ActiveDocument.Tables(1).Cell(2, 2).Select
    MsgBox Selection.Characters.Count - 1
    For i = 1 To Selection.Characters.Count - 1
        Debug.Print i & " - " & Selection.Characters(i)
    Next i
    Et bravo pour ce site et ses contributeurs!!! (si vous ouvrez un jour des rubriques 'gros système', je pourrais y apporter un peu je pense!)

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    La boucle, peut servir pour compter certains caractères.
    Je n'avais pas beaucoup de temps et je n'ai pas codé la boucle pour éliminer les espaces.
    Mais il suffit d'une variable en plus et d'une condition, si le caractère est différent d'un espace, on ajoute 1 à la variable.

    Ne pas oublier de réinitialiser la variable.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    j = 0
    For i = 1 To Selection.Characters.Count - 1
        If Selection.Characters(i) <> Chr(32) Then j = j + 1
    Next i
    Je pense que l'espace possède les code ASCII 32.

    La variable j contiendra le nombre de caractère sans les espaces.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant Monétique
    Inscrit en
    Janvier 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant Monétique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Simple et efficace: comme j'aime!
    Ce coup-çi, cela fonctionne à merveille.

    Merci beaucoup.

    PS: désolé pour l'absence de balises de code, je n'avais pas remarqué l'option; je ne le ferais plus, c'est promis!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire une chaine dans une cellule donnée
    Par Poor Frog dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 06/09/2013, 15h20
  2. Réponses: 4
    Dernier message: 17/04/2013, 11h46
  3. Réponses: 2
    Dernier message: 22/04/2010, 11h13
  4. Insérer une donnée RTF dans une cellule de tableau
    Par HomoErectus dans le forum VBA Word
    Réponses: 6
    Dernier message: 14/08/2009, 14h00
  5. Suppression d'une checkbox dans une cellule donnée
    Par bebe1310 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 27/06/2008, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo