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

Mon programme se base sur le présence du mot "Tableau " pour identifier le début de chacun des tableaux.

Là, je ne vois pas trop comment faire sans y passer un certain temps de réflexion.
 
Re : Ne pas tronquer les tableaux lors de l'impression

Bonjour

Voici quelques commentaires

Code:
Sub mise_en_page_sans_tronquer()
Dim tableau() As Variant
nombre_ligne_max_par_feuille = 70

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

'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 une page en hauteur
End With


'cacher/compter les lignes, ajouter les sauts de page
saut_page = 7 'saut initial, d'où commence le premier tableau
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 3, 1 To n)
'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
        Rows(i).EntireRow.Hidden = True 'cacher les lignes inutiles
    Else
        If Left(Cells(i, 3), 8) <> "Tableau " Then 'si il n'y a pas le mot tableau 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
        derniere_ligne = i 'j'identifie la dernière ligne
        End If
    End If
    
    If Left(Cells(i, 3), 8) = "Tableau " Then 'si il y a présence du mot tableau : nouveau tableau
        n = n + 1 'un tableau de plus
        ReDim Preserve tableau(1 To 3, 1 To n) 'j'agrandi ma variable tableau
        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

print_area = "$A$6:" 'je définis une variable qui sera ma zone d'impression
For i = 1 To UBound(tableau, 2) 'pour tous les tableaux :
    nb_ligne = nb_ligne + tableau(1, i) + 1 '(rajout d'1 ligne à chaque tableau) 'j'incrémente mon nombre de ligne à imprimer
    
    If nb_ligne > nombre_ligne_max_par_feuille Then 'si ce nombre dépasse le nombre max :
        If i > 1 Then i = i - 1 'si c'est je suis au premier tableau, je suis forcé de l'imprimer tel quel, mais si c'est plus que le premier, 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 & "$G$" & 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 & "$G$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
            nb_ligne = 0 'du coup, je repasse à 0 ligne
        End If
       
    Else
        If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos la variable
            print_area = print_area & "$G$" & 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

Cordialement
Olivier
 
Re : Ne pas tronquer les tableaux lors de l'impression

Bonsoir , ça progresse doucement :

J'ai mis des "3" dans le titre des tableaux colonne C
Les cellules pleines des tableaux sont en colonne C ( en colonne A il peut y avoir des cellules vides)
Je ne veux pas supprimer les lignes vides entre les tableaux.
La dernière colonne des tableaux est la colonne N.

Voici le code que j'ai modifié :
Code:
Private Sub CommandButton7_Click()
Application.ScreenUpdating = False
Dim tableau() As Variant
nombre_ligne_max_par_feuille = 25

nombre_ligne_totale = Range("[COLOR="Blue"]C65000").[/COLOR]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 = [COLOR="blue"]10[/COLOR] 'sur 10 pageS en hauteur
End With


'cacher/compter les lignes, ajouter les sauts de page
saut_page = 7 'saut initial, d'où commence le premier tableau
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 3, 1 To n)
'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
        Rows(i).EntireRow.Hidden =[COLOR="blue"] False [/COLOR]'cacher les lignes inutiles
    Else
        If Left(Cells(i, 3), 8) <> "[COLOR="blue"]3[/COLOR]" 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
        derniere_ligne = i 'j'identifie la dernière ligne
        End If
    End If
    
    If Left(Cells(i, 3), 8) = "[COLOR="blue"]3[/COLOR] " Then 'si il y a présence du CHIFFRE 3 : nouveau tableau
        n = n + 1 'un tableau de plus
        ReDim Preserve tableau(1 To 3, 1 To n) 'j'agrandi ma variable tableau
        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

print_area = "$A$6:" 'je définis une variable qui sera ma zone d'impression
For i = 1 To UBound(tableau, 2) 'pour tous les tableaux :
    nb_ligne = nb_ligne + tableau(1, i) + 1 '(rajout d'1 ligne à chaque tableau) 'j'incrémente mon nombre de ligne à imprimer
    
    If nb_ligne > nombre_ligne_max_par_feuille Then 'si ce nombre dépasse le nombre max :
        If i > 1 Then i = i - 1 'si c'est je suis au premier tableau, je suis forcé de l'imprimer tel quel, mais si c'est plus que le premier, 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 & "$[COLOR="blue"]N[/COLOR]$" & 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 & "$[COLOR="blue"]N[/COLOR]$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
            nb_ligne = 0 'du coup, je repasse à 0 ligne
        End If
       
    Else
        If i = UBound(tableau, 2) Then 'si c'est le dernier tableau, je clos la variable
            print_area = print_area & "$[COLOR="blue"]N[/COLOR]$" & 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

Cela me coupe toujours mes tableaux.

Qu'est ce que j'ai laissé passé ?
 
Re : Ne pas tronquer les tableaux lors de l'impression

Bonjour

Il me faudrait le fichier mise à jour pour en reparler.

Premièrement, il faut laisser "1" sur le ".FitToPagesTall = 1 'sur 1 page en hauteur", puisque c'est justement ce que l'on cherche à faire.

Ensuite :
If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
Si l'on veu vérifier la présence sur la colonne 3, il faut modifier ceci en cela :
If Cells(i, 3).Value = "" Then


Enfin,
If Left(Cells(i, 3), 8) <> "3"
et
Left(Cells(i, 3), 8) = "3 "

Cela veut dire : les 8 premiers caractères de la cellule i,3 sont différents ou égaux de "3" et "3 ". Il faut donc mettre Le premier caractère, ou les deux premiers :
Left(Cells(i, 3), 2)


On en reparle

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

Bonjour, galère :

Si je laisse "1" sur le ".FitToPagesTall = 1 'sur 1 page en hauteur" je n'ai qu'une page en aperçu !alors que j'en voudrais un maximum de 10

Ensuite si je met :Left(Cells(i, 3), 2) <> "3" et Left(Cells(i, 3),2) = "3"

L'exécution tourne sans aboutir !
 
Re : Ne pas tronquer les tableaux lors de l'impression

Si je laisse "1" sur le ".FitToPagesTall = 1 'sur 1 page en hauteur" je n'ai qu'une page en aperçu !alors que j'en voudrais un maximum de 10
C'est le programme qui va créer lui même les pages. d'où le fait qu'on laisse 1 !


Ensuite si je met :Left(Cells(i, 3), 2) <> "3" et Left(Cells(i, 3),2) = "3"

il faut mettre ceci :

Left(Cells(i, 3), 1) <> "3" et Left(Cells(i, 3),1) = "3"

ou cela :
Left(Cells(i, 3), 2) <> "3 " et Left(Cells(i, 3),2) = "3 "

(soit 1 seul caractère, soit 2 avec un espace apres le 3).


Il me faudrait le fichier, pour mieux vous aider.

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

Re.

Plusieures petites choses, qui font tout bugger :

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

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 3, 1 To n)
'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) <> "3" 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
        derniere_ligne = i 'j'identifie la dernière ligne
        End If
    End If
    
    If Left(Cells(i, 3), 1) = "3" Then 'si il y a présence du CHIFFRE 3 : nouveau tableau

        n = n + 1 'un tableau de plus
        ReDim Preserve tableau(1 To 3, 1 To n) 'j'agrandi ma variable tableau
        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 :
    nb_ligne = nb_ligne + tableau(1, i) + 1  '(rajout d'1 ligne à chaque tableau) 'j'incrémente mon nombre de ligne à imprimer
    nb_tab = nb_tab + 1
    If nb_ligne > nombre_ligne_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)) & ":"
            nb_ligne = 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


Je n'avais pas effectué tous les tests qu'il fallait.
Ca devrait être un peu mieux maintenant.
 
Re : Ne pas tronquer les tableaux lors de l'impression

Bonjour , j'ai enfin réussi à faire ma mise en page .

Juste un petit truc : sur mon fichier complêt j'ai 8 pages à imprimer. Si je masque une cinquantaine de lignes j'ai toujours 8 pages à imprimer alors que je pourrais mettre plus de tableaux par page.Et réduire ainsi le nombre de pages à 5
 
- 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
Retour