Bonjour,
J’essaie à à partir d'un caractère spécifique "[" d'extraire les paragraphes qui le contiennent ainsi que le titre de l'index et les numéros de page associés.
Mon problème actuel, est qu'il y a un décalage dans la numérotation des titres et des pages.
Quand j'ouvre mes documents words, les paragraphes sélectionnés sont correctes, il contiennent le caractère spécifique.
Mais le numéro de page et le titre de l'index associés correspondent au paragraphe suivant.
Illustration
3.1 ------
blabla []
(page 3)
le résultat va être:
3.2 blabla [] page(4)
Comment peut-on résoudre ce décalage?
Merci d'avance pour vote temps et votre aide.
La partie du code qui pose problème
Le code en entier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 ' Sélection étendue Do While WApp.Selection.Find.Execute = True j = j + 1 WApp.Selection.Expand wdSentence Set WSel = WApp.Selection ' Extract ws.Cells(j, 2) = WSel WApp.Selection.collapse Direction:=0 ' Titre ws.Cells(j, 4) = WApp.Selection.Range.ListFormat.ListString ' Numéro de page ws.Cells(j, 5) = WApp.Selection.Information(wdActiveEndPageNumber) ' Nom du fichier ws.Cells(j, 6) = sNomFichier Loop
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 Public Sub Import_Data() ' -- Variables declaration Dim wb As Workbook 'classeur Excel dans lequel on importe les données Dim ws As Worksheet 'onglet Excel dans lequel on importe les données Dim sChemin As String 'répertoire contenant les fichiers Word Dim sNomFichier As String 'nom du fichier Word Dim WApp As Object, WDoc As Object, WSel As Object, WSel2 As Object Dim i As Integer Dim j As Integer Dim findMe As String 'Dim wdActiveEndPageNumber As Variant 'findMe = InputBox(Prompt:=" Find a specific word ") findMe = "[" 'Enregistrement du mot-clé dans la variable globale kword = findMe ' -- Variables initialisation Set wb = ThisWorkbook Set ws = wb.Sheets(1) 'on sauvegarde dans la 1re feuille sChemin = ChoisirRepertoire & "\" 'fonction pour choisir le répertoire contenant les fichier Word 'sChemin = ThisWorkbook.Path & "\" 'si les fichiers Word se trouvent dans le même répertoire que le fichier Excel sNomFichier = Dir(sChemin & "*.doc*") 'pour ouvrir tous les fichiers .doc*. 1er fichier. Set WApp = CreateObject("Word.Application") 'pour créer un objet Word WApp.Visible = True 'ne pas afficher Word pendant l'exécution i = ws.Range("A" & Rows.Count).End(xlUp).Row + 1 '1re ligne où on va écrire les données dans le fichier Excel j = 2 Application.ScreenUpdating = False ' -- Boucle sur les fichiers Do While Len(sNomFichier) > 0 Set WDoc = WApp.Documents.Open(sChemin & sNomFichier) 'ouvre le document Word Application.StatusBar = "Écriture ligne " & i 'message dans Excel pour voir la progression 'ws.Cells(i, 2) = findMe ' Recherche (par la fonction FIND) WApp.Selection.HomeKey unit:=wdStory, Extend:=wdExtend 'WApp.Selection.HomeKey unit:=6 'Retourne au début du fichier Word WApp.Selection.Find.ClearFormatting With WApp.Selection.Find .Text = findMe .Forward = True .Format = False .MatchCase = True .MatchWholeWord = False .MatchWildcards = False .MatchSoundsLike = False .MatchAllWordForms = False End With ' Sélection étendue Do While WApp.Selection.Find.Execute = True j = j + 1 WApp.Selection.Expand wdSentence Set WSel = WApp.Selection ' Extract ws.Cells(j, 2) = WSel WApp.Selection.collapse Direction:=0 ' Titre ws.Cells(j, 4) = WApp.Selection.Range.ListFormat.ListString ' Numéro de page ws.Cells(j, 5) = WApp.Selection.Information(wdActiveEndPageNumber) ' Nom du fichier ws.Cells(j, 6) = sNomFichier Loop i = i + 1 'prochaine colonne WDoc.Close False 'fermer le document Word sans enregistrer sNomFichier = Dir 'prochain document Loop SortieNormale: Application.ScreenUpdating = True WApp.Quit 'Fermer l'instance de Word Application.StatusBar = False 'Remise à zéro de la barre d'état
Cordialement,
Hasgor
Partager