Imprimer lignes selon conditions

Résolu/Fermé
touroul Messages postés 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 - Modifié par touroul le 4/07/2014 à 13:32
via55 Messages postés 14423 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 1 juin 2024 - 7 août 2014 à 22:13
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 14423 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 1 juin 2024 2 708
4 juil. 2014 à 14:05
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
Modifié par touroul le 7/08/2014 à 15:54
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
7 août 2014 à 16:45
Un petit up !
Please help !
Merci d'avance ...
0
via55 Messages postés 14423 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 1 juin 2024 2 708
7 août 2014 à 18:33
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
7 août 2014 à 20:21
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 14423 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 1 juin 2024 2 708
7 août 2014 à 20:44
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 465 Date d'inscription mardi 5 octobre 2010 Statut Membre Dernière intervention 29 janvier 2024 15
7 août 2014 à 22:04
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 14423 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 1 juin 2024 2 708
7 août 2014 à 22:13
Impeccable !

Bonne soirée aussi
0