[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

Si vous voulez on peut diviser ca en plusieurs étapes : comment faire une macro pour imprimer l'entete ainsi que les 2 lignes suivantes qui sont visibles (ou alors imprimer jusqu'a la ligne contenant le theme "B" dans la colonne des themes...) ?

C'est un casse tete pour moi ;(
 

job75

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

Re,

Bon on est sérieux :cool:

Le filtre automatique étant en place et la date choisie filtrée, exécuter ces macros :

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

Sub Verso()
'imprime 2 lignes d'en-têtes puis les lignes visibles 3 et 4
Dim plage As Range, cel As Range, n As Byte
Set plage = [4:5] 'en-têtes
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  If n > 2 Then Set plage = Union(plage, cel.EntireRow)
  If n = 4 Then Exit For
Next
ActiveSheet.PageSetup.PrintArea = plage.Address 'zone d'impression
ActiveSheet.PrintOut 'impression
End Sub
A adapter, augmenter le nombre 10000 si d'avantage de lignes.

A+
 
Dernière édition:

job75

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

Re,

Les lignes non jointives de la zone d'impression sont imprimées sur des feuilles séparées.

Donc il faut définir les lignes de titres :

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 = 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 3 et 4
Dim plage As Range, cel As Range, n As Byte
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  If n > 2 Then Set plage = Union(IIf(plage Is Nothing, cel, plage), cel)
  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
End Sub
A+
 

rico83600

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

Bonjour,

et merci pour cette macro qui as l'air de correspondre à ce que je recherche ! :)

Cependant j'ai un petit soucis : j'ai copié collé ton script dans l'éditeur, j'ai créé un bouton, et j'ai associé le bouton a la macro en question.

Mais etant donné qu'il y a 2 sub et 2 en sub end(), il me separe la macro en 2 ... Donc en gros je ne peux pas associer mon bouton aux 2 macro, mais seulement a l'une ou l'autre, c'est a dire qu'il me fera l'impression soit du recto, soit du verso ...

Un ptit plus monsieur Job75, ou alors faut il vraiment un robot ? :p

Merci
 
Dernière édition:

Hulk

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

Hello Rico, Job :), Forum,

Tu peux essayer en appelant la macro "Verso" dans la macro "Recto".

C'est à dire qu'à la fin de la macro "Recto" juste avant le End Sub, tu mets Call Verso.

Ensuite, à ton bouton, tu lui affectes la macro "Recto".

Mais à moins que ton imprimante ne fasse le recto-verso il te faudra quand même le robot pour tourner la feuille :)


PS. Note que tu peux aussi copier tout le contenu de la macro "Verso" et le copier dans la macro "Recto" pour faire qu'une seule macro, mais meilleure lisibilité comme telle.
 
Dernière édition:

rico83600

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

Ton call marche bien merci :p

Derniere étape ^^ : j'avais noté ce probleme avant de mettre le call. Quand j'utilisais la macro recto ou verso, la feuille passais dans l'imprimante un premier coup puis un deuxieme comme si elle voulait imprimer recto verso mais n'imprimais que sur une seule des faces au final.

Et la ca donne la meme chose (a part qu'au moins la j'ai les 2 macro qui sont executées) : ma feuille recto fais 2 aller retour dans l'imprimante (comme pour une impression recto verso), mais seulement la macro recto est excécuté, puis derriere une autre feuille fait un allé retour où seulement la macro verso est exécuté...

Par contre pour ces 2 feuilles imprimées, c'est pour les deux du meme coté, c'est a dire soit le recto, soit le verso pour les deux (mais je crois que c'est plutot du coté verso).
 

job75

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

Bonjour rico83600, salut Hulk :)

A mon avis le plus simple est d"avoir 2 boutons, ainsi on imprime ce qu'on veut.

Si l'on veut absolument un seul bouton, à chaque clic on lui fera changer de nom.

Et la macro testera le nom pour exécuter soit Recto soit Verso.

A+
 

rico83600

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

Le probleme n'est pas d'avoir un bouton ou deux boutons, ce qu'il me faut c'est une macro qui me permette d'imprimmer mon tableau en recto verso sur une feuille.

Donc si je dois faire 2 boutons (ou juste 1 seul), le premier où j'imprime en recto, puis si je dois aller a l'imprimante pour remettre la feuille dans le bac et cliquer sur le deuxieme bouton pour le verso..... pas bien :p
 
Dernière édition:

rico83600

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

Ou alors peut etre faudrait il repenser le code VB différement :

Actuelllement on lui dit d'imprimer les lignes x1 à xn sur une premiere page, puis d'imprimer les lignes y1 à yn sur une autre page.

Ne peut t'on pas tout simplement lui dire d'adapter les marges de la zone d'impression à "entete" + 14 lignes pour la premiere page, et de ce fait, en parametrant l'imprimante en recto verso, il m'imprimera de la ligne 15 à n en verso ?
 

Hulk

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

Re,

Petite précision à apporter sur le fait qu'il imprime deux feuilles pour chaque macro.

En mode paysage une feuille A4 (je suppose que c'est le format voulu) c'est A1:K36, au delà il va imprimer sur une deuxième feuille, même un espace ou un objet tel qu'un bouton.
Tu peux en cliquant droit sur le bouton dans "Format de contrôle" puis l'onglet "Propriétés" décôcher "Imprimer l'objet".

En portrait c'est A1:G46.

Dans ton cas, étant donné que tu as des lignes masquées ou plutôt réduites (idem), en portrait c'est A1:G68 et en paysage c'est A1:K48.

Sur Excel 2010 c'est l'onglet du ruban "Affichage" puis "Mise en page" pour s'en rendre compte.
 

job75

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

Re,

Si l'on veut tout imprimer sur une même feuille :

Code:
Sub Imprime()
'imprime 2 lignes d'en-têtes puis les lignes visibles 1 et 2
Dim plage1 As Range, plage2 As Range, cel As Range, n As Byte
Set plage1 = [4:5] 'en-têtes
Set plage2 = [4:5] 'en-têtes
For Each cel In [A6:A10000].SpecialCells(xlCellTypeVisible)
  n = n + 1
  If n < 3 Then Set plage1 = Union(plage1, cel.EntireRow)
  If n > 2 Then Set plage2 = Union(plage2, cel.EntireRow)
  If n = 4 Then Exit For
Next
Application.ScreenUpdating = False
Workbooks.Add 'nouveau document
plage1.Copy [A1]
plage2.Copy [A6] 'ou plus bas
'---ajuste la largeur des colonnes---
For n = 1 To 50 'ajuster si plus de 50 colonnes
  Columns(n).ColumnWidth = plage1.Columns(n).ColumnWidth
Next
ActiveSheet.PrintOut 'impression
ActiveWorkbook.Close False 'ferme le document sans enregistrement
End Sub
La macro utilise un document auxiliaire qu'elle imprime.

Pas testé, il faudra peut-être définir une mise en page et/ou une zone d'impression...

A+
 

rico83600

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

Erreur 400 avec ton nouveau code.

Pour ce qui est de la proposition précédente, je ne peux pas prévoir une mise en page à l'avance car mon nombre de ligne est toujours le même, mais la taille de mes lignes peut etre différente. C'est pour cela que ma macro fait appel a un nombre de ligne et non une mise en page basée sur la taille du tableau.. :(

Un casse tête je vous l'avais dit ! :p
Enfin, si on (vous ^^) arrive pas a faire ce recto/verso auto, c'est deja une grande victoire pour moi d'avoir deja une macro qui permette d'imprimer ce nombre de ligne défini en y recopiant l'en-tête.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2