VBA - Imprimer plusieurs fichiers non ouverts

Résolu/Fermé
howiz Messages postés 20 Date d'inscription mercredi 1 avril 2015 Statut Membre Dernière intervention 21 août 2015 - 21 août 2015 à 08:21
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 août 2015 à 12:16
Bonjour,

Je souhaite, à l'action d'un bouton, imprimer plusieurs fichiers (pdf et word).
J'ai utilisé le code suivant :


Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Sub ImprimerFichier(NomFichier)
'Dim NomFichier As String
Dim x As Long

x = FindWindow("XLMAIN", Application.Caption)

ShellExecute x, "print", NomFichier, "", "", 1
End Sub


Puis j'ai mis en place mon itération sur le bouton imprimer, exemple :

Private Sub BoutonImprimer_Click()

'dechets
If Sheets("PdP 3 sur 4").Range("O31") = "X" Then
NomFichier = "F:\x\fichier1.doc"
ImprimerFichier (NomFichier)
End If

'pret matériel
If Sheets("PdP 3 sur 4").Range("O33") = "X" Then
NomFichier = "F:\x\fichier2.pdf"
ImprimerFichier (NomFichier)
End If

'produits chimiques
If Sheets("PdP 3 sur 4").Range("O35") = "X" Then
NomFichier = "F:\x\fichier3.doc"
ImprimerFichier (NomFichier)
End If

End Sub


Dans ce cas précis les deux premiers fichiers s'impriment mais le 3ème non! Comme si on en avait pas pu envoyer un deuxième document sur Word pour l'imprimer. J'ai le même problème lorsque je souhaite imprimer deux fichiers PDF.

Avez vous une idée pourquoi ?

Merci d'avance pour votre aide.

Cordialement.

Howard

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
21 août 2015 à 11:31
Bonjour,

deux possibilités me viennent à l'esprit.
1- la cellule Sheets("PdP 3 sur 4").Range("O35") ne contient pas un "X",
2- la "bascule" entre logiciels (word et ton reader pdf) se fait mal.
Si c'est le cas, ajouter un DoEvents entre chaque impression peut aider.
Private Sub BoutonImprimer_Click()
'dechets
If Sheets("PdP 3 sur 4").Range("O31") = "X" Then
    NomFichier = "F:\x\fichier1.doc"
    ImprimerFichier (NomFichier)
End If
DoEvents
'pret matériel
If Sheets("PdP 3 sur 4").Range("O33") = "X" Then
    NomFichier = "F:\x\fichier2.pdf"
    ImprimerFichier (NomFichier)
End If
DoEvents
'produits chimiques
If Sheets("PdP 3 sur 4").Range("O35") = "X" Then
    NomFichier = "F:\x\fichier3.doc"
    ImprimerFichier (NomFichier)
End If
DoEvents
End Sub

0
Merci pour ta réponse, ce n'est pas au niveau du "X" que cela coince. Je vais tester avec le DoEvents et je reviens vers vous sous peu :)
0
Ca fonctionne !!!!! merci :)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > howiz
21 août 2015 à 12:16
En fait, DoEvents rends la main au système d'exploitation pour qu'il puisse traiter les messages en attente.
ça peut être utile de temps en temps, dont ton cas fait apparemment partie.
De rien.
A++
0