Rechercher dans word des mots et créer une liste excel

manu_tella

XLDnaute Junior
Bonjour à tous,

Je vous sollicite pour un petit coup de pouce.
Je dispose d'une cinquantaine de fichier word contenant des chaines de carractères specifiques et je voudrais etablir une liste sous excel les recensant.

je m'explique...

je cherche a lister dans chaque document word sans les ouvrir... les chaines de carracteres commencant par "maison_*" ou "jardin_*".
Mes fichiers contienent par exemple jardin_vert, jardin_gris, maison_jaune, maison_blanche, maison_rouge... toujours de la meme syntaxe (jamais d'espace et commencent toujours soit par maison soit par jardin).

Dans l'idée de la liste, je souhaiterai voir apparaitre en face de la liste les noms de fichiers word dans lesquels ils apparaissent.

Est-ce possible? Je n'ai pas reussi a trouver de sujet similaire sur le forum.
Je ne suis vraiment pas un specialiste de VBA et demander à excel de commander word releve du mystère.
Je ne suis donc pas contre un petit coup de main pour m'aider à construire ca.

d'avance merci pour votre aide preciseuse.

cordialement,
 

Hervé

XLDnaute Barbatruc
Re : Rechercher dans word des mots et créer une liste excel

salut

un début de piste à travers ce code :
Code:
Sub manu()
'activer la référence "Microsoft Word xx.x Object Library"
Dim Cible As String
Dim AppWord As Word.Application
Dim DocWord As Word.Document
Dim CollWord As Word.Words
Dim i As Long, j As Long
 
Cible = "C:\test\test1.doc"
Set AppWord = New Word.Application
AppWord.Visible = False
Set DocWord = AppWord.Documents.Open(Cible)
Set CollWord = DocWord.Content.Words
 
For i = 1 To CollWord.Count
    If InStr(1, CollWord(i), "maison") > 0 Then
        j = j + 1
        Cells(j, 1) = CollWord(i) & CollWord(i + 1) & CollWord(i + 2): Cells(j, 2) = Cible
    End If
     If InStr(1, CollWord(i), "jardin") > 0 Then
        j = j + 1
        Cells(j, 1) = CollWord(i) & CollWord(i + 1) & CollWord(i + 2): Cells(j, 2) = Cible
    End If
Next
DocWord.Close True
AppWord.Quit
End Sub

ce code fonctionne pour un fichier (chemin à passer par la variable cible), on fera la boucle pour chaque fichier après un test.

attention, ce code ouvre word, lit le fichier, copie les infos dans excel, referme le fichier et word.

il n'y a aucune gestion d'erreur si word est déjà ouvert (multi session) ou si le document est déjà ouvert.

c'est juste un test

a plus
 

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

Bonjour,

merci pour cette piste.
je comprend le sens du code par contre à l’exécution, malgré le fait d'avoir coché sous vba_word l'option: "activer la référence "Microsoft Word 11.0 Object Library", excel m'affiche "erreur de compilation - type défini par l'utilisateur non defini"

dois-je remplacer
Dim AppWord As Word.Application par Set AppWord=CreateObject("Word.Application")
Dim DocWord As Word.Document par Set docWord = appWord.Documents
...

ou y'a t-il plus simple?

merci encore.

manu
 

Hervé

XLDnaute Barbatruc
Re : Rechercher dans word des mots et créer une liste excel

re

juste comme ca, tu as bien mis la macro dans excel ? et tu la lances bien depuis lui ?

un autre code à tester :

Code:
Sub manu()
'activer la référence "Microsoft Word xx.x Object Library"
Dim Cible As String
Dim AppWord As Object ' Word.Application
Dim DocWord As Object 'As Word.Document
Dim CollWord As Object 'Word.Words
Dim i As Long, j As Long
 
Cible = "C:\test\test1.doc"
Set AppWord = CreateObject("Word.Application")
'Set AppWord = New Word.Application
AppWord.Visible = False
Set DocWord = AppWord.Documents.Open(Cible)
Set CollWord = DocWord.Content.Words
 
For i = 1 To CollWord.Count
    If InStr(1, CollWord(i), "maison") > 0 Then
        j = j + 1
        Cells(j, 1) = CollWord(i) & CollWord(i + 1) & CollWord(i + 2): Cells(j, 2) = Cible
    End If
     If InStr(1, CollWord(i), "jardin") > 0 Then
        j = j + 1
        Cells(j, 1) = CollWord(i) & CollWord(i + 1) & CollWord(i + 2): Cells(j, 2) = Cible
    End If
Next
DocWord.Close True
AppWord.Quit
End Sub
 

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

Re,

moultes merci pour ce nouveau bout de code qui me permet de mieux cerner le fonctionnement entre word et excel.
j'ai cependant 3 petites questions.
1 - comment rendre le code insensible à la Casse (c'est à dire que le premier mot soit Maison ou maison, qu'il soit comptabilisé dans les 2 cas)
2 - y'a t-il moyen de faire chercher également dans les tableau de mon fichier word (car j'ai des maison_jaune et des jardin_bleus dans des tableaux)
3 - comment étendre la chaine de caractère... car j'ai également des maison_jaune_a_bande_rouge que je souhaiterai lister mais le code semble s’arrêter au 2eme mot. en fait, je voudrais lister toute la chaine de carractere jusqu'à "l'espace" suivant car mes chaines de caractère sont toutes formées de mots et de "_". Les longueurs sont variables.

en tout cas merci beaucoup.

manu
 
Dernière édition:

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

re,

les il n'y a que des "_" entre les mots.
je souhaite recuperer l'integralité de la chaine de carractere.

du genre: la belle maison_bleu_a_rayures_jaunes est belle.
je souhaite récupérer maison_bleu_a_rayures_jaune
 

Hervé

XLDnaute Barbatruc
Re : Rechercher dans word des mots et créer une liste excel

yo :)

je me souviens avoir déjà bataillé avec la reconnaissance des espaces word par excel.

de mémoire ils sont rattachés aux mots qui les précèdes.

ce qui complique méchamment pour déterminer la fin d'une chaine de caractère avec la collection words.

un code a essayer pour voir ce que ça donne, ça ressemble plus à un plat de spaghetti qu'a un code propre mais chez moi ça fait une partie du boulot :

Code:
Sub manu()
'activer la référence "Microsoft Word xx.x Object Library"
Dim Cible As String
Dim AppWord As Object 'Word.Application
Dim DocWord As Object 'Word.Document
Dim CollWord As Object 'Word.Words
Dim i As Long, j As Long
 
Cible = "C:\test\test3.doc"
Set AppWord = CreateObject("Word.Application")
'Set AppWord = New Word.Application
AppWord.Visible = False
Set DocWord = AppWord.Documents.Open(Cible)
Set CollWord = DocWord.Content.Words

For i = 1 To CollWord.Count
'Cells(i, 10) = RTrim(CollWord(i))
    t = ""
    'gestion des Maisons
    If InStr(1, LCase(CollWord(i)), "maison") > 0 Then
        j = j + 1
        t = CollWord(i)
        For x = i + 1 To Application.WorksheetFunction.Max(i + 10, CollWord.Count)
            If Right(CollWord(x), 1) <> " " Then
                t = t & CollWord(x)
            Else
                t = t & CollWord(x)
                Exit For
            End If
        Next x
        Cells(j, 1) = t: Cells(j, 2) = Cible
    End If
    'gestion des jardins
    If InStr(1, LCase(CollWord(i)), "jardin") > 0 Then
        j = j + 1
        t = CollWord(i)
        For x = i + 1 To Application.WorksheetFunction.Max(i + 10, CollWord.Count)
            If Right(CollWord(x), 1) <> " " Then
                t = t & CollWord(x)
            Else
                t = t & CollWord(x)
                Exit For
            End If
        Next x
        Cells(j, 1) = t: Cells(j, 2) = Cible
    End If
Next
DocWord.Close True
AppWord.Quit
Set DocWord = Nothing
Set AppWord = Nothing

End Sub
 

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

Re,

Excellent... c'est vrai que ça complique le code mais ça fonctionne.
par contre y'a un effet de bord, ça impose d'avoir obligatoirement un espace après la chaine de caractère sinon ça marche pas.
ok c'est une info que j'avais omis de soumettre.. :rolleyes:
mais y'a pas toujours un espace après la chaine de caractère. par exemple, il peut y avoir
maison_bleue
maison_rouge
maison_verte

et pour rechercher dans les tableaux y'a t-il une commande particulière à ajouter?

en tout cas ça me simplifie déjà la vie
 

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

re,

tout fonctionne exactement comme je le souhaitais à l'exception près pour les chaines de caractères qui ne sont pas séparées d'un espace. Dans ce cas, le code mets les chaines de caractères à la suite séparées par un "carré blanc".

y'a pas moyen de rajouter une condition genre:
If Right(CollWord(x), 1) <> " " Or Right(CollWord(x), 1) <> chr(10) Then ...

=> edit: j'ai trouvé, en rajoutant
If Right(CollWord(x), 1) = vbCr Then GoTo fin_maison
avec un fin_maison: placé après le next x...


le soucis c'est que vbcr ça ne fonctionne pas avec les tableaux, vu qu'il voit plusieurs carrés blanc et pas un seul...
 
Dernière édition:

manu_tella

XLDnaute Junior
Re : Rechercher dans word des mots et créer une liste excel

Bonjour à tous,

je déterre mon post pour vous expliquer mon avancement actuel.
J'arrive a sortir du doc word les chaines de caractère que je souhaite.

en gros j'ai rajouté les
'gestion des Maisons
If InStr(1, LCase(CollWord(i)), "maison") > 0 Then
j = j + 1
t = CollWord(i)
For x = i + 1 To Application.WorksheetFunction.Max(i + 10, CollWord.Count)
If Right(CollWord(x), 1) = vbCr Or Right(CollWord(x), 1) = vbTab then Goto finmaison
If Right(CollWord(x), 1) <> " " Then
t = t & CollWord(x)
Else
t = t & CollWord(x)
Exit For
End If
Next x
finmaison:
Cells(j, 1) = t: Cells(j, 2) = Cible
End If


Le seul soucis c’est que malgré le vbTab, les maisons et les jardin qui apparaissent dans un tableau sur word sont mal distingués.

Par exemple :
Sous word :

Maison_jaune belle

Donne sous excel après exécution du code :
Maison_jaune||belle

Or le « belle » ne fait pas partie de la chaine de caractère donc je voudrais pas le récupérer.

Il y a bien une feinte mais elle est pas propre…
Je copie l’intégralité de mon doc word dans un doc word temporaire (texte non formaté). Les tableaux disparaissent et mon problème aussi mais c’est pas « LA SOLUTION ».

Donc je cherche très simplement la commande vba qui donne le nom de la croix sur laquelle apparait un rond

VbCr c’est retour chariot
VbTab c’est une tabulation

Mais c’est quoi le Vb…. de la petite croix avec le rond ? ;)

d'avance merci

manu
 

Discussions similaires

Réponses
15
Affichages
760
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87