Ne pas tronquer les tableaux lors de l'impression

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:

camarchepas

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

BOnjour Ascal ,

Ok , reprenons un peu ton problème ,tu dis masquer des lignes , mais tu les masques comment , manuellement ? ou par macro, car bon si c'est par macro tu dois pouvoir retrouver les coupures.
Sinon tes tableaux sont situés toujours dans les même colonnes, y-a-t-il au moins une ligne vide entre ces tableaux. et oui , il faut nécessairement connaitre un minimum si tu veux ne pas finir au fond de la mer , (Lol)
 

ascal44

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

Je masque par macro ,je vous joint un fichier exemple. ( j'ai une dizaine de macros différentes pour le masquage)

Des lignes vides sont entre les tableaux.

Oui les tableaux sont dans les même colonnes
 
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Ne pas tronquer les tableaux lors de l'impression

Bonjour à tous.

J'ai réalisé un début de code vendredi, est-ce qu'il a été testé ? car il me semble répondre à quelques questions, notament sur le nombre de ligne et sur le saut de page. Ajouter à cela les codes des autres XLdiens et je suis sur qu'on devrait avoir la solution apidement
 

ascal44

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

Bonjour , j'ai beaucoup réfléchi ce week end sans trouver la solution.

J'ai testé votre code Odesta c'est pas mal , mais je voudrais placer un maximum de tableaux complêts sur une même feuille pour économiser le papier.
J'ai pensé repérer les débuts de tableaux en colonne H par 1 et la fin de tableaux par 2. Mais je ne saurait pas compléter votre code.

Sinon dernière solution reprendre l'en tête du tableau tronqué sur la feuille suivante et ainsi de suite ?
 

Odesta

XLDnaute Impliqué
Re : Ne pas tronquer les tableaux lors de l'impression

Et le résultat est proche de celui voulu ? ca imprime bien le maximum de tableaux sur la 1ere page ?

Il faut surement ajouter des petites choses au code pour le rendre exactement comme vous le souhaitez. Par exemple, compter le nombre de titre, pour l'ajouter aux 'nombre de ligne max'
 

Odesta

XLDnaute Impliqué
Re : Ne pas tronquer les tableaux lors de l'impression

J'ai corrigé mon code, en changeant la façon de faire, je travaille par la zone d'impression.

Attention, il faut impérativement une ligne vide AVANT chaque tableau (sans quoi, il y a risque d'avoir plusieurs pages

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

nombre_ligne_totale = Range("A65000").End(xlUp).Row

'RAZ tous les sauts de page
ActiveSheet.ResetAllPageBreaks
With ActiveSheet.PageSetup
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With


'cacher/compter les lignes, ajouter les sauts de page
saut_page = 7 'saut initial
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 3, 1 To n)
'remplir un tableau contenant le nombre de ligne des tableaux
'cacher les lignes inutiles
For i = 7 To nombre_ligne_totale
    
    If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
        Rows(i).EntireRow.Hidden = True
    Else
        If Left(Cells(i, 3), 8) <> "Tableau " Then
        tableau(1, n) = tableau(1, n) + 1
        derniere_ligne = i
        End If
    End If
    
    If Left(Cells(i, 3), 8) = "Tableau " Then
        n = n + 1
        ReDim Preserve tableau(1 To 3, 1 To n)
        tableau(2, n - 1) = derniere_ligne
        tableau(3, n) = i
    End If
Next i
    
ActiveWindow.View = xlPageBreakPreview

print_area = "$A$6:"
For i = 1 To UBound(tableau, 2)
    nb_ligne = nb_ligne + tableau(1, i)
    
    If nb_ligne > nombre_ligne_max_par_feuille Then
        If i = UBound(tableau, 2) Then
            print_area = print_area & "$G$" & CStr(derniere_ligne)
        Else
            print_area = print_area & "$G$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
            nb_ligne = 0
        End If
       
    Else
        If i = UBound(tableau, 2) Then
            print_area = print_area & "$G$" & CStr(derniere_ligne)
        End If
    End If
    
    
    
Next i


ActiveWindow.View = xlNormalView
ActiveSheet.PageSetup.PrintArea = print_area

End Sub

A tester !
 
Dernière édition:

Odesta

XLDnaute Impliqué
Re : Ne pas tronquer les tableaux lors de l'impression

Bonjour

ok. Vous avez regardé le code et ce qui cloche ?

j'ai déje vue un bug : il manquait le Zoom = Flase
Code:
With ActiveSheet.PageSetup
    [B].Zoom = False[/B]
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With
Cordialement
 

ascal44

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

Bonjour , ça avance.

Pourriez vous me commenter le code ? En particulier celui là :
Code:
If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
        Rows(i).EntireRow.Hidden = True
    Else
 

Odesta

XLDnaute Impliqué
Re : Ne pas tronquer les tableaux lors de l'impression

Ce morceau de code sert à cacher la ligne en cours, ici "i", lorsqu'elle est vide en colonne A et vide en colonne C (pour la cas ou c'est une ligne 'tableau x'

Sinon, j'ai amélioré mon code, pour qu'il ne rajoute pas un tableau de trop à chaque fois :

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

'RAZ tous les sauts de page
ActiveSheet.ResetAllPageBreaks
With ActiveSheet.PageSetup
    .Zoom = False
    .FitToPagesWide = 1
    .FitToPagesTall = 1
End With


'cacher/compter les lignes, ajouter les sauts de page
saut_page = 7 'saut initial
nb_saut = 1
n = 1
ReDim Preserve tableau(1 To 3, 1 To n)
'remplir un tableau contenant le nombre de ligne des tableaux
'cacher les lignes inutiles
For i = 7 To nombre_ligne_totale
    
    If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
        Rows(i).EntireRow.Hidden = True
    Else
        If Left(Cells(i, 3), 8) <> "Tableau " Then
        tableau(1, n) = tableau(1, n) + 1
        derniere_ligne = i
        End If
    End If
    
    If Left(Cells(i, 3), 8) = "Tableau " Then
        n = n + 1
        ReDim Preserve tableau(1 To 3, 1 To n)
        tableau(2, n - 1) = derniere_ligne
        tableau(3, n) = i
    End If
Next i
    
ActiveWindow.View = xlPageBreakPreview

print_area = "$A$6:"
For i = 1 To UBound(tableau, 2)
    nb_ligne = nb_ligne + tableau(1, i) + 1 '(rajout d'1 ligne à chaque tableau)
    
    If nb_ligne > nombre_ligne_max_par_feuille Then
        If i > 1 Then i = i - 1
        If i = UBound(tableau, 2) Then
            print_area = print_area & "$G$" & CStr(derniere_ligne)
        Else
            print_area = print_area & "$G$" & CStr(tableau(2, i)) & ",$A$" & CStr(tableau(3, i + 1)) & ":"
            nb_ligne = 0
        End If
       
    Else
        If i = UBound(tableau, 2) Then
            print_area = print_area & "$G$" & CStr(derniere_ligne)
        End If
    End If
    
    
    
Next i


ActiveWindow.View = xlNormalView
ActiveSheet.PageSetup.PrintArea = print_area
'Cells(1, 1) = print_area
End Sub

A tester donc ^^


Cordialement
 

ascal44

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

Sur le fichier d'exemple ça fonctionne.
Mais quand j'essaie de l'appliquer sur celui à qui il est destiné ça ne marche pas.

Dans ce fichier les cellules de référence remplies sont dans la colonne C.

Je le joint ( j'ai supprimer quelques tableaux pour qu'il ne soit pas trop lourd)
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
266
Réponses
16
Affichages
428

Statistiques des forums

Discussions
312 671
Messages
2 090 760
Membres
104 654
dernier inscrit
elisabete_custodio