Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Ne pas tronquer les tableaux lors de l'impression

  • Initiateur de la discussion Initiateur de la discussion ascal44
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ascal44

XLDnaute Occasionnel
Bonjour , je joint un fichier sur lequel je ne voudrais pas que soient tronqué les tableaux lors de l'impression.

Je vous remercie pour vos conseils
 
Dernière édition:
Re : Ne pas tronquer les tableaux lors de l'impression

Une bonne amélioration serait de travailler sur la hauteur des lignes, et non leur nombre.

En passant les lignes à 100, ca diminue un peu la largeur mais ca permet d'avoir 5 pages.
 
Re : Ne pas tronquer les tableaux lors de l'impression

Avec gestion de la hauteur des lignes et plus du nombre :
Les commentaires deviennent faux !

Code:
Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
Dim tableau() As Variant
hauteur_max_par_feuille = 2000

nombre_ligne_totale = Range("C65000").End(xlUp).Row 'rechercher la derniere ligne de la colonne C

'RAZ tous les sauts de page
ActiveSheet.ResetAllPageBreaks

With ActiveSheet.PageSetup 'paramêtrer l'impression :
    .Zoom = False 'aucun zoom
    .FitToPagesWide = 1 'sur une page en largeur
    .FitToPagesTall = 1 'sur 10 pageS en hauteur
End With


'cacher/compter les lignes, ajouter les sauts de page
saut_page = 9 'saut initial, d'où commence le premier tableau APRES LE TITRE (le nom n'est pas le bon donc.)
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 4, 1 To n)
For i = 1 To saut_page
    tableau(4, 1) = tableau(4, 1) + Rows(i).Height 'hauteur des en-têtes
Next i
'remplir un tableau contenant le nombre de ligne des tableaux

For i = saut_page To nombre_ligne_totale 'pour toutes les lignes jusqu'à la fin
    
    'If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
    If Cells(i, 3).Value = "" Then
        Rows(i).EntireRow.Hidden = False 'cacher les lignes inutiles
    Else
       If Left(Cells(i, 3), 1) <> "*" Then 'si il n'y a pas le chiffre 3 dans la colonne 3, alors c'est que l'on est dans le tableau actuel (i) :
       
        tableau(1, n) = tableau(1, n) + 1 'j'ajoute une ligne au tableau en cours
        tableau(4, n) = tableau(4, n) + Rows(i).Height
        derniere_ligne = i 'j'identifie la dernière ligne
        End If
    End If
    
    If Left(Cells(i, 3), 1) = "*" Then 'si il y a présence du CHIFFRE 3 : nouveau tableau

        n = n + 1 'un tableau de plus
        ReDim Preserve tableau(1 To 4, 1 To n) 'j'agrandi ma variable tableau
        tableau(4, n) = tableau(4, n) + Rows(i).Height
        tableau(2, n - 1) = derniere_ligne 'j'ajoute au tableau précedent le numéros de la dernière ligne, de manière à le borner
        tableau(3, n) = i 'j'ajoute au tableau actuel le numéro de la ligne actuel pour lui définir sa première ligne
    End If
Next i
    
ActiveWindow.View = xlPageBreakPreview 'je casse toutes les sauts de pages
nb_tab = 0

print_area = "$A$1:" 'je définis une variable qui sera ma zone d'impression
For i = 1 To UBound(tableau, 2) 'pour tous les tableaux :
    hauteur_lignes = hauteur_lignes + tableau(4, i) 'j'incrémente mon nombre de ligne à imprimer
    nb_tab = nb_tab + 1
    If hauteur_lignes > hauteur_max_par_feuille Then 'si ce nombre dépasse le nombre max :
        
        If nb_tab > 1 Then i = i - 1 'si la taille dépasse une seul tableau, je suis forcé de l'imprimer tel quel, sinon, je revien en arrière de 1, pour rajouter une zone
        If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos ma zone d'impression (enfin la variable)
            print_area = print_area & "$N$" & CStr(derniere_ligne)
        Else 'si ce n'est pas le dernière tableau : j'incrémente ma variable zone d'impression avec les lignes du tableau en cours et du tableau suivant
            print_area = print_area & "$N$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
            hauteur_lignes = 0 'du coup, je repasse à 0 ligne
            nb_tab = 0
        End If
       
    Else
        If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos la variable
            print_area = print_area & "$N$" & CStr(derniere_ligne)
        End If
    End If
    
    
    
Next i


ActiveWindow.View = xlNormalView
ActiveSheet.PageSetup.PrintArea = print_area 'j'attribue à la zone d'impression la variable que j'ai crée ! et voila !
'Cells(1, 1) = print_area


End Sub
 
Re : Ne pas tronquer les tableaux lors de l'impression

MERCI pour tous le temps passé à m'aider, vous avez réalisé un superbe travail de persévérence et avez été très patient avec moi.

Je pense que le travail est finalisé à moi que je découvre un bug plus tard.

ENCORE MERCI
 
Re : Ne pas tronquer les tableaux lors de l'impression

Oh la la c'est encore moi.
J'ai imprimé le fichier et c'est trop petit : il faut des loupes ! Mais le remplissage est bon.

Pourrait on agrandir la taille de la police à 8 ou à 10 en impression ? Ou conserver la hauteur des lignes en impression ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
13
Affichages
495
  • Question Question
XL 2019 MFC
Réponses
6
Affichages
182
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…