Comment imprimer tous les onglets Excel avec New Process ?

ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 21 oct. 2011 à 20:52
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 24 oct. 2011 à 08:37
Bonjour,

Ma question : Avec New Process j'ai fait une routine d'impression qui marche bien, seulement quand il s'agit d'Excel (fichier xls), ben il ne m'imprime qu'un onglet alors qu'il y en a plusieurs, donc comment imprimer tous les onglets ?

Voici mon code :

Option Explicit On
Public Class Form1
  Dim pathFile As String
  Dim extension As String

  Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim ou As Integer
    OpenFileDialog1.Title = "Choisir le fichier à imprimer"
    OpenFileDialog1.Multiselect = False
    If OpenFileDialog1.ShowDialog = DialogResult.OK Then
      OpenFileDialog1.Dispose()
      pathFile = OpenFileDialog1.FileName
      ou = InStrRev(pathFile, ".", Len(pathFile), 1)
      extension = Trim(Mid(pathFile, ou + 1, 4))
    End If
  End Sub

  Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    Dim Prt_Proc As New Process ' imprimer
    Dim Printer_Name As String = ""
    Try
      Prt_Proc.StartInfo.FileName = pathFile
      Select Case extension
        Case "xls"
          Prt_Proc.StartInfo.Verb = "PrintTo" ' N'IMPRIME PAS TOUS LES ONGLETS !!!
        Case "doc", "docx", "Htm", "html"
          Prt_Proc.StartInfo.Verb = "PrintTo"
        Case "txt"
          Prt_Proc.StartInfo.Verb = "Print"
      End Select
      Prt_Proc.StartInfo.CreateNoWindow = True
      Prt_Proc.StartInfo.Arguments = """" & Printer_Name & """"
      Prt_Proc.StartInfo.UseShellExecute = True
      Prt_Proc.Start()
      Prt_Proc.WaitForExit()
      Prt_Proc.Dispose()
    Catch ex As Exception
      Prt_Proc.Dispose()
      MsgBox("Fichier invalide à l'impression" & vbLf & vbLf & pathFile, vbExclamation)
    End Try
  End Sub

End Class


Merci, cordialement.

Joe.

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 oct. 2011 à 20:57
Bonsoir, EhJoe,

par pur instinct personnel (et rien d'autre que cet instinct-là), je donnerais la préférence à un pilotage, plutôt qu'à cette méthode.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
21 oct. 2011 à 21:17
Bonjour ucfoutu,

Cette mthode tourne très bien, elle est basé sur la recherche du VERB (VERBS), mais comme il n'y a que 5 à 10 fichier à l'extension différente qu'on imprime, j'ai enlevé la routine de recherche du VERB (qui ne sésoud pas les onglets) !

As-tu une solution dans mon code pour les onglets ?

Sinon, c'est quoi ta méthode de "pilotage", puis-je avoir un code équivalent au mien qui tourne ?

Merci, cordialement.

Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 oct. 2011 à 08:03
Tu as ici un exemple de pilotage :
http://www.vbfrance.com/codes/CODE-PERMETTANT-MANIPULER-OBJETS-EXCEL-NET_38534.aspx
dans cet exemple : il est montré comment imprimer une feuille
Pour connaître toutes les feuilles : une boucle sur la collection appxls.ActiveWorkbook.Worksheets ===>> extraction feuille par feuille ===>> impression feuille par feuille.

Remarque bien la terminologie, à ce propos : feuille et non "onglet" (un onglet n'est pas la feuille, mais ce qui permet de l'ouvrir ! et je ne vois pas trop à quoi cela pourrait servir d'imprimer un "ongle"t)


Tu as également quelques discussions à ce sujet, dont celle-ci
http://www.vbfrance.com/forum/sujet-COMMENT-IMPRIMER-FICHIERS-EXCEL-SOUS-VB-NET_790257.aspx

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
22 oct. 2011 à 09:41
Bonjour,

Je ne m'y connais pas assez en vbA et excel pour faire ça, sais-tu le faire ? Juste la routine pour que je puisse l'utiliser, en l'expèce, ici :


[b]dim nbXls as integer = 0
dim pathXls() as string
dim n as integer=0
if extension = "xls" then
for hech pathFile.feuille?
nbXls = nbXls + 1
next ' calcul le nombre
redim pathXls(nbXls) ' redéfinit
n = 0
for hech pathFile.feuille?
pathXls(n) = chemin+classeur+feuille
n = n + 1
next ' charge
if nbXls = 1 then ' imp
imprime = pathFile
endif ' normal
if nbXls > 1 then ' imp
for n = 1 to nbXls
imprime = pathXls(n)
next n ' en boucle
endif
end if/b

Merci, cordialement.

Joe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
22 oct. 2011 à 10:29
1) Je connais par VB.Net et ne puis donc te répondre avec certitude, mais l'examen de ces deux lignes du 1er lien que je t'ai demandé de lire :

appxls.ActiveWorkbook.Worksheets("NouveauNom").Activate()
appxls.ActiveWindow.SelectedSheets.PrintOut()

m'incline fortement à penser que
appxls.ActiveWorkbook.Worksheets

représente la collection des feuilles de ton classeur.
C'est cette collection, qu'il te faut parcourir, genre :
For each toto in appxls.ActiveWorkbook.Worksheets
  toto.Activate()
  appxls.ActiveWindow.SelectedSheets.PrintOut() 
next

Si ce n'est pas EZXACTEMENT cela, ce devrait en être TRES proche.

2) je me demande par ailleurs si ceci ne pourrait pas être tenté également, à partir de l'objet :
appxls.ActiveWorkbook

défini plus haut dans le lien ===>>
appxls.ActiveWorkbook.PrintOut

Mais toi qui as VB.Net ===>> cela ne devrait pas manger de pain, d'essayer.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
22 oct. 2011 à 10:35
Bonjour ucfoutu,

Ah, réponse exploitable, je vais étudier ça, à bientôt, merci.

Cordialement

Joe.
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
23 oct. 2011 à 12:36
Bonjour,

Suite :
Il n'accepte pas ton code :

For each toto in appxls.ActiveWorkbook.Worksheets
listebox1.items.add(toto)
next toto

Car
appxls
c'est je pésume l'application, qui pour moi est :
Dim pathFile As String = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"
Donc
pathFile

Mais il n'accepte pas :

For each toto in pathFile.ActiveWorkbook.Worksheets

"activeWorkBook : n'est pas un membre de string, soulignant (pathFile.ActiveWorksBook)

???

Cordialement.

Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 oct. 2011 à 16:53
toto edst in objet ('une feuille de la collection appxls.ActiveWorkbook.Worksheets.
Je ne vois pas comment tu pourrais (ni pourquoi tu voudrais) mettre une feuille dans une listbox !
Je ne vois pas ce que cela pourrait avoir comme relation avec le sujet (l'impression)

Je ne comprends pas non plus :
Il n'accepte pas ton code :

For each toto in appxls.ActiveWorkbook.Worksheets
listebox1.items.add(toto)
next toto

puisque je n'ai jamais écrit cela
quant à :

Car
appxls
c'est je pésume l'application, qui pour moi est :
Dim pathFile As String = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"
Donc
pathFile ...

Non !
dans le lien que je t'ai invité à lire :
applxls est Excel
appxls.ActiveWorkbook est le classeur actif
appxls.ActiveWorkbook.Worksheets est la collection des feuilles (les feuilles, pas leur nom !) du classeur actif
Et je n'imagine même pas comment tu peux écrire :
For each toto in pathFile.ActiveWorkbook.Worksheets
!
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
23 oct. 2011 à 17:12
Bonjour,

Je te remercie de ta participation mais là on tourne, on tourne sans que j'aie jamais de code exploitable, alors disons que le sujet est clos, mais je ne peux pas dire résolu, je vais voir du côté du VBA.

Pour répondre, si tu n'as pas écrit ce code, tu as du alors le recopier, ce qui t'en rend pareillment l'auteur par adoption, peut importe...

Je voudrais mettre l'adresse en liste pour pouvoir ensuite l'exploiter à l'impression, mais comme je n'y connais rien je dis peut être des bêtises, voici mon raisonnement :
Si le fichier est à
c:\zero.xls
Qu'il a 3 onglets (feuilles)
un
deux
trois
J'imaginais que les adresse seraient :
c:\zero.xls.un
c:\zero.xls.deux
c:\zero.xls.trois
Ou autre orthographe, c'est pourquoi je présumais qu'on pouvait stocker l'adresse du fichier avec son chemin et un de ses onglets, ce qui explique ma liste, mais si je dis n'importe quoi c'est face à ma méconnaissance de la chose.

Tu n'imagines même pas comment je peux écrire une syntaxe fausse, ben c'est tout simplement que je ne connais pas, c'est comme moi, je n'imagine pas qu'on puisse répondre sans rien connaître de la réponse, et pourtant tu le fais :o)

Cordialement.

Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 oct. 2011 à 18:57
Ecoute, EZhJoe :
Une autre fois, je ne connais absolument pas VB.Net

Voilà, selon moi et après avoir relu le code du lien que je t'ai invité à lire, )à quoi devrait ressembler ton truc pour imprimer toutes les feuilles d'un classeur. Je dis bien "ressembler" car il y a peut-être des inexactitudes, voire des redondances évitables. Mais tu devrais être à même de les corriger toi-même (c'est ton langage, VB.Net, pas le mien !). Sinon, attends que passe par là un VB.Nettiste qui corrigera là où conviendait de le faire :
Dim appxls As Microsoft.Office.Interop.Excel.Application
Dim feuille As Microsoft.Office.Interop.Excel.Workbook
Dim pathFile As String = "C:\Users\joe\Documents\ECRITS\EXCEL\Stat_JOE.xls"
appxls = New Microsoft.Office.Interop.Excel.Application
appxls.Visible = True
appxls.Workbooks.Open (pathFile)
For Each feuille In appxls.ActiveWorkbook.Worksheets
  feuille.Activate
  appxls.ActiveWindow.SelectedSheets.PrintOut()
Next


Si tu veux ajouter les noms de feuilles dans une listbox (je ne vois pas pourquoi, mais ..) ==>> de devrait ressembler à ceci, selon ce que je pense, en VB.Net
For each toto in appxls.ActiveWorkbook.Worksheets
  listebox1.items.add(toto.name)
next toto 


Voilà et je ne peux aller plus loin dans mon aide, ne connaissant pas VB.Net





____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
23 oct. 2011 à 19:44
Merci cher ami,

Je vais voir su VBnet de MS, en fait le code refuse a peu près tout car il doit lui manquer des classe ou autre vilaines choses ) déclarer.

Au plaisir, cordialement.

Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 oct. 2011 à 19:52
[b]en ...
Enlève alors vite les tag "réponse acceptée", s'il te plait !
Car avec ces tags-là, tu te prives de voir un salutaire VB.nettiste intervenir comme souhaité

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 oct. 2011 à 20:02
Je suis toutefois assez inquiet de lire :
en fait le code refuse a peu près tout car il doit lui manquer des classe ou autre vilaines choses

Question : as-tu ajouté (probablement nécessaire) la référence Excel à ton projet ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
23 oct. 2011 à 20:06
Mais non je ne l'ai pas rajouté la référence à excel, je n'y connais rien, je ne sais pas ce qu'il faut rajouter ou, quelle classe...

Joe.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
24 oct. 2011 à 08:37
L'ajout d'une référence se fait dans l'IDE !
Tapez le texte de l'url ici.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous