Interdire saut de page automatique dans une plage de cellules Excel
Bonjour,
quelqu'un saurait il me dire s'il est possible d'empêcher l'insertion automatique d'un saut de page dans une plage de cellules donnée dans Excel ?
Dans le fichier en annexe, j'ai défini 3 plages de données dans le fichier xls - imaginez 3 sous-tableaux distincts sur la même feuille.
J'aimerais interdire à Excel d'insérer un saut de page automatique en début de la plage 3, mais plutôt le forcer à introduire ce saut de page avant (fin de plage 2), de façon à ce que tout le troisième sous-tableau soit imprimé en un block sur la seconde page.
Je peux évidemment le faire manuellement mais j'aimerais savoir s'il est possible de rendre cela automatique (ie. considérer un sous tableau comme un bloque insécable). En pratique mes 3 tableaux ont une longueur variable qui s'adapte en fonction du nombre de ligne de chaque sous tableau. Il en résulte des sous tableaux de longueur variable, et donc le saut automatique peut tomber au milieu d'un sous tableau, ce que je ne désire pas ...
Ce que je cherche est en fait quelque chose de similaire à ce que Word offre comme formatage dans "Paragraphe > Enchaînements > Eviter veuves et orphelins" , soit en sélectionnant une option quelque part dans Excel, soit en VBA.
Merci,
Eric
bonjour, on peut jouer avec la plage d'impression
Sub plage3()
With Range("Plage_3")
With Union(.Offset(1 - .Row).Resize(.Row - 1, 3), .Resize(.Parent.UsedRange.Rows.Count - .Row + 1, 4))
MsgBox " '2 blocs contigus 3 et 4 colonnes" & vbLf & .Address, , "Méthode 1"
.PrintPreview
End With
With Union(.Offset(1 - .Row).Resize(.Row - 2, 3), .Resize(.Parent.UsedRange.Rows.Count - .Row + 1, 3))
MsgBox "2 blocs non-contigus" & vbLf & .Address, , "méthode 2"
.PrintPreview '
End With
End With
End SubBonjour Bart,
je vous remercie pour votre réponse. J'avais laissé cela un peu derrière moi mais j'y reviens maintenant. Désolé pour mon retour tardif.
Ca marche très bien si on sait quelle plage déborde d'une page sur l'autre, mais sauriez-vous comment faire si
- on a par exemple 3 plages distinctes, dont la seconde déborde d'une plage à l'autre
- comme elles sont de longueur variables, on ne sait pas a priori quelle plage va déborder de page
- une plage qui ne déborde pas en l'état peut être amenée à déborder si on bascule la plage précédente sur la page suivante.
Comment faire une macro qui s'appliquerait à toutes les plages et qui coupe dynamiquement tout cela ?
Je vous ai mis un fichier d'exemple en annexe avec la situation de départ en Sheet1 et la résultat attendu en sheet du même nom.
Merci pour votre aide !
Cordialement, Eric
re,
c'est facile ici, comme il y a une ligne vide entre chaque bloc de données. Comme ca, on a déjà 3 blocs séparés, mais si par exemple un des blocs est trop grand pour une page, avec le "Zoom=false" et le "FitToPagesWide = 3", excel réduira la taille des 3 plages pourque les 3 blocs tiennent sur une plage. (la 2ième plage est 75 lignes dans le PJ)
Sub Imprimer()
Dim UN As Range
With Sheets("feuil1")
Set c = .Columns("A").SpecialCells(xlConstants) 'les cellules qui contiennent un texte
For Each ar In c.Areas 'boucle chaque bloc contigu
Set UN = Union(IIf(UN Is Nothing, ar.Resize(, 2), UN), ar.Resize(, 2))
Next
MsgBox "mes 3 plages pour imprimer sont " & UN.Address
With .PageSetup 'les characteristiques
.PrintArea = UN.Address
.Orientation = xlPortrait
.Zoom = False 'zoom n'est pas fixe
.FitToPagesWide = 3 'forcer que le résultat soit au max 3 pages
.FitToPagesTall = 1
End With
.PrintPreview
End With
End Sub