VBA : Imprimer sauf si les lignes sont masquées
fannoche35
Messages postés
12
Statut
Membre
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
cs_Le Pivert Messages postés 8437 Statut Contributeur -
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
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
A voir également:
- VBA : Imprimer sauf si les lignes sont masquées
- Excel compter cellule couleur sans vba - Guide
- Dépassement de capacité vba ✓ - Forum Excel
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
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
Voilà
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à
Hello,
Je débute depuis peu en VBA, et pour m'amuser et m'améliorer j'ai souhaité raccourcir le code de fannoche35, sans succès. Aurais-tu une piste ou une idée de pourquoi ca ne marche pas ? Surement à cause de ces page(i) que j'ai mal déclaré...
PS : sans prendre en compte les checkboxes
Je débute depuis peu en VBA, et pour m'amuser et m'améliorer j'ai souhaité raccourcir le code de fannoche35, sans succès. Aurais-tu une piste ou une idée de pourquoi ca ne marche pas ? Surement à cause de ces page(i) que j'ai mal déclaré...
PS : sans prendre en compte les checkboxes
Sub Imprime()
Dim page1 As String, page2 As String, page3 As String, page4 As String
page1 = "A1:AX69"
page2 = "A70:CM95"
page3 = "A96:AX166"
page4 = "A167:AX237"
For i = 1 To 4
With ActiveSheet.PageSetup
If i = 2 Then
Set c = xlLandscape
Else: c = xlPortrait
End If
.PrintArea = "page" & i 'définition de la zone d'impression
.Orientation = c 'mise au format portrait
.CenterHorizontally = True 'centrage horizontal de la feuille
End With
Next i
'ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 'impression
End Sub
Voir ceci pour les tableaux:
https://silkyroad.developpez.com/vba/tableaux/#LVI
@+
https://silkyroad.developpez.com/vba/tableaux/#LVI
Sub Imprime()
Dim NomTableau As Variant
Dim i As Integer
NomTableau = Array("A1:AX69", "A70:CM95", "A96:AX166", "A167:AX237")
For i = LBound(NomTableau) To UBound(NomTableau)
MsgBox NomTableau(i)
With ActiveSheet.PageSetup
.PrintArea = NomTableau(i) 'définition de la zone d'impression
End With
Next i
End Sub
@+
fannoche35,
voici le principe pour ne pas faire une usine à gaz:
Tu mets dans chaque Feuille la sélection correspondante qui se déclenchera avec l’événement Activate de la Feuille comme ceci:
voir l'evenement Feuille ici:
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-1
Ensuite la caption de chaque CheckBox sera mis au nom de la Feuille correspondante
On fera une boucle sur la collection des checkBox que l'on affichera dans une listbox
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LI-B
Il faudra aussi une ListBox pour afficher les Feuilles sélectionnées.
Voilà le code pour 3 feuilles à toi de l'adapter pour toutes tes feuilles:
Voici un exemple à télécharger
https://www.cjoint.com/c/HCckXMKk4QQ
Bon courage
@+ Le Pivert
voici le principe pour ne pas faire une usine à gaz:
Tu mets dans chaque Feuille la sélection correspondante qui se déclenchera avec l’événement Activate de la Feuille comme ceci:
Option Explicit
Private Sub Worksheet_Activate()
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
End Sub
voir l'evenement Feuille ici:
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-1
Ensuite la caption de chaque CheckBox sera mis au nom de la Feuille correspondante
On fera une boucle sur la collection des checkBox que l'on affichera dans une listbox
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LI-B
Il faudra aussi une ListBox pour afficher les Feuilles sélectionnées.
Voilà le code pour 3 feuilles à toi de l'adapter pour toutes tes feuilles:
Option Explicit
'http://www.mdf-xlpages.com/modules/newbb/viewtopic.php?post_id=7055
'http://silkyroad.developpez.com/VBA/ControlesUserForm/#LI-B
'http://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-1
Private Sub CommandButton1_Click()
Dim Ctrl As Control
Dim sRep As String
Dim sFilename As String
Dim nom As String
Dim nombre As Integer 'nombre de feuille
ListBox1.Clear
'Boucle sur la collection de contrôles mettre la Caption des checkBox au nom des feuilles
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then
If Ctrl.Object.Value = True Then
ListBox1.AddItem (Ctrl.Caption)
End If
End If
Next Ctrl
nombre = ListBox1.ListCount 'nombre de feuille
Select Case nombre
Case Is = 1
Sheets(Array(ListBox1.List(0))).Select
nom = "_1"
Case Is = 2
Sheets(Array(ListBox1.List(0), ListBox1.List(1))).Select
nom = "_2"
Case Is = 3
Sheets(Array(ListBox1.List(0), ListBox1.List(1), ListBox1.List(2))).Select
nom = "_3"
End Select
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, _
OpenAfterPublish:=True
MsgBox "Enregistrer dans le même dossier que ce classeur au nom du classeur et du nombre de feuilles"
End Sub
Voici un exemple à télécharger
https://www.cjoint.com/c/HCckXMKk4QQ
Bon courage
@+ Le Pivert
Moi qui débute en autoformation c'est très compliqué ! Je vais travailler dessus.
Ce que tu demandes n'est pas compliqué, mais c'est une usine à gaz à paramétrer pour chaque cas de figure!
(ps: le lien de l'exemple à télécharger, n'est pas ou plus actif
il est valable 4 jours
https://www.cjoint.com/c/HCinG0bQBSQ
Voilà
Ce que tu demandes n'est pas compliqué, mais c'est une usine à gaz à paramétrer pour chaque cas de figure!
(ps: le lien de l'exemple à télécharger, n'est pas ou plus actif
il est valable 4 jours
https://www.cjoint.com/c/HCinG0bQBSQ
Voilà
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