[Résolu] Créer macro pour imprimer nombre défini de ligne sur un tableau

rico83600

XLDnaute Occasionnel
Bonjour,

J'ai un tableau contenant un filtre automatique.
En gros je me sert du filtre pour isoler une date. Pour chaque date il y a x lignes.

Ce que je voudrais c'est une macro qui imprime, en cliquant sur un bouton :
- au recto : mon entete + mes 2 premieres lignes de la date choisie
- au verso : mon entete + mes 2 lignes suivantes de celles imprimées précédement.

Comme vous pouvez l'imaginer si je demande ca c'est que mon tableau ne comportera pas que 6 lignes, mais énormement, mais chaque jour contiendra toujours autant de ligne.

J'ai des bases de novice - en VBA, en gros je sais juste adapter des macro a mes besoin.. J'ai vraiment besoin d'aide :(

Merci d'avance pour ce que vous pourrez faire
 

Pièces jointes

  • macro imprimer.xls
    17 KB · Affichages: 121
Dernière édition:

rico83600

XLDnaute Occasionnel
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Ok, apres multiples essais j'ai reussi a l'adapter a mon fichier de destination. Mais il ne convient pas à mon fichier. Ta premiere solution, couplée à celle de Hulk, est la bonne et je vais la garder comme ca, ca ira tres bien (le fait d'avoir la macro recto couplé a la macro verso, avec un call dans la macro recto).

Donc on part comme ca, la recto sur une feuille et le recto sur une autre, ca me convient parfaitement, merci à vous deux :).

Derniere question et j'arrete, la c'est plus facile je pense :
Dans la macro pour le verso, on a mis qu'on imprimé en entete les lignes 4 et 5, jusque la c'est parfait.
Mais au final il me faudrait aussi la ligne 6, qui correspond à la premiere ligne filtrée du jour.

J'ai essayé de faire ca :
ActiveSheet.PageSetup.PrintTitleRows = "$1:$3" 'titres
J'ai aussi essayé d'autres choses du genre

For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
n = n + 1
If n > 2 and n = 3 Then Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
If n = 4 Then Exit For

Mais ca ne marche pas. Cette ligne 3 correspondra toujoursn à la ligne présente en A6 ci dessous :

For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
 

job75

XLDnaute Barbatruc
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Re,

Pour ce dernier problème, la macro Verso imprime les lignes 1 à 4 mais avec la ligne 2 masquée temporairement :

Code:
Sub Verso()
'imprime 2 lignes d'en-têtes et les lignes visibles 1 à 4
Dim plage As Range, cel As Range, n As Byte, Lmasq As Range
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  If n = 2 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
  If n = 4 Then Exit For
Next
ActiveSheet.PageSetup.PrintArea = plage.EntireRow.Address 'zone d'impression
ActiveSheet.PageSetup.PrintTitleRows = "$4:$5" 'titres
ActiveSheet.PrintOut 'impression
Lmasq.Hidden = False 'affiche la ligne 2
End Sub
A+
 

rico83600

XLDnaute Occasionnel
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

C'est bon j'ai reussi a adapter :).
Mais au final cette solution n'est pas la meilleur, je vais prendre la premiere que tu m'as donné, couplé à celle de Hulk. C'est à dire une macro pour le recto, une macro pour le verso, et un call dans la premiere macro pour imprimer a la suite le verso.

De ce fait j'aurais le recto et le verso sur une feuille différente mais c'est pas grave ca marche tres bien comme ca. Merci a vous !

Par contre deux dernieres questions :

1) J'aimerais que dans mon impression, j'ai la premiere ligne de mon jour qui réapparaisse aussi dans mon verso, juste sous l'entete quoi.
J'ai testé des choses du genre :

If n > 2 and n =3 Then Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
Pour prendre la 3eme ligne visible en plus

ou
ActiveSheet.PageSetup.PrintTitleRows = "$4:$6" 'titres
Pour ajouter à l'entete la ligne numéro 6

Mais rien ne marche.

Si vous avez mal compris, il faut que pour mon verso, la premiere ligne sous mon entete soit aussi considéré comme un entete (elle est présente d'office dans le recto).

2)J'ai remarqué que si j'agrandissais légerement la taille de certaines colonnes/lignes, ma zone d'impression pouvait etre completement foutue en l'air...
DU genre le recto s'imprime bien, mais le verso s'imprime sur 2 feuilles : la premiere ne comporte que 1 seul jour (ca prend meme pas 1/10eme du papier sur la hauteur et 100% sur la largeur), et la 2eme contient le reste mais il y avait plus qu'assez de place poru mettre les deux ...

Je ne comprend absoluement pas pourquoi...
Puis je définir le nombre de colonne max a imprimer ? (a la rigueur je peux supprimer la colonne la plus a droite) ?
Ou alors lui dire de faire en sorte de réadapter la taille du tableau pour faire en une page le recto et une page le verso ?
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Re,

Pour le point 1) vous vous répétez... Avez vous vu ma macro du post #17 ???

Pour le point 2) il faudrait voir le fichier réel, mais il me semble qu'une mise en page avec "imprimer sur une seule page en largeur" doit faire l'affaire...

A+
 

rico83600

XLDnaute Occasionnel
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Désolé bug de mon coté...
Pour le point 1 je vais tester demain, mais je n'ai pas compris pourquoi tu veux cacher la ligne 2 ?

Pour le point 2, avec mon fichier je n'ai pas acces a cette option :(. Je vais fouiller un peu ce soir.
Par contre si mon fichier fait plein de colonnes, j'aimerais n'imprimer que les colonnes allant de A à H. COmment faire ?
 

job75

XLDnaute Barbatruc
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Re,

Pour n'imprimer que les colonnes A:H, on modifie la zone d'impression :

Code:
Sub Recto()
'imprime 2 lignes d'en-têtes et les lignes visibles 1 et 2
Dim plage As Range, cel As Range, n As Byte
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  If n = 2 Then Exit For
Next
ActiveSheet.PageSetup.PrintArea = Intersect([A:H], plage.EntireRow).Address 'zone d'impression
ActiveSheet.PageSetup.PrintTitleRows = "$4:$5" 'titres
ActiveSheet.PrintOut 'impression
End Sub

Sub Verso()
'imprime 2 lignes d'en-têtes et les lignes visibles 1 à 4
Dim plage As Range, cel As Range, n As Byte, Lmasq As Range
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  If n = 2 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
  If n = 4 Then Exit For
Next
ActiveSheet.PageSetup.PrintArea = Intersect([A:H], plage.EntireRow).Address 'zone d'impression
ActiveSheet.PageSetup.PrintTitleRows = "$4:$5" 'titres
ActiveSheet.PrintOut 'impression
Lmasq.Hidden = False 'affiche la ligne 2
End Sub
Pourquoi je masque la ligne 2 ?? Je vous laisse réfléchir 30 s, pas sorcier à comprendre...

A+
 

rico83600

XLDnaute Occasionnel
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

BOnjour à tous,

j'ai résolu tous mes problèmes grace à vous. Un de mes derniers problèmes qui résidait était qu'il y avait une mise en page défini pour cette feuille et que la macro était atteinte par le saut de page qui avait était défini... C'est pour cela que je me retrouvé avec une impression sur 3 pages au lieu de 2...

Par contre j'ai toujours le problème qui consiste à afficher la première ligne du jour dans le 2eme tableau.
Job75, ta technique marche tres bien en cachant la ligne 2 (ca y est j'ai compris pourquoi lol) si la plage de mon recto est sur 2 lignes (ce qui fait que pour mon verso on cache la ligne 2 mais on garde la premiere ligne du recto, ce qui est tres bien), cependant dans la réalité mon recto fait 32 lignes...

J'ai essayé de faire
Code:
If 2<= n <=32 Then
Mais la ca m'imprime plus rien sauf l'entete

Et si je met plein de IF comme ca, ca marche, mais par contre mes lignes cachées ne réapparaissent plus dans le tableau (le Lmasq.Hidden = False ne marche pas pour toutes les lignes cachées...)
If n = 2 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
If n = 3 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
If n = 4 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
If n = 5 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
If n = 6 Then Set Lmasq = cel.EntireRow: Lmasq.Hidden = True 'masque la ligne 2
Comment je peux lui dire que pour le verso il faut cacher les lignes de 2 à 32 pour conserver la ligne 1 puis imprimer a partir de 33 ?

C'est la derniere ligne droite, après ca vous aurez reussi ^^.

Merci d'avance et merci pour le travail déja fait.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Créer macro pour imprimer nombre défini de ligne sur un tableau

Bonjour rico83600,

Juste avant de partir, voici pour 32 lignes recto et verso :

Code:
Sub Recto()
'imprime 2 lignes d'en-têtes et les lignes visibles 1 et 2
Dim plage As Range, cel As Range, n As Byte
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  If n = 32 Then Exit For
Next
ActiveSheet.PageSetup.PrintArea = Intersect([A:H], plage.EntireRow).Address 'zone d'impression
ActiveSheet.PageSetup.PrintTitleRows = "$4:$5" 'titres
ActiveSheet.PrintOut 'impression
End Sub

Sub Verso()
'imprime 2 lignes d'en-têtes et les lignes visibles 1 à 4
Dim cel As Range, n As Byte, plage As Range, masque As Range
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  If n > 1 And n < 33 Then Set masque = Union(IIf(masque Is Nothing, cel, masque), cel)
  If n = 64 Then Exit For 'ou = 65...
Next
ActiveSheet.PageSetup.PrintArea = Intersect([A:H], plage.EntireRow).Address 'zone d'impression
ActiveSheet.PageSetup.PrintTitleRows = "$4:$5" 'titres
masque.EntireRow.Hidden = True 'masque les lignes
ActiveSheet.PrintOut 'impression
masque.EntireRow.Hidden = False 'affiche les lignes
End Sub
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 654
Messages
2 090 564
Membres
104 577
dernier inscrit
GOGNAN