Autres VBA pour Word à partir de VBA pour Excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

JLH974

XLDnaute Nouveau
Bonjour à tous
J'ai un fichier .docx gigantesque de près de 5900 pages pour 19 Mo
Il contient près de 30.000 signets et 130.000 renvois
C'est le décryptage des actes d'état-civil de Tamatave avec le répertoire de toutes les personnes citées
Chaque personne a un signet, chaque acte a un signet et les renvois permettent de naviguer entre les différents éléments du fichier
Je voudrais à partir d'un fichier Excel automatiser le traitement des données contenues
Je connais mieux VBA pour Excel mais pas du tout VBA pour Word
Comment accéder au contenu du signet, au texte suivant le signet et cerise sur le gâteau au paragraphe situé juste après le paragraphe désigné par le signet

Jean-Luc
 
Je ne sais pas la difficulté pour les récupérer via VBA Word bien qu'il soit possible de connaître le texte du signet et sa position :
Code:
 ActiveDocument.Bookmarks("Zone1").Range.Text

De mémoire les signets sont enregistrés comme liens internes tu peux exporter le document sous le format HTML (filtré) et chercher les balises <a name=hhh> ..</a> faciles à capturer par les expressions régulières ainsi tu peux les exposer dans le document
 
Bonsoir
En fait je travaille à partir d'un classeur Excel ouvert et actif (pour des raisons de facilité en ce qui concerne les synthèses) et j'analyse le fichier .docx enregistré sur mon disque dur :

Set wrd = CreateObject("Word.Application")
wrd.Documents.Open Filename:="D:\Généalogie\ProjetRelevéActesTamatave-1866-1922\RelevésActesTamatave-Madagascar-1866-1918-Version36.docx"
' je remplis un tableau Signet(NombreSignets)
NombreSignets = 0

For n = 1 To wrd.ActiveDocument.bookmarks.Count
' MsgBox Left(Trim(wrd.ActiveDocument.bookmarks(n).Name), 4)
If Left(Trim(wrd.ActiveDocument.bookmarks(n).Name), 4) <> "Acte" And Left(Trim(wrd.ActiveDocument.bookmarks(n).Name), 4) <> "MADT" And Left(Trim(wrd.ActiveDocument.bookmarks(n).Name), 4) <> "Clas" Then
' Ne sélectionne que les noms de personne et pas les actes
NombreSignets = NombreSignets + 1
If NombreSignets = 1 Then
ReDim Signet(NombreSignets)
Else
ReDim Preserve Signet(NombreSignets)
End If

Signet(NombreSignets).TexteSignet = Trim(wrd.ActiveDocument.bookmarks(n).Name)
Signet(NombreSignets).PageSignet = wrd.ActiveDocument.bookmarks(n).Range.Information(3)
Paragraphe = wrd.ActiveDocument.Range(Start:=1, End:=wrd.ActiveDocument.bookmarks(n).Start).Paragraphs.Count + 2
Signet(NombreSignets).NuméroParagrapheSignet = Paragraphe
Signet(NombreSignets).TexteParagrapheSignet = wrd.ActiveDocument.Paragraphs(Paragraphe).Range
Signet(NombreSignets).PositionSignet = wrd.ActiveDocument.bookmarks(n).Start

End If

Next n

Mais j'ai simplement recopié et légèrement adapté ce code sans trop le comprendre et en particulier
wrd.ActiveDocument.Range(Start:=1, End:=wrd.ActiveDocument.bookmarks(n).Start).Paragraphs.Count + 2
C'est là où je voudrais en plus le paragraphe suivant et savoir comment modifier Range(Start:=1, End:=wrd.ActiveDocument.bookmarks(n).Start).Paragraphs.Count + 2 pour l'avoir

Jean-Luc
 
Salut,
Comme on n'a pas de fichier exemple, pour faire des tests, j'en ai fabriqué un avec quelques signets et quelques paragraphes (en pièce jointe).
Voici du code vba mis dans un classeur Excel, qui lit tous les signets du document Word et qui affiche le texte qui suit le signet jusqu'à la fin du paragraphe. Il y a une option pour inclure aussi le paragraphe suivant. Attention le range de word n'est pas celui d'excel alors il faut mettre dans les références la Microsoft Word object Library :
Sub ManipuletSignets()
Dim wrd As Object, Paragraphe, n
Dim signetNom As String, inclureParagSuivant As Boolean
Dim rng As Word.Range, texteResultat As String
Set wrd = CreateObject("Word.Application")
wrd.Documents.Open fileName:="c:\temp\histoire_du_cafe.docx"
wrd.Visible = True
inclureParagSuivant = False
For n = 1 To wrd.ActiveDocument.Bookmarks.Count
Debug.Print "Signet : ", Trim(wrd.ActiveDocument.Bookmarks(n).Name)
' Récupérer la plage du signet
Set rng = wrd.ActiveDocument.Bookmarks(n).Range
' Étendre la plage jusqu'à la fin du paragraphe
rng.End = rng.Paragraphs(1).Range.End
' Ajouter le paragraphe suivant si demandé
If inclureParagSuivant Then
On Error Resume Next
rng.End = rng.Paragraphs(2).Range.End
On Error GoTo 0
End If
' Récupérer le texte
texteResultat = rng.Text
Debug.Print texteResultat
Debug.Print "========================================="
Next n
End Sub

et voici ce que j'obtiens comme résultat :
Signet : Café
Le café, cette boisson noire et aromatique, est devenu l’un des symboles universels du partage et dela réflexion. Son histoire remonte à plusieurs siècles, mêlant légendes, découvertes et échanges culturels.
=========================================
Signet : Kaldi
Kaldi aurait observé que ses chèvres devenaient plus vives après avoir consommé les fruits d’un certain arbuste. Intrigué, il en fit part à un moine, qui découvrit que la décoction de ces fruits l’aidait à rester éveillé pendant les longues heures de prière.
=========================================
Signet : moine
moine, qui découvrit que la décoction de ces fruits l’aidait à rester éveillé pendant les longues heures de prière.
=========================================
Signet : Origines
Les origines du café
=========================================

Nullosse
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour