Menu

VBA : Imprimer sauf si les lignes sont masquées

fannoche35 11 Messages postés jeudi 2 novembre 2017Date d'inscription 12 mars 2018 Dernière intervention - 22 nov. 2017 à 15:51 - Dernière réponse : cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention
- 13 mars 2018 à 16:15
Bonjour,

J'ai créé une macro qui permet d'imprimer la page 1 en portrait la page 2 en paysage puis les autres pages en portrait (voir ci-dessous Sub Imprime())

J'ai d'autres macro qui permettent de masquer des plages de ligne entières en fonction de si une checkbox est cochée ou non (voir ci-dessous Sub Checkbox10_Click()).
Je souhaiterais faire en sorte que si ma plage de ligne 96 à 167 est masquée (car checkbox10 décochée), il n'y ait pas du tout d'impression.
Je rencontre en effet un problème d'impression de pages blanches

Merci d'avance pour votre aide



Sub Imprime()

'Impression de la 1ère page en portrait
'--------------------------------------
Range("A1:AX69").Select 'définition de la plage de cellules constituant la 1ère page
ActiveSheet.PageSetup.PrintArea = "$A$1:$AX$68" 'définition de la zone d'impression
ActiveSheet.PageSetup.Orientation = xlPortrait 'mise au format portrait
ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression

'Impression de la 2ème page en paysage
'-------------------------------------
Range("A70:CM95").Select 'définition de la plage de cellules constituant la 2ème page
ActiveSheet.PageSetup.PrintArea = "$A$70:$CM$95" 'définition de la zone d'impression
ActiveSheet.PageSetup.Orientation = xlLandscape 'mise au format paysage
ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression

'Impression de la 3ème page en portrait
'--------------------------------------
Range("A96:AX166").Select 'définition de la plage de cellules constituant la 3ème page
ActiveSheet.PageSetup.PrintArea = "$A$96:$AX$166" 'définition de la zone d'impression
ActiveSheet.PageSetup.Orientation = xlPortrait 'mise au format portrait
ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression

'Impression de la 4ème page en portrait
'--------------------------------------
Range("A167:AX237").Select 'définition de la plage de cellules constituant la 4ème page
ActiveSheet.PageSetup.PrintArea = "$A$167:$AX$237" 'définition de la zone d'impression
ActiveSheet.PageSetup.Orientation = xlPortrait 'mise au format portrait
ActiveSheet.PageSetup.CenterHorizontally = True 'centrage horizontal de la feuille
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression



Sub CheckBox10_Click()
If CheckBox10.Value = True Then
    Rows("96:167").EntireRow.Hidden = False
       Else
    Rows("96:167").EntireRow.Hidden = True
    End If
End Sub
Afficher la suite 

Votre réponse

15 réponses

cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 22 nov. 2017 à 17:09
0
Merci
Bonjour,

comme ceci en début de Sub:

If CheckBox10.Value = False Then Exit Sub

fannoche35 11 Messages postés jeudi 2 novembre 2017Date d'inscription 12 mars 2018 Dernière intervention - 1 mars 2018 à 10:17
Bonjour,

Désolée pour le temps de réponse...
Merci pour ton aide cs_Le Pivert
Je n'ai pas qu'une check box mais plusieurs :
Je voudrais que la page 1 et 2 s'impriment toujours
que la page 3 s'imprime si checkbox1 cochée
que la page 4 s'imprime si checkbox 1 ou 3 ou 21 cochées
que la page 5 et 6 s'imprime si la checkbox 6 est cochée
que la page 7 s'imprime si la checkbox 2 est cochée
que la page 8 s'imprime si la checkbox 24 est cochée
que la page 9 s'imprime si la checkbox 23 est cochée
que la page 10 s'imprime si la checkbox 3 est cochée
que la page 11 s'imprime si la checkbox 21 est cochée
que la page 12 et 13 s'imprime si la checkbox 5 est cochée
etc...
De plus avec mon Sub Imprime, je n'arrive pas à imprimer les page dans un seul document pdf, cela me fiat plusieurs documents séparés. y a t-il une solution pour ça ?
Merci d'avance
Commenter la réponse de cs_Le Pivert
cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 1 mars 2018 à 11:59
0
Merci
De plus avec mon Sub Imprime, je n'arrive pas à imprimer les page dans un seul document pdf, cela me fiat plusieurs documents séparés. y a t-il une solution pour ça ?

Voir ceci, tu auras la réponse à ta question:

http://www.mdf-xlpages.com/modules/newbb/viewtopic.php?post_id=7055

Ensuite il suffit d'adapter cette ligne en fonction des CheckBox cochées


 Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select


Voilà
cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 12 mars 2018 à 14:21
Sans le fichier, je ne peux rien faire

Déposer le fichier ici avec toutes les explications:

https://www.cjoint.com/

dans l'attente,

Le Pivert
fannoche35 11 Messages postés jeudi 2 novembre 2017Date d'inscription 12 mars 2018 Dernière intervention - 12 mars 2018 à 16:16
voici mon fichier : https://www.cjoint.com/c/HCmoVmCIxVa
J'ai mis :
- dans la feuil1 la totalité des macros qui régissent les checkbox. J'ai demandé à ce que chaque checkbox masque ou affiche telles ou telles lignes en fonction de si elle est cochée ou non. Le but de faire ceci était notamment de pouvoir imprimer les plages non masquées mais cela ne fonctionne pas : j'ai des pages blanches qui s'impriment à la place des plages masquées. De plus, comme je te l'ai expliqué plus haut, le pdf s'imprime en plusieurs pages.

Je voudrais :
- que la page 1 et 2 s'impriment toujours.
- que la page 3 s'imprime si checkbox1 cochée ( j'ai donc masqué la plage de la page 3 dans ma feuil1 (plage 100:172) et demandé à imprimé la plage 101:171 dans mon module 2. Je pensais qu'une ligne en plus sur le masquage permettrait de ne pas imprimer la page mais non ! )
- que la page 4 s'imprime si checkbox 1 ou 3 ou 21 cochées (masquage des lignes 173:244 et impression de 174 à 243)
- que la page 5 et 6 s'imprime si la checkbox 6 est cochée (...)
- que la page 7 s'imprime si la checkbox 2 est cochée
- que la page 8 s'imprime si la checkbox 24 est cochée
- que la page 9 s'imprime si la checkbox 23 est cochée
- que la page 10 s'imprime si la checkbox 3 est cochée
- que la page 11 s'imprime si la checkbox 21 est cochée
- que la page 12 et 13 s'imprime si la checkbox 5 est cochée
etc...

- dans module 2 ce qui concerne l'impression du document
- dans module 3 ce qui concerne la réinitialisation du document
- en feuil5, à ne pas toucher car cela fonctionne
- en feuil4 : infos perso sur la construction du doc donc inutile

A disposition si tu as besoin de plus d'explication , c'est pas facile par écrit...
cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 12 mars 2018 à 18:47
Je suis désolé, mais cela dépasse mes compétences.

Vous aurez peut-être plus de chance avec un autre membre

Bon courage
cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 13 mars 2018 à 11:49
Je n'ai pas l'habitude d'abandonner comme cela. J'ai donc continué à chercher!
J'étais parti au départ sur des feuilles, ce qui était assez facile. Mais pour les pages c'est totalement différent. Le code n'est pas le même. Donc voici 2 macros:
une pour enregistrer toutes les pages et l'autre pour une page au choix:

Option Explicit
'enregistrer toutes les pages
Sub convert_to_pdf_allpage_de_la_feuille1()
Dim sRep As String
Dim sFilename As String
Dim nom As String
  nom = "essai"
    sRep = ThisWorkbook.Path & "\" 'chemin du dossier
    sFilename = Replace(ThisWorkbook.Name, ".xlsm", "") 'nom seul sans extension
    sFilename = sFilename & nom & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sRep & sFilename, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        From:=1 & 2, To:=1, OpenAfterPublish:=True 'From:=1 numero de la page, To:=1 numero de la Feuille
         MsgBox "Enregistrer dans le même dossier que ce classeur"
End Sub
'enregistrer une page
Sub convert_to_pdf_page1_de_la_feuille1()
Dim sRep As String
Dim sFilename As String
Dim nom As String
  nom = "azerty"
    sRep = ThisWorkbook.Path & "\" 'chemin du dossier
    sFilename = Replace(ThisWorkbook.Name, ".xlsm", "") 'nom seul sans extension
    sFilename = sFilename & nom & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        sRep & sFilename, Quality:= _
        xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        From:=1, To:=1, OpenAfterPublish:=True 'From:=1 numero de la page, To:=1 numero de la Feuille
         MsgBox "Enregistrer dans le même dossier que ce classeur"
End Sub


a mettre dans un module et les relier à un bouton formulaire

fait des essais. Je n'ai pas encore compris pour mettre plusieurs pages sans mettre la totalité

@+ Le Pivert
cs_Le Pivert 5180 Messages postés jeudi 13 septembre 2007Date d'inscriptionContributeurStatut 20 juin 2018 Dernière intervention - 13 mars 2018 à 16:15
Voici un exemple à adapter. J'ai mis les sauts de page au bon endroit, car cela coupait les pages.
Le code est dans le module de la feuille 1. Il y a un UserForm pour voir les pages et leurs positions.

https://www.cjoint.com/c/HCnplZslKUQ

@+ Le Pivert
Commenter la réponse de cs_Le Pivert