XL 2021 Déplacer un saut de page (manuel ou pas)

DenisHen

XLDnaute Nouveau
Bonjour à la communauté.

Je tente de déplacer un saut de page d'une ligne vers le haut, à la seule condition : si le saut de ligne est après la valeur "E" de la colonne A.

Les sauts de page peuvent être manuels ou automatiques.
Je n'ai rien trouvé sur le déplacement de saut de page, j'ai donc obté pour insérer le saut de page au bon endroit puis supprimé le mauvais.
Mon code place bien le bon saut de page, mais ne supprime pas le mauvais (erreur).
Voici donc mon code, qui ne fonctionne pas :

VB:
Sub TestSautPage()
    Dim SautPage As HPageBreak
    For Each SautPage In ActiveSheet.HPageBreaks
      If Range("A" & SautPage.Location.Row - 1).Value = "E" Then
        Range("A" & SautPage.Location.Row - 1).PageBreak = xlPageBreakManual
        Range("A" & SautPage.Location.Row).HPageBreak.Item.Delete
      End If
    Next
End Sub
 

vgendron

XLDnaute Barbatruc
hello

avec l'enregistreur de macro, j'ai déplacé un saut de page manuellement
le code me donne ca:
Set ActiveSheet.HPageBreaks(1).Location = Range("A7")
ce qui se traduit par: placer le saut de page n°1 avant A7

==> il faut que
1) tu supprimes tous tes sauts de page
2) tu parcours toutes les lignes de la feuille: de i =1 à fin
3) si Ai = E, tu créés un saut de ligne

ce qui donnerait ce code
VB:
Sub Macro1()

ActiveSheet.ResetAllPageBreaks

For i = 1 To 50
    If Range("A" & i) = "E" Then
        ActiveSheet.HPageBreaks.Add Range("A" & i)
    End If
Next i
    
End Sub
 

job75

XLDnaute Barbatruc
Bonjour DenisHen, vgendron,
VB:
Sub Deplace()
Dim c As Range, i&
With ActiveSheet
    Set c = Columns(1).Find("E", , xlValues, xlWhole)
    If c Is Nothing Then Exit Sub
    For i = 1 To .HPageBreaks.Count
        If .HPageBreaks(i).Location.Row > c.Row Then
            .HPageBreaks.Add c
            If i < .HPageBreaks.Count Then .HPageBreaks(i + 1).Delete
            Exit For
        End If
    Next
End With
End Sub
Seul le 1er "E" est traité.

A+
 

vgendron

XLDnaute Barbatruc
Hello Job

pour traiter tous les sauts
VB:
Sub TestSautPage()
    Dim SautPage As HPageBreak
    For i = 1 To ActiveSheet.HPageBreaks.Count
        LigHP = ActiveSheet.HPageBreaks(i).Location.Row
        If Range("A" & LigHP - 1).Value = "E" Then
            Set ActiveSheet.HPageBreaks(i).Location = Range("A" & LigHP - 1)
        End If
    Next i
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
315 087
Messages
2 116 084
Membres
112 655
dernier inscrit
fannycordi