Supprimer page blanche dans WORD avec en-tête et pied de page dans une même sect [Résolu]

JackleKija 8 Messages postés lundi 22 août 2011Date d'inscription 29 septembre 2011 Dernière intervention - 13 sept. 2011 à 16:51 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 30 sept. 2011 à 10:59
Bonjour à tous,

Je suis actuellement à la recherche d'un code efficace WORD VBA qui me permettrait de supprimer les pages blanches d'un document.

Toutefois, ces pages ont des en-têtes et des pieds de page mais leur contenu est vide. De plus elles sont comprises dans des sections où certaines pages ne sont quant à elles pas vierges.

Par exemple : Je suis à la section 14 où se trouve la page 22 avec du texte, en-tête et pied de page mais aussi la page 23 qui est vide mais avec en-tête et pied de page.

Est-ce réalisable?

En espérant avoir été le plus clair possible

Merci d'avance.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 sept. 2011 à 11:23
3
Merci
Salut

Petite démo de récupération de texte sous Word.
Tu pourras facilement traiter les infos pour déterminer si une page est vide, sachant que 'vide' peut avoir plusieurs signification, à toi de voir.
    Dim oPages  As Pages
    Dim NoPage  As Long
    Dim oRects  As Rectangles
    Dim NoRect  As Long
    Dim oLines  As Lines
    Dim NoLine  As Long
    
    With ActiveDocument.ActiveWindow.Panes(1)
        Set oPages = .Pages
        With oPages
            For NoPage = 1 To .Count
                Debug.Print "Page " & NoPage & " : ";
                With .Item(NoPage)
                    Set oRects = .Rectangles
                    With oRects
                        For NoRect = 1 To .Count
                            Debug.Print , "Rectangle " & NoRect & " : ";
                            With .Item(NoRect)
                                Select Case .RectangleType
                                    Case WdRectangleType.wdLineBetweenColumnRectangle
                                        Debug.Print "ligne qui sépare des colonnes"
                                    Case WdRectangleType.wdMarkupRectangle
                                        Debug.Print "bulle de commentaires"
                                    Case WdRectangleType.wdMarkupRectangleButton
                                        Debug.Print "indicateur (...) dans bulle de commentaires quand existe texte supplémentaire dans commentaire"
                                    Case WdRectangleType.wdPageBorderRectangle
                                        Debug.Print "bordure de page"
                                    Case WdRectangleType.wdSelection
                                        Debug.Print "espace occupé par un outil de sélection"
                                    Case WdRectangleType.wdShapeRectangle
                                        Debug.Print "espace occupé par une forme"
                                    Case WdRectangleType.wdSystem
                                        Debug.Print "(système) réservé"
                                    Case WdRectangleType.wdTextRectangle
                                        Set oLines = .Lines
                                        With oLines
                                            Debug.Print "espace occupé par du texte : " & .Count & " lignes :"
                                            For NoLine = 1 To .Count
                                                Debug.Print , , "Ligne " & NoLine & " : " & Len(.Item(NoLine).Range.Text) & " caractère(s)"
                                            Next NoLine
                                        End With
                                End Select
                            End With
                        Next NoRect
                    End With
                End With
            Next NoPage
        End With
    End With

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 14 sept. 2011 à 11:36
0
Merci
Pour te repérer plus facilement, tu peux compléter la ligne :
Debug.Print , , "Ligne " & NoLine & " : " & Len(.Item(NoLine).Range.Text) & " caractère(s) : " & .Item(NoLine).Range.Text
Commenter la réponse de cs_Jack
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 16 sept. 2011 à 13:48
0
Merci
Y-a pas de quoi
Commenter la réponse de cs_Jack
JackleKija 8 Messages postés lundi 22 août 2011Date d'inscription 29 septembre 2011 Dernière intervention - 16 sept. 2011 à 14:06
0
Merci
Salut,

J'ai trouvé entre temps un code qui me permettait de réaliser ce que je souhaitait mais je vais aussi prendre ton code car il est bien utile et me servira pour la suite de mon développement

Merci beaucoup de ton aide.

A bientot.
Commenter la réponse de JackleKija
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 17 sept. 2011 à 12:58
0
Merci
Ok, merci de ces précisions

Si tu as le temps et comme on est sur un forum où les membres viennent chercher des solutions, pourrais-tu montrer, si ce n'est pas trop long, la solution que tu as adoptée ?
Elle est peut-être moins 'complexe' que celle proposée ici.
Merci d'avance.
Commenter la réponse de cs_Jack
JackleKija 8 Messages postés lundi 22 août 2011Date d'inscription 29 septembre 2011 Dernière intervention - 27 sept. 2011 à 17:52
0
Merci
Bonjour,

Désolé de répondre aussi tard.

J'ai essayé de recollé les morceaux pour vous donner un code a peu près simple et propre.
Public Function BlankPageSelection()

    For Each C In Selection.Characters
        If (C <> vbCr And C <> vbTab And C <> vbFormFeed And C <> " ") Then
            BlankPageSelection = False
            Exit Function
        End If
    Next
    BlankPageSelection = True
End Function

Public Sub DeleteBlankPage()
    NbPages = ActiveDocument.ActiveWindow.Panes(1).Pages.Count

    For i = 1 To NbPages
        Selection.GoTo wdGoToPage, wdGoToNext, , i
        Selection.GoTo What:=wdGoToBookmark, Name:="\page"
        If BlankPageSelection Then
            Selection.Delete
            i = i - 1
            NbPages = NbPages - 1
        End If
    Next
End Sub
Commenter la réponse de JackleKija
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 30 sept. 2011 à 10:59
0
Merci
Attention : Un For-Next n'évalue les limites qu'une seul fois, au premier passage. Si tu modifies NbPages à l'intérieur du For-Next, il n'en tiendra pas compte.
Passe plutôt par un Do-Loop avec un incrément manuel, genre
Do While i <= NbPages
    ...
    i = i + 1
Loop
Commenter la réponse de cs_Jack

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.