FAQ WordConsultez toutes les FAQ

Nombre d'auteurs : 20, nombre de questions : 289, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireVBA bisPages

Comment faire pour obtenir le nombre de page d'un document en VBA

 
Sélectionnez

Sub NbrePages()
MsgBox Selection.Information(wdActiveEndPageNumber)
End Sub
Créé le 27 août 2007  par SilkyRoad

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

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.

 
Sélectionnez

Document.Add
ActiveDocument.Paste
Créé le 20 avril 2008  par Lebeau Olivier
 
Sélectionnez

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
Créé le 25 avril 2007  par SilkyRoad

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.

 
Sélectionnez

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

Créé le 1er juin 2009  par Lebeau Olivier
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.