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
Bonjour,
je dirais que c'est une erreur d'affichage d'Excel et qu'il n'y a pas grand chose à faire...
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 Subce 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 ?
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 SubVoilà, 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