Zone d'impression ; peut-on ne pas imprimer les lignes qui sont vides [Résolu]

Signaler
-
 LinDouch42 -
Bonjour,

J'ai créée une facture avec un grand nombre de ligne (car d'un mois à un autre je ne facture pas la même chose)
Je souhaiterais pouvoir imprimer mon document pour lequel j'ai défini une zone d'impression mais sans les lignes qui sont vides, de façon à avoir une fois l'impression faite, mon en-tête et mon bas de page ainsi que toutes les lignes remplies entre les deux (et évitant d'imprimer les lignes vide et gaspiller du papier pour rien, mais aussi pour avoir une belle facture au passage).

Merci pour votre aide

Cdt
Linda



Configuration: Windows / Chrome 86.0.4240.193

18 réponses

Messages postés
716
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
13 novembre 2020
115
Bonsoir,

Mettre éventuellement un exemple de votre fichier anonymisé à la dispo des contributeurs

Slts
Je n'arrive pas à joindre de document a la conversation.

Une idée?
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
Bonjour

Le plus simple : avant l'impression tu caches les lignes vides (format/ligne/masquer)

Cdlmnt
Messages postés
52649
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
15 novembre 2020
14 571
Bonsoir Linda.

La solution de ccm81 au post #3 est de loin la meilleure !
Masquer les lignes vides, ça ne demande jamais que 2 clics !
Pourquoi une macro pour si peu ? C'est choisir un marteau-pilon pour écraser une fourmi ...
Bonjour,

Merci pour vos conseils que je vais suivre.

Cdt
Merci pour votre retour.

Effectivement c'est une solution.
Mais j'aimerais savoir si on peut le faire de façon automatique.
Peut-être avec une macro?

Cdt
Messages postés
716
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
13 novembre 2020
115
Bonsoir voir ici

https://www.cjoint.com/

ou

https://mon-partage.fr/

puis copier le lien et le coller à la conversation sur CCM

Slts
Merci

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

Sachant qu'à terme, ce classeur sera enregistré sous le format avec macro

Cdt
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
Si tu tiens vraiment à une solution macro
https://www.cjoint.com/c/JKlulgT4mSB

Cdlmnt
Merci beaucoup. Très intéressant

Si j'ai bien compris, dans ce cas là, c'est une macro qui me permet de masquer les lignes vides automatiquement, et non une macro qui ordonne d'imprimer le document sans les lignes vides?

Est ce qu'il existe une qqchse qui pourrait répondre à ce dernier, car dans l'idéal c'est de pouvoir imprimer, voir même enregistrer le document (une macro d'enregistrement auto en pdf dans un fichier défini existe sur mon doc) sans masquer les lignes à l'écran.

Merci encore
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
une macro qui ordonne d'imprimer le document sans les lignes vides?
If li1 <> li2 Then Rows(li1 & ":" & li2).Hidden = True
' imprime la zone d'impression
ActiveSheet.PrintOut
' demasque les lignes
Call afficher_tout
End Sub

Cdlmnt
Oopsss, j'ai peur que cette macro ne fonctionne pas car j'ai oublié un détail.

Les lignes dont je parle, ce sont les lignes vide de ma facture. Elles sont vides de la colonne C à J, mais à partir de L toutes mes colonnes sont masquées mais les lignes ne sont pas vides (parfois des infos, des formules etc...). J'ai défini une zone d'impression de ma facture uniquement.

Ce qu'il faut que je réussisse à faire c'est de masquer les lignes à conditions que les lignes des colonnes de C à J soit vides, (et uniquement pour le corps de ma facture, i.e désignation, montant, qté etc...)

J'aurais aimer également que lorsque j'enregistre le fichier en pdf, qu'il soit enregistrer de la même manière, à savoir sans les lignes vides (vides de C à J mais à partir de L, elle peuvent contenir des infos).

Encore merci

Cdt
Merci beaucoup.

Est-ce que je dois le copier dans un nouveau module ou est-ce que je dois le mettre dans la la feuille correspondant à mon document?

Merci
Messages postés
716
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
13 novembre 2020
115
Bonjour,

Un essai à tester

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

Slts
Merci

Entre temps, j'avais créée deux modules. Et je constate en faite que l'idéal serait un mixte des deux (votre fichier et le mien)

Les modules que j'ai créer :

Module 1 : Enregistrement avec un bouton de contrôle de la facture en pdf directement dans un dossier (l'impression pouvant se faire à partir de cet enregistrement):

Sub EnregistrementFacture()
'je déclare mes valeurs

Dim NomDossier As String
Dim Chemin As String
'Je nomme le dossier et donne le chemin de sauvegarde

NomDossier = Application.InputBox("ArchivageFactures:", "Année ?")
Chemin = "C:\Users\linda\OneDrive\Documents\COLIS LOIRE EXPRESS\Gestion Clients\Factures\ArchivageFactures\" & NomDossier & "\"

If NomDossier = "" Then Exit Sub

ActiveSheet.ExportAsFixedFormat Type:=xlTypexlsx, Filename:= _
Chemin & "FactureNumero_" & Range("H2").Value & ".pdf", quality:= _
xlQualityStandard, includedocproperties:=True, ignoreprintareas:=False, _
openafterpublish:=False


End Sub

Module 2 : Masuer les lignes avec un bouton de contrôle
Sub masquer_ligne_Vide()
Dim cel As Range
For Each cel In Range("C25:C195")
If cel = "" Then
cel.EntireRow.Hidden = True
End If
Next
End Sub


Idéalement, il faudrait que je mette un autre bouton de control pour afficher les lignes masquées afin de pouvoir les utiliser si besoin.
Que me conseillez-vous? Un nouveau module ? Ou est-il possible de créer un bouton double emploi (Afficher/Masquer)?

Pouvez-vous également m'indiquer comment avez-vous fait pour personnaliser votre bouton de contrôle 'Imprimer' , c'est plus sympa avec ce visuel.

Merci
Cdt
Messages postés
716
Date d'inscription
dimanche 15 novembre 2015
Statut
Membre
Dernière intervention
13 novembre 2020
115
Bonsoir,

Désolé, je ne peux pas vous conseiller, je suis autodidacte, je fais beaucoup de bricole et donc je préfère laisser cette étape à quelqu'un de compétent en la matière et en ce qui concerne le bouton c'est une association de forme sur excel..... type rectangle à coin arrondi + ellipse + image + modifier avec remplissage dégradé etc, etc + grouper

Voilà

Slts
Messages postés
7039
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2020
574
Pour répondre à la question

Ou est-il possible de créer un bouton double emploi (Afficher/Masquer)?

OUI

voir ceci pour les shapes( ce bouton est une Shape):

http://boisgontierj.free.fr/fichiers/Images/lesimages.htm

voici le code à adapter:

Option Explicit
'http://boisgontierj.free.fr/fichiers/Images/lesimages.htm
Sub Rectangleàcoinsarrondis1_Clic()
If ActiveSheet.Shapes("Rectangle à coins arrondis 1").TextFrame.Characters.Text = "AFFICHER" Then
MsgBox "Afficher"
ActiveSheet.Shapes("Rectangle à coins arrondis 1").TextFrame.Characters.Text = "CACHER"
Else
ActiveSheet.Shapes("Rectangle à coins arrondis 1").TextFrame.Characters.Text = "AFFICHER"
MsgBox "Cacher"
End If
End Sub


Voilà ma modeste contribution

@+ Le Pivert
>
Messages postés
7039
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 novembre 2020

Merci beaucoup
Merci en tout cas pour votre aide.

Cdt
Bonjour,

Je vais donc abandonner l'idée d'avoir un bouton double control (Afficher et maquer les lignes vides, sauf si qq a la solution) et je vais conserver mes VBA, pour l'enregistrement de la facture en pdf dans un chemin d'accès précis, et la vba pour masquer les lignes vide. Module 2 : Masquer les lignes avec un bouton de contrôle

Sub masquer_ligne_Vide()
Dim cel As Range
For Each cel In Range("C25:C195")
If cel = "" Then
cel.EntireRow.Hidden = True
End If
Next
End Sub

J'aimerais donc insérer un nouveau module pour afficher les lignes masquées . Pouvez-vous m'aider pour la formulation de cette macro.
Merci
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
Re-bonjour

Un truc comme ça ?
https://mon-partage.fr/f/90BoSQaj/

Cdlmnt
Merci CC381, c'est presque ça.

J'ai copié votre vba et je l'ai coller dans un module de la vba de mon fichier (d'ailleurs quelle différence de la coller directement sur la feuille ou la coller dans un module inséré?). J'ai changeé
Const lideb = 70 ' ligne de départ de la recherche de lignes vides
Const lifin = 195 ' dernière ligne --------------------------------
Const covid = "C" ' colonne
Colonne C car point de départ pour rechercher si la C70 si vide
puis executer et rien ne se passe

Si j'ai bien compris, ces macros ne fonctionnent que si toute la ligne de la feuille est vide, alors que dans mon fichier, les premières colonnes sont effectivement vides, mais à partir de la colonne k par exemple, il y a des valeurs valeurs masquées. Donc quand j'exécute ta macro, cela ne masque pas les lignes (normal car elle ne sont pas vide).
Je pense que je me suis mal exprimée, je veux masquer les lignes si les cellules des colonne C à H sont vides, la plus importante étant la première car ci elle est vide automatiquement les suivantes jusqu'à H le sont.

La macro que j'ai mis fonctionne bien mais que pour masquer et pas pour effacer, vous l'aurez compris.

Autre complication, c'est quand je clique sur exécuter, une fenêtre macro s'affiche avec les trois macro de ce fichier "afficher tout", "cacher les ligne" et "enregistrement facture". Que dois je faire?
Et pour le bouton commande, étant donné qu'il a double fonction . Est ce un bouton lambda, comment affecter deux macros sur un bouton.

Merci beaucoup en tout cas pour votre aide. Je suis pas très douée dès que ca touche aux macros

Cdt
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
1. Si j'ai bien compris, ces macros ne fonctionnent que si toute la ligne de la feuille est vide
Non, la macro cacher cache les lignes lorsque la valeur en colonne covid est "" (c'est ce que j'ai compris)
2. Et pour le bouton commande, étant donné qu'il a double fonction . Est ce un bouton lambda, comment affecter deux macros sur un bouton.
Les boutons Afficher-Masquer et Imprimer sont des Contrôles ActiveX (à prendre dans la boite à outils controles et non formulaire)
3. (d'ailleurs quelle différence de la coller directement sur la feuille ou la coller dans un module inséré?
Dans la mesure où tout doit fonctionner dans la feuille Facture, le code peut être placé dans le module de cette feuille.
On crée des modules généraux (Module 1, ...) lorsque plusieurs feuilles sont concernées par les macros, ou bien quand il y a beaucoup de code, dans ce cas, ça permet de faire du rangement
4. comment affecter deux macros sur un bouton.
Il suffit de les appeler

https://mon-partage.fr/f/M5GIkuSn/

Cdlmnt
Merci beaucoup CCM81 pour ces éclaircissement.

Peux-t-on rajouter dans la private sub imprimer, la zone d'impression que j'ai défini.
En effet, quand je veux imprimer à partir de fichier, mon aperçu prend bien en compte la zone défini. Mais si je le fais à partir du bouton de controle, c'est toute la page qui est visible.

Cdt
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
With ActiveSheet
.PageSetup.PrintArea = "$B$5:$I$207"
.PrintPreview


mais chez moi (excel 2003) , ça s'obstine à afficher le haut de page dans l'aperçu avant impression

Cdlmnt
Super ça fonctionne de mon coté.

Merci énormément pour ton aide.

Est ce que je peux abuser de ta gentillesse mais surtout de tes connaissance pour te demander comment faire pour avoir une image sympa en lieu et place du bouton de contrôle activex? Par exemple une imprimante pour le bouton Imprimer.

Cdt
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958
1. Tu te trouves un dessin
2. tu le colles dans ta feuille
3. Dans le module de la feuille Facture
3.1. Tu crées une procedure Public Sub Imprimer ()
3.2. Tu y colles le code du CommandButton2
3. clic-droit sur le dessin/Affecter une macro/ Et tu lui affectes Imprimer

https://mon-partage.fr/f/tHd0AWZz/

Cdlmnt
GENIAL, j'ai réussi a faire les modifications.

En revanche pour le bouton Afficher/Masquer, je n'y arrive pas et pour cause pas sur que l'on puisse affecter deux image à une macro ?

Dans le fichier joint les images que je souhaite utilise , le vert pour la commande afficher et le rouge pour Masquer. Peut-on les utiliser à la place du bouton control activex lambda. Est-ce que tu penses que c'est possible?

https://www.cjoint.com/c/JKot3lmJcMj
Merci
Messages postés
9621
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
15 novembre 2020
1 958

Peut-on les utiliser à la place du bouton control activex lambda. Est-ce que tu penses que c'est possible?

oui
https://mon-partage.fr/f/8hoj68sX/

RQ1. Le dessin masquer a été nommé "masquer", et l'autre bien sûr "afficher"
RQ2. tu peux les superposer histoire de faire croire qu'il n'y a qu'un seul bouton

Cdlmnt
PARFAIT. Merci infiniment pour ton aide