Imprimer les lignes sous conditions

nono2chevres

XLDnaute Nouveau
Bonjour à toutes et tous,

Je suis un débutant en VB et je me pose quelques questions. Je suis en possession d'un fichier excel de 360 lignes qui permet d'éditer des factures et le but est de n'imprimer que les lignes remplient. Comme chaque ligne possède une façon d'être remplie différente, je suis en train d'inscrire dans une colonne une formule adaptée qui affiche " " si la ligne est à imprimer et "" sinon (j'en suis à la ligne 130 environ actuellement).

Ma question est la suivante, existe-t-il un moyen rapide d'imprimer les lignes dont les cellules de la colonne L sont égale à " " ?

J'ai pensé à deux méthodes mais toutes deux prennent du temps :
- la première consiste à masquer celle qui n'ont rien d'écrit dedans puis d'imprimer le fichier
- la seconde consiste à copier les lignes possédant un espace sur une autre feuille du classeur puis de l'imprimer.

Le problème est que j'ai une boucle dans les deux cas qui est très longue à traiter, cela prend environ 3 minutes. Je souhaiterais que ça aille plus vite.

Je me suis concentré sur la macro qui masque seulement.
Mon code est-il peu optimisé ? Je pense que oui ne serait-ce que pour ma boucle, je l'effectue jusqu'à la ligne 500 au lieu de l'effectuer jusqu'à la dernière ligne non vide mais je ne sais pas comment faire.

J'espère avoir été claire, sinon faites le moi savoir, je tacherai de m'exprimer à nouveau.

Merci de votre aide,
Arnaud
 

Pièces jointes

  • DClight.zip
    39.9 KB · Affichages: 28
Dernière édition:

SubEndSub

XLDnaute Occasionnel
Re : Imprimer les lignes sous conditions

Bonjour chez vous

Exemple
Pour masquer les cellules vide de la colonne A

Code:
Sub Macro()
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
End Sub


Pour copier dans une nouvelle feuille
Code:
Sub Macro1()
Dim lignes As Range
Set lignes = Union(Columns("A:A").SpecialCells(xlCellTypeConstants, 23), Columns("A:A").SpecialCells(xlCellTypeFormulas, 23)).EntireRow
lignes.Copy
Sheets.Add
ActiveSheet.Paste
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
ActiveSheet.PrintPreview
'Remplacer par la ligne ci-dessus par:
'ActiveSheet.PrintOut ' pour imprimer
End Sub
 
Dernière édition:

nono2chevres

XLDnaute Nouveau
Re : Imprimer les lignes sous conditions

J'ai testé, avec le code modifié, et ça ne masque rien ou ça copie tout.
Je crois que le problème vient qu'il considère ma case non vide parce qu'elle comporte une formule.

Du coup, c'est très rapide, mais il ne se passe rien, enfin, si ça copie pour le second code dans une nouvelle feuille.
 

SubEndSub

XLDnaute Occasionnel
Re : Imprimer les lignes sous conditions

Essayer cette macro sur la feuille DC par exemple

Code:
Sub Macro2()
Dim lignes As Range
Set lignes = Columns("[COLOR="Blue"]B:B[/COLOR]").SpecialCells(xlCellTypeConstants, 23).EntireRow
lignes.Copy
Sheets.Add
ActiveSheet.Paste
ActiveSheet.PageSetup.PrintArea = ActiveSheet.UsedRange.Address
ActiveSheet.PrintPreview
'Remplacer par la ligne ci-dessus par:
'ActiveSheet.PrintOut ' pour imprimer
End Sub
 

Statistiques des forums

Discussions
312 584
Messages
2 089 991
Membres
104 330
dernier inscrit
joedal