Impression plus rapide

Résolu/Fermé
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 27 juil. 2015 à 12:17
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 - 28 juil. 2015 à 10:06
Bonjour à tous j'aurai besoin de votre avis sur cette discution.

J'ai réalisé un classeur Excel qui génénère et imprime environs 200 feuilles.

Imprimer ces 200 feuilles pour le classeur excel prend environs 10 minutes. Je voulais amélioré le temps d'impression donc j'ai commencé à annalyser mon code pour trouver quel partie était gourmande en temps.

Il c'est avéré que la partie la plus goumande était la ligne qui lance l'impression. (Je pense à cause que Excel affiche une petite fenêtre durant quelques secondes pour annoncé l'impression de la page.)

Ma question est : est-ce qu'il y a une manière d'optimisé ce temps d'impression à votre avis ? En masquant cette fenêtre d'impression ou qqchose comme ça ? Ou en imprimant toutes les feuilles d'un coup au lieu de les imprimer une par une ?

Merci de vos avis !

Bonne jourée

--
  • Vous pouvez mettre en forme votre code grâce à la flèche en haut a droite de l'éditeur de texte.

Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utiles."
A voir également:

4 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
27 juil. 2015 à 15:32
Bonjour,

Essaie ceci:

Dim Ws As Worksheet
 
For Each Ws In ThisWorkbook.Worksheets
    Ws.PrintOut
Next

0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
27 juil. 2015 à 15:44
Bonjour,

Souvent la lenteur provient de la mise en page (PageSetup).
Dans ce cas l'utilisation de la macro Xl4 permet un gain de temps notable.

Exemple de fonction (à adapter) :
Private Sub MiseEnPage(Optional orientation As Byte = xlPortrait)
' Met en page la feuille active. L'utilisation la macro Excel4 PAGE.SETUP() est nettement
' plus rapide, elle envoie tous les arguments en une seule fois alors que PageSetup effectue
' un appel par valeur à définir. Syntaxe :
' PAGE.SETUP(en_tête, pied_pg, marge_gch, marge_dr, marge_haut, marge_bas, no_lig_col,
'            quadrillage, centr_hor, centr_vert, orient, papier, échelle, no_pg, ordre_impr,
'            cellules_nb, qualité, marge_en_tête, marge_pied_pg, annot, brouillon)
'
' Note : Pour afficher la boite de dialogue utiliser PAGE.SETUP?() avec la même syntaxe.
'
' 09/09/08    Patrice             V3-1-03
'
Dim txt As String                 'Texte de la macro Excel4
Dim marge_gauche As String        'Marge gauche
Dim marge_droite As String        'Marge droite
Dim marge_haut As String          'Marge haut
Dim marge_bas As String           'Marge bas
Dim marge_en_tête As String       'Marge en-tête
Dim marge_pied_page As String     'Marge pied de page
  
  'Arrêter l'actualisation automatique de l'écran et les calculs
  Application.ScreenUpdating = False
  Application.Calculation = xlCalculationManual
  'Définir les marges (en cm)
  marge_gauche = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
  marge_droite = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
  marge_haut = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
  marge_bas = Replace(CStr(Application.CentimetersToPoints(1) / 72), ",", ".")
  marge_en_tête = Replace(CStr(Application.CentimetersToPoints(0.5) / 72), ",", ".")
  marge_pied_page = Replace(CStr(Application.CentimetersToPoints(0.4) / 72), ",", ".")
  'Macro Excel 4
  txt = "PAGE.SETUP("
  txt = txt & "" & ","                             'En tête
  txt = txt & """&L" & "&D"                        'Pied de page gauche (date)
  txt = txt & "&C" & "&A"                          'Pied de page centre (feuille)
  txt = txt & "&R" & "Page &P / &N""" & ","        'Pied de page droit (Page page/pages)
  txt = txt & marge_gauche & ","
  txt = txt & marge_droite & ","
  txt = txt & marge_haut & ","
  txt = txt & marge_bas & ","
  txt = txt & "False,False,"                       'En tête ligne & colonne, quadrillage
  txt = txt & "True,False,"                        'Centrage horizontal, vertical
  txt = txt & orientation & ","
  txt = txt & xlPaperA4 & ","                      'Papier
  txt = txt & "100,""Auto"",1,False,,"             'Echelle, no_pg, ordre_impr, N&B, qualité
  txt = txt & marge_en_tête & ","
  txt = txt & marge_pied_page & ")"
  Application.ExecuteExcel4Macro txt
  'Restaurer l'actualisation automatique de l'écran et les calculs
  Application.ScreenUpdating = True
  Application.Calculation = xlCalculationAutomatic

End Sub

0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
27 juil. 2015 à 16:10
Donc appeler cette function avant le .PrintOut devrait rendre l'impression plus rapide ?
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
27 juil. 2015 à 16:33
J'ai appeler ta fonction avant le .PrintOut. et ça change rien du tout :)

Tu peux m'expliquer quel est l'emplacement qui lui est destiné ?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
27 juil. 2015 à 17:35
Non, tu n'avais pas fourni ton code, cette fonction permet uniquement d'accélérer la mise en page (si tu effectues une mise en page complexe, ce n'est pas le cas)
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
28 juil. 2015 à 10:06
Tampis alors, merci pour tout :)
0
skk201 Messages postés 938 Date d'inscription jeudi 11 septembre 2008 Statut Membre Dernière intervention 16 octobre 2016 54
Modifié par skk201 le 27/07/2015 à 16:28
Je pense que j'ai pas été assez clair :)

Voici mon code :

For Com = 2 To max 'Pour chaque ligne visible générer et imprimer une feuille
If Sheets("LISTFACTURE").Rows(Com & ":" & Com).EntireRow.Hidden = False Then
Sheets("DETAILCOMMUNE").Cells(21, 4) = Sheets("LISTFACTURE").Cells(Com, 1).Value 'Change la valeur de la cellule qui charge les données
Sheets("DETAILCOMMUNE").PrintOut 'Imprime la feuille
End If
Me.add 'Avance la barre de progression dans l'Userform
Next


Basiquement, il y a une feuille (LISTEFACTURE) qui contient des lignes avec des codes. Si cette ligne est visible (donc elle contient des informations) alors la feuille copie le code de la ligne dans une autre feuille. Cette feuille va alors automatiquement charger le détails qui est lié à ce code, et puis imprimer la feuille de détails.

Mais c'est justement cette ligne :
Sheets("DETAILCOMMUNE").PrintOut 'Imprime la feuille

qui demande trop de temps à cause qu'un message d'information apparait.


J'ai essayé avec le code :

Application.DisplayAlerts = False


mais ça marche pas.

EDIT: D'après mes recherches cette fenêtre ne viens enfaite pas de Excel, mais directement de Windows. Donc il est apparament plus compliquer de la masquer.

Si une personne est interessée à savoir comment faire voici la source en anglais : https://www.mrexcel.com/board/threads/hide-now-printing-in-vba.13057/

Merci à tous pour votre aide.

--
  • Vous pouvez mettre en forme votre code grâce à la flèche en haut a droite de l'éditeur de texte.

Pensez mettre vos messages en [Résolu] et cliquer sur le + des conseil qui vous ont été utiles."
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
27 juil. 2015 à 16:01
Re,

As-tu essayé :
Application.DisplayAlerts = False
Sheets("DETAILCOMMUNE").PrintOut 'Imprime la feuille
Application.DisplayAlerts = True
0