Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Word > Contribuez

Réponse
 
Outils de la discussion
Vieux 24/11/2007, 02h09   #1 (permalink)
Modérateur
 
Avatar de ouskel'n'or
 
Date d'inscription: février 2005
Localisation: Une petite rue qui "avait" un merle
Messages: 11 574
Par défaut Recherche d'un ou plusieurs mots d'une liste dans un Document - Trois options

Trois options (les deux premières ne nécessitent aucune sélection)

*********************************************************
1 - Le tableau Word et le texte objet de la recherche sont situés dans le même document.
La liste des mots à rechercher est située dans la colonne 1 d'un tableau à deux colonnes placé dans la section 1.
Le texte objet de la recherche est placé dans la section 2

Code :
Sub ChercherTrouver()
'Désactiver la mise à jour de l'application pour éviter les mouvements de pages
Application.ScreenUpdating = False
Dim Doc1 As Document
Dim TableauDesMots(), i As Integer, NoLigne As Byte
Dim DerLigne As Byte
Set Doc1 = ActiveDocument
    DerLigne = Doc1.Tables(1).Rows.Count
    ReDim Preserve TableauDesMots(DerLigne)
    For NoLigne = 1 To DerLigne
        TableauDesMots(NoLigne) = Doc1.Tables(1).Cell(NoLigne, 1)
        'Suppression de vbcrlf en fin de cellule et ajout du No de ligne
        'formaté sur 4 caractères
        TableauDesMots(NoLigne) = Trim(Left(TableauDesMots(NoLigne), _
        Len(TableauDesMots(NoLigne)) - 2)) & Right("0000" & NoLigne, 4)
    Next
    
    For i = 1 To UBound(TableauDesMots)
        If recherche(Left(TableauDesMots(i), Len(TableauDesMots(i)) - 4), Doc1) Then
            'récup du No de ligne dans le tableau
            NoLigne = Val(Right(TableauDesMots(i), 4))
            'Insertion d'une croix dans la colonne 2 du tableau word
            ActiveDocument.Tables(1).Cell(NoLigne, 2).Range.Text = "X"
        End If
    Next
 
'Réactiver la mise à jour de l'application
Application.ScreenUpdating = True
End Sub
 
Function recherche(LeMot As String, Doc1 As Document) As Boolean
Dim Plage
    Set Plage = Doc1.Sections(2).Range
        With Plage.Find
            .Text = LeMot
            recherche = .Execute
        End With
End Function
**********************************************************
2 - La liste des mots et le texte sont placés dans deux documents différents.
Le document 1 contient la macro, et la liste des mots.
La liste des mots est un tableau Word à deux colonnes dans le premier document.
La colonne 1 contient les mots à rechercher, 1 mot par cellule
La colonne 2 est destinée à recevoir une croix si le mot est trouvé
Le texte à parcourir est dans le second document.

Les documents
"Tableau des mots.doc" contient la macro et le tableau des mots
"C:\Le Rep\Le Texte.doc" contient le texte
Code :
Sub ChercherTrouver()
Dim Doc1 As Document
Dim Doc2 As Document
Dim TableauDesMots(), ok As Boolean, i As Integer
Dim DerLigne As Byte
'Désactiver la mise à jour de l'application pour éviter les mouvements de pages
Application.ScreenUpdating = False
    Set Doc1 = Documents("Tableau des mots.doc") 'contient la macro
    Set Doc2 = Documents.Open("C:\Le Rep\Le Texte.doc") 'contient le texte
    DoEvents
    DerLigne = Doc1.Tables(1).Rows.Count
    ReDim Preserve TableauDesMots(DerLigne)
    For NoLigne = 1 To DerLigne
        TableauDesMots(NoLigne) = Doc1.Tables(1).Cell(NoLigne, 1)
        'Suppression de vbcrlf en fin de cellule
        'et ajout du No de ligne formaté sur 4 caractères
        TableauDesMots(NoLigne) = Trim(Left(TableauDesMots(NoLigne), _
        Len(TableauDesMots(NoLigne)) - 2)) & Right("0000" & NoLigne, 4)
    Next
    
    For i = 1 To UBound(TableauDesMots)
        ok = recherche(Left(TableauDesMots(i), Len(TableauDesMots(i)) - 4), Doc2)
        If ok Then
            'récup du No de ligne dans le tableau
            NoLigne = Val(Right(TableauDesMots(i), 4))
            'insertion d'une croix dans la colonne adjascente
            Doc1.Tables(1).Cell(NoLigne, 2).Range.Text = "X"
        End If
    Next
 
'Réactiver la mise à jour de l'application
Application.ScreenUpdating = True
End Sub
 
Function recherche(LeMot As String, Doc2 As Document) As Boolean
Dim Plage
    Set Plage = Doc2.Content
        With Plage.Find
            .Text = LeMot
            recherche = .Execute
        End With
End Function
**********************************************************
3 - Les mots cherchés sont situés dans un tableau() dans le code de la macro
Le texte objet de la recherche est situé dans le document contenant la macro
Code :
Sub ChercherTrouver()
Dim Doc1 As Document
Dim TableauDesMots As Variant, i As Integer
Dim DerLigne As Byte
    Set Doc1 = ActiveDocument
    TableauDesMots = Array("", "tata", "papa", "maman", "pépé", "mémé", "tonton", "michel")
    For i = 1 To UBound(TableauDesMots)
        If recherche(TableauDesMots(i)) Then
            MsgBox TableauDesMots(i) & " trouvé et sélectionné page " & Selection.Information(wdActiveEndPageNumber)
        End If
    Next
End Sub
 
Function recherche(LeMot As Variant) As Boolean
    Selection.HomeKey Unit:=wdStory
        With Selection.Find
            .Text = LeMot
            recherche = .Execute
        End With
End Function
Un grand merci à 3dfroggy qui a été l'initiateur par sa question
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Word > Contribuez

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide