XL 2019 Connaitre le numéro de page d'un doc word pour rapport à son titre

Jérémy26

XLDnaute Nouveau
Bonjour, j'ai une macro qui récupère tout mes titres d'un document Word, et j'aimerai en plus avoir la page du document Word pour mes titres est-possible ?
J'aimerai par la suite, si j'ai un objPara.Style = "Titre 1" à la page 2 du mon doc Word et un objPara.Style = "Titre 1" à la page 6, j'aimerai déterminer mes numéro de tableau qui sont dans ses pages.
Merci de votre aide.
 

Jérémy26

XLDnaute Nouveau
Bonjour à tous, Bonjour @Jérémy26

Pour le N° de page peut-être en utilisant la propriété ".Information(wdActiveEndAdjustedPageNumber)" de l'objet Range.

Amicalement
Alain
Merci j'ai pu utiliser cette propriété pour déterminer la page de mes titres, le code ci joint. Mais je n'arrives pas à la faire fonctionner pour déterminer dans pages du document word se trouve mes tableaux.
VB:
                 If objPara.Style = "Titre 1" Then
                    lvnumPage = .Information(wdActiveEndAdjustedPageNumber)
                    ThisWorkbook.Sheets("Liste_tableaux").Range("M" & lvnbsolo).Value = lvnumPage
                    lvnbsolo = lvnbsolo + 1
                 End If
 

Jérémy26

XLDnaute Nouveau
Pour savoir quel est la page word de mon tableau j'ai essayé ceci mais j'ai un message d'erreur dès la première ligne :
VB:
                        tab_lvnumPage = WordDoc.Tables(i).Information(wdActiveEndAdjustedPageNumber)
                        ThisWorkbook.Sheets("Liste_tableaux").Range("N" & tab_lvnbsolo).Value = tab_lvnumPage
                        tab_lvnbsolo = tab_lvnbsolo + 1
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re Euh

Voilà un exemple avec le Doc et le classeur joint,
Ouvre le Doc avant de lancer la macro
(On ne liste que les tableaux sur la même page qu'un Titre1)

Enrichi (BBcode):
Sub AnaTitre1()
     
     Dim WORDApp As Word.Application
     Dim WordDoc As Word.Document
     
     Dim Titl(), Tb(), i As Long, N°Page As Integer, N°Tb As Integer
     Dim Para As Paragraph, Tabl As Table
     
     Dim Dic As Object
     Set Dic = CreateObject("Scripting.Dictionary")
     
     On Error Resume Next
'A adapter
     Set WORDApp = GetObject(, "Word.Application")
     Set WordDoc = WORDApp.Documents("Doc Essai.docx")
     On Error GoTo 0
     If WordDoc Is Nothing Then Exit Sub
     
     i = 0
     For Each Para In WordDoc.Paragraphs
          If Para.Style = "Titre 1" Then
               N°Page = Para.Range.Information(wdActiveEndAdjustedPageNumber)
               i = i + 1: ReDim Preserve Titl(1 To 2, 1 To i): Titl(2, i) = N°Page: Titl(1, i) = Para.Range.Text
               Dic(N°Page) = Dic(N°Page) + 1
          End If
     Next
     i = 0
     N°Tb = 0
     For Each Tabl In WordDoc.Tables
          N°Tb = N°Tb + 1
          N°Page = Tabl.Range.Information(wdActiveEndAdjustedPageNumber)
          If Dic.Exists(N°Page) Then
               i = i + 1
               ReDim Preserve Tb(1 To 2, 1 To i)
               Tb(1, i) = N°Tb: Tb(2, i) = N°Page
          End If
     Next
     
     'Ecrire la liste des Titre1 et leur page
     Feuil1.[A2].Resize(UBound(Titl, 2), 2).Value = WorksheetFunction.Transpose(Titl)
     'Ecrire les N° de tableau et leur page
     Feuil1.[D2].Resize(UBound(Tb, 2), 2).Value = WorksheetFunction.Transpose(Tb)
     
     Set WordDoc = Nothing
     Set WORDApp = Nothing
     
End Sub

@Phil69970 a dit :
Selection.Information(wdActiveEndPageNumber)

La différence avec .Information(wdActiveEndAdjustedPageNumber)
C'est que la deuxième syntaxe prend en compte les modifications de N° de page effectuées par l'utilisateur (Commence à ..) la première non.


Amicalement
Alain
 

Pièces jointes

  • Titre1 et Tableaux.xlsm
    18.6 KB · Affichages: 0
  • Doc Essai.docx
    15.4 KB · Affichages: 0

Discussions similaires

Statistiques des forums

Discussions
315 096
Messages
2 116 184
Membres
112 677
dernier inscrit
Justine11