Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > Contribuez
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/11/2007, 21h15   #1
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
Par défaut Nombre de fois qu'apparait un mot dans un document et dans quelles pages

La procédure suivante recherche le mot spécifié, affiche le nombre de fois qu'il apparait et dans quelles pages:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Option Explicit
Option Compare Text
 
 
Sub RetrouverMotDocument()
    Dim Plage As Object, Wrd As Object
    Dim Cible As String
    Dim x As Integer, y As Integer
    Dim Tableau() As Variant
 
    'Permet de saisir le mot à rechercher
    Cible = InputBox("Saisissez le mot à rechercher:")
    If Cible = "" Then Exit Sub
 
    'Définit les mots contenus dans le document actif
    Set Plage = ActiveDocument.Content.Words
 
    'Boucle sur les mots
    For Each Wrd In Plage
        'Si le mot recherché est trouvé:
        If Cible = Wrd.Text Then
            'Sélectionne le mot trouvé
            Wrd.Select
 
            'S'il s'agit du premier mot trouvé dans la recherche
            If x = 0 Then
                'Redimensionne le tableau
                ReDim Preserve Tableau(1 To 2, 1 To 1)
                Tableau(1, 1) = 1
                'insère le numéro de page dans le tableau
                Tableau(2, 1) = "(Page " & _
                    Selection.Information(wdActiveEndPageNumber) & ")"
                x = Selection.Information(wdActiveEndPageNumber)
            Else
                'Si un même mot a déjà été trouvé dans le même page
                If x = Selection.Information(wdActiveEndPageNumber) Then
                    'Incrémente une unité dans le tableau
                    Tableau(1, UBound(Tableau, 2)) = Tableau(1, UBound(Tableau, 2)) + 1
                Else
                    'Redimensionne le tableau si le mot est trouvé dans une
                    'nouvelle page.
                    ReDim Preserve Tableau(1 To 2, 1 To UBound(Tableau, 2) + 1)
                    Tableau(1, UBound(Tableau, 2)) = 1
                    Tableau(2, UBound(Tableau, 2)) = "(Page " & _
                        Selection.Information(wdActiveEndPageNumber) & ")"
                    x = Selection.Information(wdActiveEndPageNumber)
                End If
            End If
        End If
    Next Wrd
 
    'On sort si aucun mot n'a été trouvé
    If x = 0 Then Exit Sub
 
    'Boucle sur les éléments du tableau pour afficher le résultat
    'dans la fenêtre d'exécution (Ctrl+G).
    For y = 1 To UBound(Tableau, 2)
        Debug.Print Tableau(1, y) & vbTab & Tableau(2, y)
    Next y
End Sub
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 01h08   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Par défaut Joli

Bravo,

Mais plutôt que de faire de la macro pour faire de la macro, il n'y a qu'à demander à Word de faire le boulot. Pour ça, il suffit de marquer le mot recherché comme un entrée de table (pour cela, il suffit d'utiliser la commande "Edition-Remplacer" sur tout le document), puis de demander à Word de générer une table d'index (pour cela, il suffit d'utiliser la commande "Insertion-Tables et index").

Sinon, très bo code de macro (compact, clair) c'est juste dommage de coder ce que Word c'est déjà faire
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2007, 17h30   #3
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonsoir

merci pour ton message. ta solution semble très interessante mais je n'ai pas réusi à la reproduire (Word2007).
Est ce que tu peux réexliquer ta procédure en détail.

bon week end
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 00h38   #4
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Par défaut Complément d'info

Salut,

Le plus simple est de commencer par rechercher le mot une fois, de la marquer comme une entrée d'index (pour les valeurs), pour cela, utilisez la commande "Insertion-Tables et index"-Onglet "Index", cliquez sur le bouton "Marquer entrée". Copiez le contenu du champ en l'occurrence "{XE "LeNomDeMonEntree" }", lancez la commande Rechercher-Remplacer avec le mot que vous voulez marquer et avec comme valeur de remplacement le contenu de la recherche concaténé avec le contenu du presse-papier (soit "^&^c" comme valeur de remlacement).

Pour retrouver les entrées avec les pages où vous désirez, il suffit alors de se positionner à l'endroit désiré et de demander à Word de générer la table d'index via la commande "Insertion-Tables et index". Vous verrez mieux le résultat en cochant l'option "Aligner les numéros de page à droite".

A+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 11h33   #5
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Bonjour Michel, Sepia,
Ce n'est pas "Marquer entrée" mais "Marquer tout" en laissant "Page courante" et la copie/remplacement n'est pas nécessaire.
Je reprends :
Code :
1
2
3
4
5
6
7
8
9
    1 - Recherche du mot 1 fois
    2 - Insertion -> Table & Index
    3 - Onglet Index
    4 - Marquer entrée
    5 - Marquer tout
Puis (rien à copier / Rechercher / Remplacer)
    6 - Se placer où l'on souhaite placer le récapitulatif (l'index)
    7 - Insertion -> Table & Index
    8 - Option "Sur une ligne"
La copie et le remplacement ne sont pas utiles et pour 1 seul mot, l'option "Sur une ligne" est préférable.

Ok, dans ces conditions, ça fonctionne.
Si à présent l'on souhaite placer les N° de pages dans un tableau() VBA afin de les traiter par macro, il sera nécessaire de relire l'index.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 12h04   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 354
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 354
Points : 29 270
Points : 29 270
Citation:
Envoyé par Sepia Voir le message
Bravo,


Sinon, très bo code de macro (compact, clair) c'est juste dommage de coder ce que Word c'est déjà faire
Mais certains membres du forum n'utilisent pas l'interface et génèrent les documents au départ d'une autre application qui n'est parfois pas une appli office.

Ce code peut avoir de l'intérêt.

Je sais que c'est un défaut que beaucoup d'entre nous possèdent, nous avons souvent recours au code.

Mais bon, c'est quand même un forum pour développeurs.

PS : les excuses sont faites pour s'en servir !
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2007, 12h46   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par Heureux-oli Voir le message
Mais certains membres du forum n'utilisent pas l'interface et génèrent les documents au départ d'une autre application qui n'est parfois pas une appli office.

Ce code peut avoir de l'intérêt.

Je sais que c'est un défaut que beaucoup d'entre nous possèdent, nous avons souvent recours au code.

Mais bon, c'est quand même un forum pour développeurs.
+1
Ta solution (révisée), Sepia, devrait faire l'objet d'une autre discussion Par macro, elle n'est pas intéressante et a en outre l'inconvénient de modifier le texte original.
Juste pour dire
Bonne journée
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h16.


 
 
 
 
Partenaires

Hébergement Web