Imprimer un fichier [Résolu]

Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
- - Dernière réponse : ptitemeuh
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
- 31 mai 2010 à 09:56
Bonjour à tous,

Voici mon code qui me permet d'enregistrer tout le contenu de ma listbox2 de mon userform2 dans un fichier .txt :

    Dim fso, MonFichier
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MonFichier = fso.CreateTextFile("c:\test.txt", True)
    MonFichier.WriteLine "Tri des fournisseurs par nombre de consultations dans la catégorie " & TextBox2.Text & vbCrLf
    
    For i = 1 To ListBox2.ListCount
        MonFichier.WriteLine ListBox2.List(i - 1)
    Next i
    MonFichier.Close
    Set MonFichier = Nothing
    Set fso = Nothing


Ce code s'exécute lorsque je clique sur mon bouton "Imprimer" de la userform2. Seulement, je n'arrive pas à trouver la commande pour l'imprimer dans mon code, j'ai essayé MonFichier.Print ou MonFichier.PrintOut mais cela ne marche pas.

J'ai effectué une petite recherche avec les objets de fso mais je n'ai pas trouvé d'objet qui permet d'imprimer mon fichier .txt .

Y-a-t-il une solution à mon problème ou faut-il que j'utilise word ?
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
Messages postés
5818
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 février 2019
79
3
Merci
Si vous voulez avoir les bonnes réponses il faut dire au départ que vous êtes sur Outlook, cela ferait gagner du temps à tout le monde.
Pour Outlook voici le code pour ouvrir et ensuite imprimer un fichier texte:

Public Enum actionType
  openfile
  printfile
End Enum

Public Const SW_SHOWNORMAL As Long = 1

Public Declare 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

Function ExecuteFile(fileName As String, action As actionType)
' action can be either "Openfile" or "Printfile".

Dim sAction As String

  Select Case action
    Case 0 ' openfile
     sAction = "Open"
    Case 1 ' printfile
     sAction = "Print"
  End Select

  ShellExecute 0, sAction, fileName, vbNullString, "", SW_SHOWNORMAL
End Function
Sub TestPrint()
  ' open a file
 ExecuteFile "Chemin du fichier.txt", openfile
  ' print another
 ExecuteFile "Chemin du fichier.txt", printfile
End Sub
Private Sub CommandButton1_Click()
TestPrint
End Sub


Si cela vous convient mettez réponse accepté
@+ Le Pivert

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Le Pivert
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Salut,

J'ai pas essayé mais j'ai trouvé ça sur le net.

Public Const SW_SHOWNORMAL = 1
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByValhwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


puis tu appelles:
X = ShellExecute(Me.hWnd, "Print", "C:\Test.txt", vbNullString, 0&, SW_SHOWNORMAL)


@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Salut,

J'ai ajouté ce code. Dès que j'appuie sur mon bouton, une erreur de compilation s'affiche en indiquant que "Seuls des commentaires peuvent apparaître après End Sub, End Function, ou End Property" sur la ligne suivante:

Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByValhwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Commenter la réponse de ptitemeuh
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Re,
La partie

Public Const SW_SHOWNORMAL = 1
Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByValhwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long


Doit etre mis tout en haut du module de code. et si c'est dans un formulaire remplacer les PUBLIC par de PRIVATE

@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Re,

Petite question (certainement bête que je pose quand même). J'ai une erreur de compilation "Membre de méthode ou de donnée introuvable" qui est sur hWnd du code :
X = ShellExecute(Me.hWnd, "Print", "C:\Test.txt", vbNullString, 0&, SW_SHOWNORMAL)


A quoi correspond Me.hWnd ?
Commenter la réponse de ptitemeuh
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Re,
C'est supposé être le Handle de la fenetre.

Oups... je crois me souvenir maintenant qu'il n'y a pas de Hwnd en VBA....

Bon bah je re avec une autre soluce alors.


@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
47
0
Merci
Re,
Désolé pour le double post.

Essaie de remplacer le Me.Hwnd par Application.Hwnd


@+: Ju£i€n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Salut,

En remplaçant tel que tu le dis, il m'affiche une erreur d'exécution '438' Propriété ou méthode non gérée par cet objet".

Le Handle... D'accord. J'ai essayé UserForm2.ListBox2 et il n'y a pas d'erreur sauf plus loin et toujours dans la même ligne avec "Erreur d'exécution '94': Utilisation incorrecte de Null".


Etant débutante sur VBA, je suis carrément perdue... Peux-tu encore m'aider stp ?
Commenter la réponse de ptitemeuh
Messages postés
5818
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 février 2019
79
0
Merci
Bonjour,
Il y a cette solution si l'on a le chemin du fichier texte:

Option Explicit

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare 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()
    Dim NomFichier As String
    Dim x As Long
    
    x = FindWindow("XLMAIN", Application.Caption)
    NomFichier = "Chemin du fichier.txt"
    
    ShellExecute x, "print", NomFichier, "", "", 1
End Sub

Private Sub CommandButton1_Click()
 ImprimerFichier
End Sub

Il faut s'arranger dans le code pour enregistrer d'abord le fichier texte ensuite on l'imprime
@+
Commenter la réponse de cs_Le Pivert
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Salut,

J'ai ajouté mon code après l'enregistrement de mon fichier mais j'ai une erreur sur la ligne:

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


J'obtiens : "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet"


"XLMAIN" c'est quoi exactement ? Question bête mais que je pose quand même
Commenter la réponse de ptitemeuh
Messages postés
5818
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 février 2019
79
0
Merci
Le fichier texte est-il toujours ouvert? Si oui il faut le fermer.
J'ai essayé ce code tel que avec un fichier texte, il fonctionne très bien.
@+ Le Pivert
Commenter la réponse de cs_Le Pivert
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Re,

Non je le ferme avant d'imprimer... J'ai tout supprimer mon programme pour juste avoir ce code et il me marque toujours la même erreur...

Je ne sais s'il faut en tenir compte ou non mais je développe mon code sous Outlook, du coup peut-être qu'il y a quelque d'autre à ajouter?

Et si je n'enregistre plus dans un fichier .txt mais dans un document .doc est-ce que le code sera le même ou peut-être sera-t-il plus facile ?
Commenter la réponse de ptitemeuh
Messages postés
83
Date d'inscription
jeudi 4 février 2010
Dernière intervention
8 juillet 2010
0
Merci
Salut,

Merci beaucoup de ton aide précieuse

Bonne journée
Commenter la réponse de ptitemeuh

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.