definir une zone d'impression variable

  • Initiateur de la discussion Marion
  • Date de début
M

Marion

Guest
Bonjour le forum.

voila un soucis que je n'arrive pas a régler.

je veux imprimer une feuille mais la zone d'impression varie a chaque fois (ligne en plus) .

la zone d'impression est a1:t50 et une petite v1:ad8

peut-on avec une macro définir la zone a chaque fois, pour eviter d'imprimer des feuilles blanches

Merci de vos réponses

A+Marion
 

Philippe

XLDnaute Occasionnel
Ooooh MARION, comment oses-tu sous entendre que le repas fut trop arrosé, j'ai corrigé ce qui cloche
Ce code définit la zone d'impression de ton tableau en excluant toutes les lignes vides du bas, par contre il ne déclenche pas l'impression (mais ce n'est pas ce que tu demandais...)

Sub zoneimpres()
For x = 70 To 1 Step -1
Range('B' & x & ':T' & x).Select
For Each cel In Selection
If Trim(cel.Value) <> '' Then
fin = x
GoTo suite
End If
Next cel
Next x
suite:
ActiveSheet.PageSetup.PrintArea = $B$1:$T$' & fin
End Sub

ce qui clochait c'est que printarea ne se définit PAS avec 'Range' (dernière ligne)

Maintenant, si tu veux que le macro imprime directement, ajoute
juste avant 'End sub':

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Et attention, hein, plus de sous entendus, MOI qui ne boit que de la Badoit LOL :whistle:
 

KIM

XLDnaute Accro
Bonjour Philippe, bonjour le forum,
J'ai testé ton code,
il manquait le car ' dans la definition du printarea
ActiveSheet.PageSetup.PrintArea = '$B$1:$T$' & fin

Ton code definit la zone B1T70 jusqu'a ce qu'il trouve une cellule non vide à partir de la derniere cellule de la zone.

Comment peut-on faire pour definir la zone printarea en lui donnant une colonne A et une ligne B et definir les limites selon la dernière cellule non vide de la colonne et la ligne et en rajoutant le nombre de lignes et colonnes pour les titres ?
Merci
KIM
 

Hervé

XLDnaute Barbatruc
Bonjour tout le monde

Kim, c'est vrai que c'est pas clair ;)

Philippe, pour info, on peut utiliser range avec printarea en ajoutant la propriété address :

Public Sub vev()
ActiveSheet.PageSetup.PrintArea = Range('b1:t' & Range('b65536').End(xlUp).Row).Address
End Sub

Sinon, adapté à la demande de Marion :

Public Sub vev2()
Dim derligne As Integer
derligne = Range('b65536').End(xlUp).Row
If derligne > 70 Then derligne = 70
ActiveSheet.PageSetup.PrintArea = Range('b1:t' & derligne).Address
End Sub

Salut
 

KIM

XLDnaute Accro
Oui Philippe,
mon idee est de partir d'une ligne 2 et d'une colonne A
et de donner pour la ligne A et la colonne B la derniere cellule non vide de chacune sachant bien qu'il pourrait y avoir des cellules vides intermediaire.

ligne 2: dernier cellule non vide K2
Colonne A: derniere cellule non vide est A20
ma zone sera A1K20

et je definis ma printarea A1K20
voilà
merci Philippe
KIM
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Kim, Hervé, Philippe, Marion, Jean-Marie, le Forum

Pour ta dernière question Kim, je m'y prendrai ainsi :

Option Explicit

Public Sub DynamicPrintArea()
Dim DerLig As Integer
Dim DerCol As Integer
&nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; DerLig = Range('B65536').End(xlUp).Row
&nbsp; &nbsp; DerCol = Range('IV2').End(xlToLeft).Column
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(DerLig, DerCol)).Address
ActiveWindow.View = xlPageBreakPreview
End Sub


Je n'ai pas mis de limite pour 70, car je crois que c'est Marion qui avait besoin de cette limit.

Sinon je confirme pour Philippe ce que dit fort bien Hervé et que j'utilise ici aussi pour l'Object Rangen à condition de lui adjoindre la propriété 'Address'

Bonne Soirée
@+Thierry
 
M

Marion

Guest
bonjour au forun et a toutes les personnes qui mon répondu.

Vous êtes super, tous ses conseils, toutes ses solutions je suis comblée.

Un gros bisous a vous tous, j'ai ma solution.

Phillippe, ce n'était qu'un plaisanterie, gros bisous pour ton aide çà marche et vive la Badoit.

merci a Herve dont le code marche aussi.

A+Marion
 

Philippe

XLDnaute Occasionnel
Le problème avec ton code hervé, c'est que tu testes uniqt end xlup sur la colonne B, si tu es plus bas ailleurs, ça ne sera pas inprimé, c'est pour çà que je recherche si il y a des cellules remplies dans chaque ligne, en remontant de 70 à 1 ;)

Merci pour l'info sur range et printarea, je note ça dans ma petite tête.

Marion, je blaguais moi aussi...... je ne bois jamais de badoit :) :)
 

Monique

Nous a quitté
Repose en paix
Re,

Par formule.
Zone d'impression à partir de A2 (par insertion - nom - définir) :
=INDIRECT('A2:'&ADRESSE(MAX(SI(Zone<>'';LIGNE(Zone)));MAX(SI(Zone<>'';COLONNE(Zone)))))

Plus un format conditionnel pour jouer

[file name=ZoneImpressionKim.zip size=2790]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ZoneImpressionKim.zip[/file]
 

Pièces jointes

  • ZoneImpressionKim.zip
    2.7 KB · Affichages: 76

Philippe

XLDnaute Occasionnel
Bonsoir monique,
la méthode que tu proposes me plait bien, et puis c'est plus léger que du code.

Pour ma gouverne s'il te plait (je fais un peu de VBA mais je suis carrément niveau 0 en formules)

Donc je sais o&ugrave; placer ma formule quand elle va s'appliquer à une cellule, mais o&ugrave; la mettre pour triter un problème plus général comme dans le cas de KIM

Merci pour tes explications ;)
 

Monique

Nous a quitté
Repose en paix
Re,

Je ne suis pas s&ucirc;re d'avoir compris ce que tu demandes.

Dans le fichier joint, la formule est en place.
Ce qui est en colonne U n'est là que pour info.

Pour la mettre en place :
barre de menu - Insertion - Nom - Définir
Dans la zone du haut, tu tapes 'Zone_d_impression'
(ou tu cliques sur 'Zone_d_impression' s'il y en a déjà une de définie),
dans la zone du bas 'Fait référence à', tu tapes la formule :
=INDIRECT('A2:'&ADRESSE(MAX(SI(Zone<>'';LIGNE(Zone)));MAX(SI(Zone<>'';COLONNE(Zone)))))

(à condition d'avoir nommé 'Zone' toute la plage concernée)
 
B

Bernard dit B²

Guest
Il y a 1 fonction trop géniale dans Excel : l'affichage personalisé.
Tu définis une 1° partie à imprimer par 'l'aperçu des sauts de page'.
Tu nommes cet affichage par ex. impress 1. dans ajouter un affichage personnalisé.
Puis tu définis une zone différente à imprimer ; tu vas dans affichage personnalisé et tu lui donnes un 2° nom par ex. impress 2.
Facile !
 

KIM

XLDnaute Accro
Bonsoir Monique, Philippe, _Thierry, bonsoir le forum,
J'ai testé la solution par formule de Monique , Impeccable
je vais testé le code de Thierry qui devrait repondre à ma demande.
Je vous remercie tous
Merci le forum
grace à vous tous on avance dans notre travail quotidien
A+
KIM
 

Discussions similaires

Statistiques des forums

Discussions
314 222
Messages
2 107 470
Membres
109 836
dernier inscrit
SophieL16