Impression d'une feuille: Ne pas imprimer certaines cellules.

GuillaumA

XLDnaute Occasionnel
Bonjour à tous,

Ci-joint mon code d'impression:
Code:
Sub Print()
Dim P As Byte
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
End With

End Sub

Je voudrai que le texte présent en colonne D (D:D) ne s'affiche pas sur les feuilles imprimé. En effet il s'agit de formules cachés (écrite en blanc sur fond blanc et protégé).

Existe t'il une fonction pour cela ?

Amicalement,
Guillaume
 

James007

XLDnaute Barbatruc
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Bonjour,

Avec des formules écrites en blanc sur fond blanc, et en imprimant sur du papier blanc, je pense que tu ne devrais avoir aucune mauvaise surprise ... même si, ce n'est qu'en faisant un test, que tu devrais en avoir le coeur totalement net ...

A +
:)
 

Softmama

XLDnaute Accro
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

bonjour, une proposition ici :

VB:
Sub Print()
Dim P As Byte
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")
.columns(4).hidden= true
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
.columns(4).hidden= false
End With

End Sub
 

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Bonjour James, Softmama,
James: Cela n'imprime pas lorsque l'imprimante est en couleur. En revanche cela apparaît pour les impressions noir et blanc (considéré comme une couleur donc mis en noir).

Softmama: Je test ta solution sur le champs et te fait par de mon retour.

Merci pour vos réponses !!!

Amicalement,
Guillaume
 

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Re,
Je viens de tester ta solution Softmama,
Cette dernière marche parfaitement, cependant, elle fait disparaître la colonne comme son nom l'indique (Hidden)
Hors, j'ai besoin que la colonne reste apparente mais que le texte ne s'affiche pas. Est ce possible?


EDIT: Peut être en continuant a utiliser la formule hidden, mais ausis utiliser une formule pour rajouter une colonne juste avant (de la mémé taille) , puis supprimer cette colonne ensuite ?


Amicalement,
Guillaume
 
Dernière édition:

Softmama

XLDnaute Accro
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

re, ha ben oui, comme ceci alors( à tester)
VB:
Sub Print()
Dim P As Byte, Tablo()
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")
Tablo = .range("D1:D610").value
.range("D1:D610").value = ""
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
.range("D1:D610").value = Tablo
End With

End Sub

[EDIT] Ha ben non, j'ai pas gardé le columns.hidden là. J'ai préféré garder les valeurs de la colonne D en mémoire, effacer son contenu, imprimer et le remettre. mais si tu préfères avec une colonne factice, c'est faisable.
 
Dernière édition:

Softmama

XLDnaute Accro
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Tiens une autre technique, qui consiste à placer un gros pavé blanc sur les cellules que tu veux pas qu'elles s'impriment :

VB:
Sub Print()
Dim P As Byte
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")

'*****************************************************
ActiveSheet.Shapes.AddShape(msoShapeRectangle, .Range("D1").Left, 0, Columns(4).Width, .Range("D611").Top).Select
'*****************************************************
.range("D1:D610").value = ""
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
selection.delete
End With

End Sub
 

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Et bien la méthode est bonne =) , mais la valeur Tablo ne conserve pas les données (des centaines de formules) mais les supprimes pour les remplacer par des #REF!.
Deux choix s'imposent:
Soit copier Tablo sur une autre feuille, pour coller ensuite a nouveau sur la feuille Action plan.

Soit masquer la colonne en n'en rajoutant une autre just avant, puis a la fin, supprimer la colonne créé (qui sera la colonne 4 et ensuite unhide la colonne 4 (colonne 4 hidden au départ qui devient 5 quand hidden puis redevient 4 quand la colonne créée est supprimé).

Dans le premier cas, je saurai faire mais la méthode deviendrai trop lourde. Dans le second cas, je ne sais pas faire.

Merci de ton aide !!!
Amicalement,
Guillaume

EDIT: Je n'avais pas vu ton dernier message. Je le teste de suite
 
Dernière édition:

Softmama

XLDnaute Accro
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Re,

VB:
Bon bah la méthode 'colonne factice', alors^^
Sub Print()
Dim P As Byte
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")
.columns(5).insert
.columns(4).hidden= true
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
.columns(4).hidden= false
.columpns(5).delete
End With

End Sub
 

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Re :) ,

Ta solution du gros pavé est super original :D
Malheureusement, selection.delete ne marche pas et ce dernier reste sans être supprimé.

Enfin, ce pavé blanc à des bordures pleines noires qui "modifie" l'allure générale du rendu.

En tout cas, j'ai adoré l'idée :p

Guillaume

Edit: Je viens de voir ta nouvelle soluton. Comment préciser une largeur de 2,29 ?
Edit 2: Suis-je bête, cela prend en modèle la colonne précédente !!!!
Excellent je pense que ça va marcher cette fois !
 
Dernière édition:

Softmama

XLDnaute Accro
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

re,

Bon ben si t'aimes le pavé blanc, le revoici sans lignes autour, et qui disparait (normalement) après l'impression, mais bon à tester.

VB:
Sub Print()
Dim P As Byte
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")

'*****************************************************
ActiveSheet.Shapes.AddShape(msoShapeRectangle, .Range("D1").Left, 0, Columns(4).Width, .Range("D611").Top).Select
'*****************************************************
selection.name="Gniarf" 'on lui donne un nom
Selection.ShapeRange.Line.Visible = msoFalse 'on voit plus les bordures
.range("D1:D610").value = ""
.PageSetup.PrintArea = "$B$1:$Q$610"
With .PageSetup
.PaperSize = xlPaperA4
.Orientation = xlLandscape
.FitToPagesWide = 1
.BlackAndWhite = True
End With
.PrintOut Copies:=1
activesheet.shapes("Gniarf").delete 'on rappelle le nom donné et on l'efface
End With

End Sub
 

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Le pavé blanc, version remastérisé marche aussi :p je viens de tester.
Je pense adopter cette dernière. Cela évite toute modification de format des cellules avec cadre touchée par la colonne 4 qui se Hidde.

Merci à toi, Oh professionnel du pavé blanc :p

Bonne journée ;p
 
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Impression d'une feuille: Ne pas imprimer certaines cellules.

Re bonjour Softmama, le forum, le fil,

J'aurai une demande d'aide concernant ce sujet.
En effet, j'aimerai utiliser cette même technique afin de cacher des cellules définis.
Ces cellules se comptent par centaines, je me demandai donc comment automatiser la chose.

Mes cellules à cacher sont comme suivant:
B8:C8
B11:C11
B14:C14
(toute les 3 lignes jusqu'à B44:C44)

Puis intervalle de 5 lignes et:
B49:C49
B52:C52
B55:C55
...
B100:C100

Puis intervalle de 5 lignes et:
B105:C105
...

Le même schéma continue. Les listes (toutes les 3 lignes sont plus ou moins courte) donc il faudrait travailler en ensembles.

Je suis ouvert à tout aide sur ce sujet.

Merci de votre considération,

Amicalement,
Guillaume

PS: Les photos montre a quoi ressemble mes cellules. Il s'agit de la deuxième ligne de chaque ensemble qui doit disparaître à l'impression
La première image montre une suite, la seconde montre une transition.
 

Pièces jointes

  • Image.JPG
    Image.JPG
    29.5 KB · Affichages: 2 024
  • Image.JPG
    Image.JPG
    29.5 KB · Affichages: 2 386
  • Image.JPG
    Image.JPG
    29.5 KB · Affichages: 2 607
  • IMAGE2.JPG
    IMAGE2.JPG
    14.8 KB · Affichages: 157
  • IMAGE2.JPG
    IMAGE2.JPG
    14.8 KB · Affichages: 173
  • IMAGE2.JPG
    IMAGE2.JPG
    14.8 KB · Affichages: 201
Dernière édition:

Softmama

XLDnaute Accro
Bonjour GuillaumA,

Une proposition en pièce jointe, avec un truc qui me plait pas trop dedans. A savoir, au début de la macro, je définis manuellement les moments où elle doit prendre gare au décalage de 5 lignes en renseignant ce tableau :
Code:
  Lignes() = Array(8, 49, 105, 113)
(où 8 49 105 sont les débuts de chaque 'bloc' et 113, la fin du bazar.)
Ceci dit, il serait mieux d'automatiser cette étape. Seulement je n'ai pas assez d'éléments pour déterminer comment l'automatiser. Je pense qu'il faut considérer que c'est une zone, en colonne B, au delà de la ligne 8 qui a exactement 5 cellules vides de suite. Ou bien, y-a-t-il d'autres subtilités ?
Quoi qu'il en soit, si cela te convient ainsi, tu peux tester ceci :

VB:
Sub Print()
Dim P As Byte, t as Integer, u as Integer, Lignes()
P = MsgBox(Range("Database!K33"), vbYesNo + vbDefaultButton1)
If P = vbNo Then Exit Sub

Application.Dialogs(xlDialogPrinterSetup).Show
With Sheets("Action Plan")
  Lignes() = Array(8, 49, 105, 113) 'mettre les lignes de départ de chaque tableau + ligne de fin du dernier tableau +5
  For t = 0 To UBound(Lignes) - 1
    For u = Lignes(t) To Lignes(t + 1) - 5 Step 3 'de 3 en 3 lignes
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, .Range("B1").Left, Range("B" & u).Top, Columns("B:D").Width, .Range("B" & u).Height).Select
        Selection.ShapeRange.Line.Visible = msoFalse 'on voit plus les bordures
    Next u
  Next t
  .PageSetup.PrintArea = "$B$1:$Q$610"
  With .PageSetup
  .PaperSize = xlPaperA4
  .Orientation = xlLandscape
  .FitToPagesWide = 1
  .BlackAndWhite = True
  End With
  .PrintOut Copies:=1
  ActiveSheet.DrawingObjects.Delete 'on efface les pavés
End With
End Sub

Note que contrairement à la version précédente, je ne nomme pas les pavés, pour les effacer à la fin. Je pars de la supposition qu'il n'y a pas d'autres objet que ces pavés et je les efface tous d'un coup sans avoir besoin de boucler dessus par la commande:
Code:
Activesheet.drawingobjects.delete
Si jamais ça n'était pas le cas et que la macro effaçât des objets autres, il faudrait passer par les nommer et les effacer en bouclant dessus.
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal