FAQ Word
FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
Comment faire pour obtenir le nombre de page d'un document en VBA
Sub
NbrePages
(
)
MsgBox
Selection.Information
(
wdActiveEndPageNumber)
End
Sub
Mise en garde : les pages ne sont pas des objets fixes en Word, les pages dépendent de l'imprimante, de la mise en page, ...
Le principe est assez simple en soi. Pour sélectionner une plage de données, vous avez besoin de deux signets. Nous allons ajouter des signets sur des pages précises. Pour effectuer cette opération, nous allons utiliser la fonction Goto de VBA.
Selection.GoTo
What:=
wdGoToPage, which:=
wdGoToAbsolute, Count:=
2
Selection.Bookmarks.Add
Name:=
"bmStart"
, Range:=
Selection.Range
Dans ces lignes, nous plaçons un signet (Name:="bmStart") au début de la seconde page de notre document (Count:=2). Nous obtenons ainsi notre signet de départ.
Selection.GoTo
What:=
wdGoToPage, which:=
wdGoToAbsolute, Count:=
4
Selection.Bookmarks.Add
Name:=
"bmEnd"
, Range:=
Selection.Range
Dans cette seconde série de lignes, nous plaçons un signet (Name:="bmEnd") au début de la quatrième page de notre document(Count:=4). Nous obtenons ainsi notre signet de fin.
Dim
myRange As
Range
'Signet de début
Selection.GoTo
What:=
wdGoToPage, which:=
wdGoToAbsolute, Count:=
2
Selection.Bookmarks.Add
Name:=
"bmStart"
, Range:=
Selection.Range
'Signet de fin
Selection.GoTo
What:=
wdGoToPage, which:=
wdGoToAbsolute, Count:=
4
Selection.Bookmarks.Add
Name:=
"bmEnd"
, Range:=
Selection.Range
'sélection de la plage
Set
myRange =
ActiveDocument.Range
(
Start:=
ActiveDocument.Bookmarks
(
"bmStart"
).Range.Start
, End
:=
ActiveDocument.Bookmarks
(
"bmEnd"
).Range.End
)
myRange.Select
'copie de la plage de le presse papier
Selection.Copy
Vous pouvez utiliser la copie de la plage de données dans un autre document.
Document.Add
ActiveDocument.Paste
Sub
Test
(
)
IsolerPage 4
End
Sub
Public
Sub
IsolerPage
(
NumPage As
Integer
)
Dim
NbLigne As
Long
Dim
NombrePage As
Integer
NombrePage =
_
ActiveDocument.BuiltInDocumentProperties
(
"Number of Pages"
)
If
NombrePage <
NumPage Then
Exit
Sub
ActiveDocument.Range.Select
Selection.GoTo
What:=
wdGoToPage, _
Which:=
wdGoToAbsolute, Count:=
NumPage +
1
Selection.Move
Unit:=
wdCharacter, Count:=-
1
If
NombrePage =
NumPage Then
Selection.Move
Unit:=
wdCharacter, _
Count
:=
ActiveDocument.Range.Characters.Count
NbLigne =
Selection.Information
(
wdFirstCharacterLineNumber)
If
NombrePage =
NumPage Then
NbLigne =
NbLigne -
1
Selection.Move
Unit:=
wdCharacter, Count:=
1
With
Selection
.HomeKey
Unit:=
wdLine, Extend:=
wdMove
.ExtendMode
=
True
.MoveUp
Unit:=
wdLine, Count:=
NbLigne
.ExtendMode
=
False
End
With
Selection.Copy
Documents.Add
ActiveDocument.Range.Paste
If
NumPage <
NombrePage Then
Selection.Move
Unit:=
wdCharacter, _
Count
:=
ActiveDocument.Range.Characters.Count
Selection.Delete
Unit:=
wdCharacter, Count:=
1
End
If
End
Sub
Il arrive parfois que l'on souhaite faire avec chaque page d'un document volumineux un petit document. C'est le cas pour des fiches, du publipostage.
Sub
SeparerPages
(
)
Dim
intPage As
Integer
'pour la page en cours
Dim
intDoc As
Integer
'pour le document
intDoc =
0
Do
intDoc =
intDoc +
1
'définit le no qui sera donné au document
'on se rend à la seconde page et on recule d'un caractère
Selection.GoTo
What:=
wdGoToPage, Which:=
wdGoToAbsolute, Count:=
2
Selection.MoveLeft
Unit:=
wdCharacter, Count:=
1
'On sélectionne de la fin de la page au début du document
Selection.HomeKey
Unit:=
wdStory, Extend:=
wdExtend
'on coupe
Selection.Cut
'on ajoute un nouveau document
Application.Documents.Add
'on colle
Selection.Paste
'on sauve
ActiveDocument.SaveAs
"c:\temp\document"
&
amp; intDoc
'on ferme
ActiveDocument.Close
'tant qu'il reste plus d'une page on recommence
Loop
While
Selection.Information
(
wdNumberOfPagesInDocument) >
1
'C'est la dernière page
ActiveDocument.SaveAs
"c:\temp\document"
&
amp; intDoc +
1
End
Sub
Autre solution, intervenir lors du publipostage : article Fusion et Publipostage