Code VBA - Automatiser les couleurs de fond à l'impression

Bonjour à tous,

J’ai placé une mise en forme conditionnelle sur l’ensemble d’une feuille de manière à ce que les couleurs de fond de toutes les cellules disparaissent si le chiffre 1 se trouve en D1.

https://www.excel-pratique.com/~files/doc2/Demo.xls

Est-il possible d’utiliser un code VBA qui inscrirait le chiffre 1 en D1 lorsque l’impression est lancée et qui réinscrirait immédiatement après l’impression le chiffre 0 ? De cette manière l’impression serait toujours faite sans les couleurs de fond, mais l’utilisateur aurait toujours ces couleurs de fond à disposition lorsqu’il continue à travailler sur cette feuille.

Ou peut-être connaissez-vous un moyen plus simple pour arriver au même résultat !

Bonne journée.

Bonjour

Un autre moyen est un code forçant l'impression en noir et blanc, ex:

https://www.excel-pratique.com/~files/doc2/QgvsUDemo.xls

Cordialement

Bonjour

Salut Amadeus. Je venais de trouver ce code à placer dans ThisWorkbook

Private Sub Workbook_BeforePrint(Cancel As Boolean)
ActiveSheet.PageSetup.BlackAndWhite = True
End Sub

Cela rejoint ta solution

Pour Yvouille : plus besoin de MFC avec ces codes

Amicalement

Nad

Amadéus,

Comme je suis au travail, des sécurités m'empêchent de voir ta solution. Je vais devoir attendre ce soir d'être à la maison

Nad,

J'ai essayé ta solution, mais comme j'ai plusieurs feuilles dans mon fichier et que seule l'une d'entre elles doit être imprimée sans les couleurs de fonds, j'ai essayé de placé ton code sous "Worksheet" (voir la copie d'écran ci-jointe, je ne sais malheureusement pas comment la joindre plus facilement à mon message). Mais ça ne fonctionne pas

https://www.excel-pratique.com/~files/doc2/Demo_4.xls

Sais-tu ce que je fais de faux ??

Bonnes salutations à tous

Bonjour Yvouille, Nad, Amadéus, forum

Comme l'a dit Nad, tu places la macro dans 'ThisWorkbook', comme ceci :

yvouille

Puis, lorsque tu imprimes, tu coches la case 'Feuilles sélectionnées' comme ci-dessous :

yvouille2

Normalement, ça ne devrait imprimer que la feuille sélectionnée justement

Merci vba-new pour ton aide.

Effectivement que si je place le code sous "ThisWorkbook", ça fonctionne. Mais ça fonctionne alors pour toutes les pages du fichier, alors que les autres pages doivent être imprimées avec les couleurs de fonds.

N'y a-t-il pas la possibilité que ça fonctionne qu'avec cette feuille (possibilité de préciser le nom de la feuille à la place d'inscrire "ActiveSheet" ????).

Autrement est-ce que ma toute première proposition ne serait pas la solution ?

Bonne journée

Salut yvouille,

Essaie avec ça (je ne sais pas si c'est ça qui te convient) :

Private Sub Workbook_BeforePrint(Cancel As Boolean)
Sheets("Tabelle1").PageSetup.BlackAndWhite = True
End Sub

Dis-moi si c'est ça.

Re-salut vba-new et le Forum,

J'ai maintenant deux problèmes !!

1) Avant que tu me proposes cette dernière modification, j'ai effacé l'ancien code que j'avais tout d'abord mis en place sous "Worksheet" puis ensuite sous "ThisWorkbook". Ce code n'est maintenant plus visible, mais il continue à agir ; toutes les pages sont imprimées sans couleur de fond !!! Sais-tu ou je peux encore chercher afin de l'effacer définitivement ????

2) Lorsque j'essaie de placer ton code (en parallèle au premier code indiqué sous point 1 ?), j'ai a chaque fois un blocage sur la ligne Sheets("Tabelle1").PageSetup.BlackAndWhite = True.

A tout hasard, je joins mon fichier en l'état actuel.

https://www.excel-pratique.com/~files/doc2/Demo_5.zip

Pouvez-vous encore m'aider ?

Bonne journée

RE,

Après quelques recherches, voici un code qui pourrait te convenir (à placer dans 'ThisWorkbook') :

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Cancel = True 'Mets l'argument Cancel à VRAI afin de ne pas imprimer

Application.EnableEvents = False 'permet de désactiver des événements avant l'impression
                                 'de telle sorte que l'événement BeforePrint n'ait pas lieu.

Sheets("Tabelle1").Cells(1, 4) = 1 'met la cellule D1 à 1

'Ensuite, on imprime la feuille "Tabelle1" grâce à la méthode PrintOut
Sheets("Tabelle1").PrintOut Preview:=True 'Preview est le paramètre de la méthode PrintOut
                                          'permettant d'afficher l'aperçu avant impression

Application.EnableEvents = True 'on réactive les évènements

Sheets("Tabelle1").Cells(1, 4) = 0 'on remet ensuite D1 à 0

End Sub

Dis-moi si ça te convient.

Salut yvouille

Nos messages se sont croisés

Euh... c'est moi ou le fichier que tu as joint n'a rien à voir avec le fichier de base?

Je ne vois pas de cellule D1, de plus le classeur est protégé!

Dis-nous précisément ce que tu veux faire dans le dernier fichier que tu as joint yvouille.

A+

Edit : et où sont les MFC?

Désolé vba-new, mais j'ai mélangé deux fichiers (mon premier fichier démo et mon fichier réel).

J'ai maintenant placé ton code dans mon fichier réel (dans lequel j'ai maintenant placé également des MFC gérées par la cellule N1, d'où la transformation de ton code dans ce sens).

https://www.excel-pratique.com/~files/doc2/c8VQNDemo_5.zip

Comme je l'expliquais dans mon précédent message, j'ai quand même toujours un problème avec ma seconde feuille "Steuerverwaltung" pour laquelle ce "code fantôme" a toujours de l'influence.

Si quelqu'un pouvait maintenant m'aider à corriger l'effet de ce "code fantôme" - que je ne sais où aller supprimer - je pourrais voir si le dernier code que tu m'as proposé fonctionne tel que désiré pour la feuille "PK Post" ou si c'est également le "code fantôme" qui enlève les couleurs de fonds pour cette feuille.

Bonnes salutations

Bonjour Yves,

Ta macro fait appelle à une feuille TABELLE1 au lieu "PKPOST" en 3 endroits raison de l'erreur.

Amicalement

Dan

Merci Dan pour cette information.

J'ai corrigé ce code selon tes informations.

J'ai cependant toujours le problème du "Code fantôme" qui influence l'impression de l'autre feuille (Steuerverwaltung) ; feuille qui devrait être imprimée, elle, avec les couleurs de fond.

Version corrigée :

https://www.excel-pratique.com/~files/doc2/Demo_6.zip

Bonnes salutations

Bonjour yvouille, forum,

Pour contourner ce problème (dont je ne connais pas l'origine), crée une nouvelle feuille sur laquelle tu copieras les données se trouvant sur la feuille 'Steuerverwaltung'.

Je précise que ce sont bien les données se trouvant sur la feuille qu'il faut copier et pas la feuille entière!

Après copie, supprime la feuille 'Steuerverwaltung'.

Dans le fichier joint, tu verras qu'en imprimant la 'Feuil1', les couleurs de fond sont maintenues.

A+

Re Yves,

Essaie en remplaçant ta macro par celle-ci dessous :

Dim ok As Boolean
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Macro Dan pour Yvouille
If ok = True Then Exit Sub
ok = True
If ActiveSheet.Name = "PK Post" Then
    ActiveSheet.PageSetup.BlackAndWhite = True
    Sheets("PK Post").PrintOut Preview:=True
Else: ActiveSheet.PageSetup.BlackAndWhite = False
ActiveSheet.PrintOut Preview:=True
End If
ok = False
End Sub

Amicalement

Dan

Bonjour Vba-new, Dan, Amadéus et le Forum

Je n’y comprends plus rien !

En combinant les propositions de Vba-new et de Dan, j’ai copié le contenu de mes deux feuilles dans un nouveau fichier et j’ai placé la dernière macro proposée par Dan sous « ThisWorkbook ».

Tout d’abord j’avais un résultat bizarre car - bien que l’impression ou non des couleurs de fonds fonctionnait à merveille - mon aperçu avant impression devait être fermé deux fois, ou alors, si je voulais imprimer, ça passait sans que je le veuille par l’aperçut avant impression !!

J’ai ensuite essayé de désactiver la macro de Dan et encore plus bizarrement, tout est entré dans l’ordre : Ma nouvelle page « PK Post » s’imprime directement ou se consulte à l’écran sans couleurs de fonds et la page « Steuerverwaltung » avec.

Tout serait pour le mieux si ce n’est que j’aimerais essayer de comprendre où est éventuellement placée maintenant la macro de Dan et - puisqu’il me semble bien que je l’avais désactivée - comment peut-elle fonctionner comme voulu ?

https://www.excel-pratique.com/~files/doc2/euOd7Demo_7.zip

Amadéus,

J’ai maintenant pu consulter ta proposition. Ta macro fonctionnerait parfaitement si ce n’est qu’elle a l’inconvénient de devoir passer par un bouton alors que ma demande première était que ce soit imprimé automatiquement sans couleurs de fonds.

Encore merci à tous ceux qui m’ont aidé. A vous relire pour mes questions en suspens ?

Bonne journée à tous

Re,

Yves, ton fichier version 7 ne comporte aucune macro.

Par ailleurs, tu ne dois pas combiner deux codes. Essaie avec uniquement le code que je t'ai donné en le plaçant dans THISWORKBOOK.

Dan

Salut Dan,

Tu indiques que mon fichier ne comporte aucun code, cependant les couleurs de fonds sont bel et bien enlevées pour la feuille "PK Post" lors de l'impression ou de la consultation sur l'aperçut.

C'est exactement ce que je désirais, mais comment est-ce possible que ça fonctionne si justement il n'y a plus de code ? C'est cela que je voudrais encore comprendre, par exemple s'il fallait modifier cette commande.

Est-ce possible que le code soit enregistré quelque part sur mon ordinateur, en dehors de ce fichier ??

Dans tous les cas, puisque ça fonctionne comme désiré, je ne vais pas insister afin d'avoir une réponse. Soit tu peux me l'expliquer sans trop de complication, soit je vais mettre ce fil sur résolu prochainement.

Bonne journée

Re,

Dans ton fichier V7, c'est la cellule N1 qui gère tes couleurs. C'est peut être pour cela que tu vois cette variation.

Ce que tu dois savoir, c'est que Excel gère les couleurs à l'impression en fonction de l'imprimante et que ton souci vient probablement de là.

L'aperçu est géré en fonction de ce que tu trouves dans Fichier / Mise en page / feuille puis case à cocher "Noir et Blanc"

exemple : mets 0 en N1 puis vas dans fichier / mise en page /feuille et coche la case "Noir et blanc" puis fais un "aperçu avant impression". Tu trouveras ton aperçu avant impression en N&B. Décoche la case N&B puis fais un "aperçu avant impression" pour trouver ton document en couleur.

Cette case à cocher est valable pour chaque feuille à imprimer. Donc si tu la case sur la feuille 1 et pas sur la feuille 2, l'impression sera N&B en feuille 1 et en couleur avec la feuille 2.

Donc il n'y a pas de code "fantôme" enregistré.

Si ce n'est d'avoir un effet visuel sur ta feuille, les options de la case N ne servent pas si tu appliques le code que je t'ai donné. Celui-ci fonctionnera si ton imprimante accepte le Noir et Blanc et la couleur.

Voili voilou

Si pb n'hésite pas bien sûr

Dan

Dan,

En lisant ton explication ci-dessus, je crois que j’ai enfin compris ce qui c’est passé :

En faisant un essai avec ton dernier code, la case à cocher « Impression noir-blanc » a été activée à mon insu pour la feuille voulue par le passage

ActiveSheet.PageSetup.BlackAndWhite = True

Puis lorsque j’ai supprimé ta macro cette case à cocher est restée activée sans que je le sache …… à mon entière convenance !

Tout est bien qui finit bien. Merci pour ta peine et bonnes salutations.

Rechercher des sujets similaires à "code vba automatiser couleurs fond impression"