Imprimer lignes selon conditions

Résolu
touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   -  
via55 Messages postés 14393 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

6 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  2. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
    1. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
       
      Un petit up !
      Please help !
      Merci d'avance ...
      0
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  4. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  7. touroul Messages postés 526 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Impeccable !

      Bonne soirée aussi
      0