Ajuster zone d'impression

Résolu
a51432 Messages postés 39 Statut Membre -  
a51432 Messages postés 39 Statut Membre -
Bonjour,

Je dispose d'un fichier dont le nombre de lignes et de colonnes est variable. Je souhaite trouver un code VBA qui me permette de faire en sorte d'ajuster la zone d'impression de manière à ce que toutes les données soient prises en compte pour impression et surtout que toutes les colonnes en largeur soient comprises sur 1 page.

Je vous remercie par avance de votre aide.
A voir également:

3 réponses

Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   339
 
Bonjour
En Supposant que le tableau commence en A1
Sub ZoneImpression()
    Application.ScreenUpdating = False
    DerLig = [A10000].End(xlUp).Row
    DerCol = [Xfd1].End(xlToLeft).Column
    Tableau = Cells(1, 1).Address & ":" & Cells(DerLig, DerCol).Address
    Range(Tableau).Select
    ActiveSheet.PageSetup.PrintArea = Tableau
    ActiveWindow.View = xlPageBreakPreview
    NbPage = ActiveSheet.HPageBreaks.Count + 1
    ActiveWindow.View = xlNormalView
    
'Formatage avant impression
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0)
        .BottomMargin = Application.InchesToPoints(0)
        .HeaderMargin = Application.InchesToPoints(0)
        .FooterMargin = Application.InchesToPoints(0)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperLetter
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = NbPage
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With
    'ExecuteExcel4Macro "PRINT(1,,,1,,TRUE,,,,,,1,,,TRUE,,FALSE)"
End Sub

Enlevez la coche de la dernière ligne si vous voulez lancer directement l'impression, n'ayant pas d'imprimante pour tester, je n'ai pas pu le vérifier
Cdlt
0
a51432 Messages postés 39 Statut Membre 1
 
merci beaucoup ca fonctionne parfaitement !
0
a51432 Messages postés 39 Statut Membre 1
 
Après plusieurs essais je constate que mon problème est toujours là. En effet, quand j'utilise le bouton "appercu des sauts de page", je constate que toutes les colonnes de mon tableau en largeur ne sont pas sur 1 seule page.

Auriez-vous une solution pour que le tableau tienne sur une seule page en largeur ? Merci
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   339
 
Bonjour
j'utilise le bouton "aperçu des sauts de page", je constate que toutes les colonnes de mon tableau en largeur ne sont pas sur 1 seule page.
L'aperçu, vous le faites après avoir lancer la macro ou bien avant?
Voici un fichier avec 88 colonnes sur plus de 2000 lignes, pour bien vérifier que cela fonctionne, j'ai colorer la dernière colonne en jaune pour m'assurer qu'elle tient bien sur une seule feuille en largeur
https://www.cjoint.com/c/EGpoPDMENcw
Quand vous lancez le programme et que vous voulez voir l'aperçu avant impression, quand s'ouvre la fenêtre"Imprimer", n'oubliez pas de cocher "Sélection" dans le pavé "Impression", vous verrez que la bande jaune est bien dans la feuille.
faite le test.
cdlt
0
a51432 Messages postés 39 Statut Membre 1
 
Je ne peux malheuresement pas télecharger le document sur mon lieu de travail. Je testerai en rentrant. Pour le moment, le code ne fonctionne pas pour l'une de mes feuilles et je ne comprends pas pourquoi. J'utilise bien le bouton "apercu des sauts de page" après utilisation de la macro
0
a51432 Messages postés 39 Statut Membre 1
 
Et quand je tente de lancer l'impression, toutes les colonnes ne sont pas prises en compte pour la feuille en question.
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   339
 
Je crois que j'ai compris, dans mon programme, je recherche la dernière colonne remplie sur la ligne 1 (généralement la ligne des entêtes), il y a de fortes chances que le N° de la dernière colonne de ligne 1 soit inférieur au numéro de la colonne qui contient la ligne la plus chargée. Si c'est le cas, 2 solutions: soit vous complétez la ligne de titres de telle manière à couvrir toutes les colonnes remplies, sinon remplacez la ligne suivante
DerCol = [Xfd1].End(xlToLeft).Column
par
DerCol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Si c'est ce que je pense, ça devrait marcher.
cdlt
0
a51432 Messages postés 39 Statut Membre 1
 
Dim Feuille As Worksheet
Dim derLigImp As Long
Dim derColImp As Long

For Each Feuille In ActiveWorkbook.Worksheets
If Feuille.Cells(15, 1) = "" Then
derColImp = Cells(17, Cells.Columns.Count).End(xlToLeft).Column
Else
derColImp = Cells(15, Cells.Columns.Count).End(xlToLeft).Column
End If
derLigImp = Range("A" & Rows.Count).End(xlUp).Row
Tableau = Cells(1, 1).Address & ":" & Cells(derLigImp, derColImp).Address
Range(Tableau).Select
ActiveSheet.PageSetup.PrintArea = Tableau
ActiveWindow.View = xlPageBreakPreview
NbPage = ActiveSheet.HPageBreaks.Count + 1
ActiveWindow.View = xlNormalView


J'avais modifié le code de cette manière pour aller chercher la dernière colonne sur la bonne ligne mais cela ne fonctionne tout de même pas.
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   339
 
Bonsoir
Le problème, c'est que si vous aviez suivi le code que je vous ai fourni, il y a avait un élément qui limitait le nombre de feuille en largeur, chose qui n'apparait pas dans votre code.
la ligne en question:
       .FitToPagesWide = 1

A corriger
cdlt
0
a51432 Messages postés 39 Statut Membre 1
 
Bonjour;
Cette ligne apparaît bien dans mon code, j'ai uniquement mis la partie modifiée, la suite du code est identique à celle que tu m'as fournie.
Cdlt
0
Frenchie83 Messages postés 2240 Date d'inscription   Statut Membre Dernière intervention   339
 
Bonjour
Il y a pourtant bien un élément qui traîne quelque part, est-il en dehors de la dernière colonne? en clair Quelle est la dernière colonne de la ligne 15 ou 17, et quelle est la dernière colonne visible sur l'aperçu?
Je dois m'absenter pour la journée, je regarderai ce soir
Cdlt
0
a51432 Messages postés 39 Statut Membre 1
 
Pour la page avec laquelle ça ne fonctionne pas, la ligne en question est la 15 et la dernière colonne sur cette ligne est la M. Hors sur l'aperçu avant impression, il ne prend que jusqu'à la D. En regardant avec le bouton "Aperçu des sauts de page", je constate qu'il prend bien toute la zone (jusqu'à la colonne M) mais il y a plusieurs pages en largeur séparées par des pointillés.
0
PlacageGranby Messages postés 402 Statut Membre 26
 
Bonjour,

La macro ajuste la page active.
Est-ce que vous appelez la macro pour chaque page ?

Si la ligne de référence pour le nombre de colonne change est différente d'un onglet à un autre alors je crois qu'il y a un problème.
A moins de copier la macro pour chaque onglet et ajuster la ligne de référence dans chaque copie.

Si ce n'est pas aucune de ces deux pistes. alors il y a un détail qui nous échappe. Il est très difficile de trouver sans avoir le fichier pour tester.
S'il est possible de mettre à disposition votre fichier excel (exempt de données confidentielle) via un site comme www.cjoint.com, alors il sera beaucoup plus facile pour les membres du forum de trouver le problème.
0
a51432 Messages postés 39 Statut Membre 1
 
Je le fais en effet pour chaque page avec un For each ... next et même en essayant de mettre le code uniquement pour la feuille ca n'a pas fonctionné. J'essaye de vous transmettre un classeur demain et je mettrai tout mon code.
0