Imprimer lignes selon conditions

Résolu
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   -  
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour le forum !

J'ai encore besoin d'un peu d'aide :
Voici ce que je voudrais faire (question à ne pas poser un soir de match ...) :
Lors de l'impression d'une feuille Excel, j'aimerai empêcher l'impression de certaines lignes selon un critère bien précis :
Un exemple :
=SI(F35="";PRINT(L1:F24);PRINT(L1:L36))
Sauf que pas de chance, la fonction "PRINT" n'existe pas !

Merci d'avance pour vos idées lumineuses ...

EDIT : avec un petit fichier exemple : https://www.cjoint.com/c/DGenFNru2UX

A voir également:

6 réponses

via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonjour touroul

Tu peux dans une macro définir la zone d'impression

ex:

If ActiveSheet.range("F35") ="" then ActiveSheet.PageSetup.PrintArea = "$A$2:$R$24"

Cdlmnt
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Boujour le forum

Je mis suis remis mais je peine à adapter la macro :
Voici ce que j'ai saisi et qui me génère une erreur 400 :
Sub ImprimerZones()

If ActiveSheet.Range("F36") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$24;$A$50:$Q$53"
If ActiveSheet.Range("F48") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$36;$A$50:$Q$53"
If ActiveSheet.Range("F48") <> "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$48;$A$50:$Q$53"
If Application.Dialogs(xlDialogPrint).Show = False Then Exit Sub

End Sub

But du jeu :
- Imprimer les 2 zones $A$1:$Q$24 et $A$50:$Q$53 s'il n'y a rien en F36
- Imprimer les 2 zones $A$1:$Q$36 et $A$50:$Q$53 s'il n'y a rien en F48
- Imprimer les 2 zones $A$1:$Q$48 et $A$50:$Q$53 s'il y a quelque chose en F48

A la fin, faire apparaître la boîte de dialogue Imprimer en forçant mode Paysage

Puis-je vous demander de corriger mes erreurs ?

Je vous en remercie d'avance !
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Un petit up !
Please help !
Merci d'avance ...
0
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Bonjour

Ta zone d'impression doit être formée d'une plage contiguë ,
soit tu veux imprimer la zone $A$1:$Q$24
soit la zone $A$50:$Q$53
soit la zone $A$1:$Q$53

ActiveSheet.PageSetup .Orientation = xlPaysage
pour mettre la feuille en format paysage

Cdlmnt
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Salut Via

Merci de t'y remettre

J'ai fait pas mal d'essais, mais mon code paraît poser des problèmes de compatibilité.
Je ne pense pas avoir mis les choses dans le bon ordre :

Sub ImprimerZones()

With ActiveSheet.PageSetup
If ActiveSheet.Range("A36") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$24"
If ActiveSheet.Range("A48") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$36"
If ActiveSheet.Range("A48") <> "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$48"
.PrintArea.FitToPagesWide = 1
.Orientation = xlLandscape
If Application.Dialogs(xlDialogPrint).Show = False Then Exit Sub
End With
End Sub


Peux-tu regarder ? Merci d'avance !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Re !

.PrintArea.FitToPagesWide = 1 envoie message d'erreur

Essaie ainsi

Sub ImprimerZones()


If ActiveSheet.Range("A36") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$24"
If ActiveSheet.Range("A48") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$36"
If ActiveSheet.Range("A48") <> "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$48"
With ActiveSheet.PageSetup
.Orientation = xlLandscape
.FitToPagesWide = 1
End With
If Application.Dialogs(xlDialogPrint).Show = False Then Exit Sub

End Sub

Cdlmnt
0
touroul Messages postés 509 Date d'inscription   Statut Membre Dernière intervention   16
 
Merci Via

J'ai fini par m'en sortir avec ce code :
Sub ImprimerZones()

If ActiveSheet.Range("A36") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$24"
If ActiveSheet.Range("A48") = "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$36"
If ActiveSheet.Range("A48") <> "" Then ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$48"
With ActiveSheet.PageSetup
.CenterFooter = Chr(10) & "Fait à " & Sheets(1).Range("C2") & " le " & Sheets(1).Range("I2") & Chr(10) & Chr(10) & " Le prestataire :" & " Signature du Client :"
.Orientation = xlLandscape
.FitToPagesWide = 1
.FitToPagesTall = 1
End With
If Application.Dialogs(xlDialogPrint).Show = False Then Exit Sub


End Sub

De cette manière, le pied de page peut récupérer des infos dans la feuille et cela m'évite d'avoir à imprimer 2 zones non-contigües.

Vraiment sympa de m'avoir aidé.
Je marque en résolu

Bonne soirée !
0
via55 Messages postés 14512 Date d'inscription   Statut Membre Dernière intervention   2 746
 
Impeccable !

Bonne soirée aussi
0