FAQ Word

FAQ WordConsultez toutes les FAQ
Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 15 juin 2021
Sommaire→VBA bis→PagesComment faire pour obtenir le nombre de page d'un document en VBA
Sub NbrePages()
MsgBox Selection.Information(wdActiveEndPageNumber)
End SubMise 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.RangeDans 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.RangeDans 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.CopyVous pouvez utiliser la copie de la plage de données dans un autre document.
Document.Add
ActiveDocument.PasteSub 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 SubIl 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" & 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" & intDoc + 1
End SubAutre solution, intervenir lors du publipostage : article Fusion et Publipostage



