Problème de bordure entre pages en mode "Page"

Bonjour à tous,

J'ai rencontré un problème avec VBA Excel concernant l'affichage des bordures entre deux pages lorsque je passe en mode "Page". Plus précisément, je trace une bordure entre deux pages (à gauche et à droite), mais lorsque je passe la feuille en mode page, la bordure ne s'affiche plus sur la feuille de gauche, elle n'est visible que sur la feuille de droite. Les bordures sont tracées grâce a cette methode.

Sub OutsideEdge(ByVal Cell As Range)

    With Cell
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone

        With .Borders(xlEdgeLeft)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With

        With .Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With

        With .Borders(xlEdgeBottom)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With

        With .Borders(xlEdgeRight)
            .LineStyle = xlContinuous
            .ColorIndex = 0
            .TintAndShade = 0
            .Weight = xlMedium
        End With

        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
    End With

End Sub
capture d ecran 2025 03 22 132855 capture d ecran 2025 03 22 132913

Bonjour,

je dirais que c'est une erreur d'affichage d'Excel et qu'il n'y a pas grand chose à faire... Quand je fais un test de mon côté c'est l'affichage de droite qui perd sa ligne...

par contre au niveau du code, Cell représente quoi ? Car il y a moyen de le simplifier :

Sub OutsideEdge(ByVal Cell As Range)
    With Cell
        ' d'origine elles n'y sont pas donc pas la peine de ne pas les mettre
'        .Borders(xlDiagonalDown).LineStyle = xlNone
'        .Borders(xlDiagonalUp).LineStyle = xlNone
        ' vu que les paramètres sont tous identiques et que la couleur noire et le style continu sont par défaut :
        .Borders.Weight = xlMedium
'        With .Borders(xlEdgeLeft)
'            .LineStyle = xlContinuous
'            .ColorIndex = 0
'            .TintAndShade = 0
'            .Weight = xlMedium
'        End With
'
'        With .Borders(xlEdgeTop)
'            .LineStyle = xlContinuous
'            .ColorIndex = 0
'            .TintAndShade = 0
'            .Weight = xlMedium
'        End With
'
'        With .Borders(xlEdgeBottom)
'            .LineStyle = xlContinuous
'            .ColorIndex = 0
'            .TintAndShade = 0
'            .Weight = xlMedium
'        End With
'
'        With .Borders(xlEdgeRight)
'            .LineStyle = xlContinuous
'            .ColorIndex = 0
'            .TintAndShade = 0
'            .Weight = xlMedium
'        End With
        ' ici c'est utile s'il y a plusieurs cellule comprises dans la variable Cell
        If Cell.Count > 1 Then
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
        End If
    End With
End Sub

ce qui donne :

Sub OutsideEdge(ByVal Cell As Range)
    With Cell
        ' dans le cas d'une cellule
        .Borders.Weight = xlMedium
        ' s'il y a plusieurs cellules alors on enlève les bordures intérieures
        If Cell.Count > 1 Then
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
        End If
    End With
End Sub

@ bientôt

LouReeD

Oui, c'est sûrement un problème d'affichage, mais le vrai souci est que plus tard dans mon code, j'exporte la feuille en PDF. Cela pose un problème dans le fichier PDF généré, car la bordure est manquante, ce qui affecte l'apparence du document. Auriez-vous une solution ?

Passer en affichage normal, ou bien alors insérer une colonne "inutile" afin que chaque colonne est sa propre bordure... Cette colonne pourrait être masquée lors de l'impression.

@ bientôt

LouReeD

Passer en affichage normal me retire encore plus de bordures communes. Ce que je ne comprends pas, c'est que si je repasse manuellement sur les bordures avant d'exporter la feuille, alors les bordures entre deux pages s'affichent correctement dans le PDF.

Y aurait-il un moyen de reproduire ce comportement via VBA ?

Merci pour ton aide !

Avez-vous, pouvez-vous fournir le fichier, parce que là on parle dans le vide...

@ bientôt

LouReeD

Re,

Après avoir essayé votre code :

vbaCopierModifier<code>Sub OutsideEdge(ByVal Cell As Range)
    With Cell
        ' Dans le cas d'une seule cellule
        .Borders.Weight = xlMedium
        ' S'il y a plusieurs cellules, on enlève les bordures intérieures
        If Cell.Count > 1 Then
            .Borders(xlInsideVertical).LineStyle = xlNone
            .Borders(xlInsideHorizontal).LineStyle = xlNone
        End If
    End With
End Sub
</code>

et après avoir modifié certaines parties de mon propre code, j'arrive maintenant à afficher presque toutes les bordures correctement. Cependant, certaines bordures ne s'affichent toujours pas et je ne comprends pas pourquoi.

Auriez-vous une idée de ce qui pourrait causer cela ?

image

Merci !

Bonjour,

les données dans les cellules ne dépassent pas la largeur ? Qui a t il comme données ? quel est leur alignement ?

@ bientôt

LouReeD

bonjour XNS, LouReeD,

supposons que vous voulez imprimer la plage B10:M20, mais alternativement, j'ajoute également la 9ème ligne (presque cachée) aux plages paires

Sub test()
     With ActiveSheet
          Set c = Range("B10:D50,E9:G50,H10:J50,K9:M50")     'alternativement, ajoutez également la 9ème ligne
          .PageSetup.PrintArea = c.Address   'la plage à imprimer
          For Each ar In c.Areas             'boucle des "areas"
               OutsideEdge Intersect(ar, .Range("10:20"))     'bordures autour de 10:20 de l'area
          Next
          Set c = .Rows(9)                   'la ligne auxiliaire 9
          h = c.RowHeight                       'hauteur actuel
          c.RowHeight = 0.1                  'hauteur presque 0
          .PrintPreview                      'imprimer
          .ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\test1.pdf", OpenAfterPublish:=False
          c.RowHeight = h                    'restaurer hauteur original
     End With
End Sub

Sub OutsideEdge(ByVal Cell As Range)
     With Cell
          ' dans le cas d'une cellule
          .Borders.Weight = xlMedium
          ' s'il y a plusieurs cellules alors on enlève les bordures intérieures
          If Cell.Count > 1 Then
               .Borders(xlInsideVertical).LineStyle = xlNone
               .Borders(xlInsideHorizontal).LineStyle = xlNone
          End If
     End With
End Sub

Voilà, tout comme ici BsAlv vous propose de créer une ligne ou colonne supplémentaire just pour porter la bordure manquante...
Avec BsAlv l'avantage est d'avoir le code VBA qui va avec l'idée !

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme bordure entre pages mode page"