problème attente fin d'impression en pdf

  • Initiateur de la discussion Initiateur de la discussion teter
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

teter

XLDnaute Junior
Bonjour à tous,

Je cherche à envoyer en pdf et sauver automatiquement plusieurs fichiers excel d'un folder sous le même nom en pdf (abc.xls, def.xls, ;;; -> abc.pdf, def.pdf, ...). Ces fichiers ont la même structure avec une feuille "rapport" à exporter en pdf.
J'ai trouvé la macro suivante (merci je ne sais plus qui 🙂) mais le temps d'impression en pdf est assez long et ma macro n'attends pas, elle ferme mon fichier excel alors que l'impression n'est pas finie et du coup, ça plante.

J'ai essayé un timer, un application.wait ma ça ne prend pas. Je pense qu'il me faudrait une boucle effectuant la manip suivante : tant que mon fichier en cours d'impression n'est pas sauvé et fermé, ne pas continuer (ie ne pas fermé le fichier excel) mais je ne connais pas encore trop les boucles donc si qq'un peut m'aider ...

Ci joint le code.

Merci d'avance pour vos réponses et bon WE.

Teter

Sub Macro1()

Dim F As Variant
With Application.FileSearch
.NewSearch
.LookIn = "F:\test"
.Execute
On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F
PDFTPRINT
Next F
End With
End Sub

Sub PDFTPRINT()
Dim Nom As String
Dim C As Byte
Dim CC As Byte
C = Len(ActiveWorkbook.Name)
CC = C - 4
Nom = Left(ActiveWorkbook.Name, CC)
Application.SendKeys Keys:=" F:\test\" & Nom + "~"
Sheets("rapport").PrintOut ActivePrinter:="Adobe PDF sur Ne01:", Collate:=True

'Boucle manquante ???

ActiveWorkbook.Close False
End Sub
 
Re : problème attente fin d'impression en pdf

Bonjour,

A tout hasard, essayez avec ce code modifié.
Après plusieurs essais, il vous faudra affiner, à votre usage, la ligne de code
Sleep 10000
où le paramètre est exprimé en millisecondes (10000 = 10 secondes)

Code:
Declare Function GetTickCount Lib "kernel32" () As Long         '--- ajout pmo ---
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '--- ajout pmo ---

Sub Macro1()
Dim F As Variant
With Application.FileSearch
.NewSearch
.LookIn = "F:\test"
.Execute
On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F
PDFTPRINT
Next F
End With
End Sub

Sub PDFTPRINT()
Dim Nom As String
Dim C As Byte
Dim CC As Byte
C = Len(ActiveWorkbook.Name)
CC = C - 4
Nom = Left(ActiveWorkbook.Name, CC)
Application.SendKeys Keys:=" F:\test\" & Nom + "~"   'à quoi cela sert ???
Sheets("rapport").PrintOut ActivePrinter:="Adobe PDF sur Ne01:", Collate:=True

     '--- ajout pmo ---
Dim t&
t& = GetTickCount
Sleep 10000    'à adapter
MsgBox "Temporisation en millisecondes =" & GetTickCount - t&
     '----------------

ActiveWorkbook.Close False
End Sub

En espérant que cela apporte une solution à votre problème.

Cordialement.

PMO
Patrick Morange
 
Re : problème attente fin d'impression en pdf

Bonjour,

Merci Patrick pour votre réponse et votre question.
Je me suis aperçu que l'instruction SenKeys est inutile ici car le nom du fichier pfd est systématiquement celui du xls.
J'ai apporté quelques modifs à la macro : au niveau temps, tout va bien, mais je reste confronté à la nécessité de cliquer "Save" à chaque fois qu'un xls est envoyé en pdf.
Quelqu'un sait-il comment "zapper" cette manipulation (j'ai essayé un SendKeys avec 2 fois TAB et ENTER sans succès ?

Merci

Cordialement

Teter

Declare Function GetTickCount Lib "kernel32" () As Long '--- ajout pmo ---
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) '--- ajout pmo ---
Sub print_several_files_to_pdf()
Dim F As Variant
Dim Nom As String
With Application.FileSearch
.NewSearch
.LookIn = "F:\test"
.Execute
On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F, UpdateLinks:=0
'timer 5 sec
Dim t&
t& = GetTickCount
Sleep 5000 '5000 milisecondes
Sheets("rapport").PrintOut ActivePrinter:="Adobe PDF sur Ne01:", Collate:=True
'timer 5 sec
Dim t2&
t2& = GetTickCount
Sleep 5000 '5000 milisecondes

ActiveWorkbook.Close False
Next F
End With
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
168
Réponses
9
Affichages
594
Retour