Copie d’une plage de pages dans une macro (Microsoft Word)
Kevin se demande s’il existe un moyen, en VBA, de copier une plage de pages. Il sait copier des paragraphes et une plage de texte contiguë, mais il ne sait pas copier des pages entières.
Il n’y a aucun objet VBA qui fait référence à une page entière, comme il y en a avec un paragraphe, ni aucune instruction VBA qui vous permettra de sélectionner une page. Vous pouvez cependant calculer ce que comprendrait une page, puis sélectionner cette plage. Le concept général est présenté dans cette macro:
Sub CopyPages1() Dim rCopy As Range Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _ Which:=wdGoToAbsolute, Count:=7) Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9 rCopy.End = Selection.Bookmarks("\Page").Range.End rCopy.Select End Sub
Cette macro définit la plage rCopy égale au point de début de la page 7.
Il sélectionne ensuite le texte au tout début de la page 9 et utilise l’un des signets intégrés de Word pour sélectionner du haut de la page 7 à la fin de la page 9. (C’est ce à quoi cette macro est conçue: sélectionnez les pages 7 à 9.)
Vous devez cependant noter que les pages sont très fluides dans Word. Si vous utilisez exactement le même document sur deux systèmes différents, la macro ci-dessus peut très bien renvoyer des sélections entièrement différentes. Pourquoi? Parce que les pages peuvent circuler différemment sur chacun des systèmes.
Si vous souhaitez copier réellement les pages sélectionnées (7 à 9), vous pouvez modifier un peu la macro pour obtenir le résultat souhaité.
Sub CopyPages2() Dim rCopy As Range Dim rCurrent As Range Set rCurrent = Selection.Range Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _ Which:=wdGoToAbsolute, Count:=7) Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9 rCopy.End = Selection.Bookmarks("\Page").Range.End rCopy.Copy Documents.Add ActiveDocument.Range.PasteSpecial rCurrent.Select End Sub
Notez que la macro « se souvient » de ce que l’utilisateur avait sélectionné avant son exécution, en stockant la plage dans la variable rCurrent et en l’utilisant pour sélectionner à nouveau cette zone à la fin de la macro. Les pages sélectionnées (encore une fois, 7 à 9) sont copiées dans un tout nouveau document.
Vous devez noter que les macros ci-dessus ne fonctionnent correctement que s’il y a en fait au moins 9 pages dans le document actuel. Si vous souhaitez une macro plus flexible et robuste, vous pouvez envisager la variante suivante.
Sub CopyPages3() Dim rCopy As Range Dim rCurrent As Range Dim sTemp As String Dim i As Integer Dim iStart As Integer Dim iEnd As Integer Set rCurrent = Selection.Range ' Get page numbers to be copied sTemp = InputBox("Page range to copy (use format 6-7)", "") i = InStr(sTemp, "-") If i > 0 Then iStart = Val(Left(sTemp, i - 1)) iEnd = Val(Mid(sTemp, i + 1)) If iStart < 1 Then iStart = 1 If iEnd < iStart Then iEnd = iStart With ActiveDocument.Range If iStart > .Information(wdNumberOfPagesInDocument) Then iStart = .Information(wdNumberOfPagesInDocument) End If If iEnd > .Information(wdNumberOfPagesInDocument) Then iEnd = .Information(wdNumberOfPagesInDocument) End If End With ' Set the range Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _ Which:=wdGoToAbsolute, Count:=iStart) Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, _ Count:=iEnd rCopy.End = Selection.Bookmarks("\Page").Range.End ' Copy range to a new document rCopy.Copy Documents.Add ActiveDocument.Range.PasteSpecial rCurrent.Select Else If sTemp > "" Then MsgBox "There is no dash character" End If End If End Sub
Cette version demande à l’utilisateur de spécifier une plage de pages à copier. Les numéros de page sont ajustés pour s’assurer que le numéro de début est inférieur ou égal au numéro de fin, et les numéros de début et de fin sont garantis pour être inférieurs au nombre total de pages dans le document.
_Note: _
Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites WordTips), j’ai préparé une page spéciale qui comprend des informations utiles.
lien: / wordribbon-WordTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur]
.
WordTips est votre source pour une formation Microsoft Word rentable.
(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (5295) s’applique à Microsoft Word 2007, 2010, 2013, 2016, 2019 et Word dans Office 365.