none
[VB 2008] Convertir .xls en .pdf RRS feed

  • Question

  • Bonjour,

    Je souhaiterais convertir chaque onglet d'un classeur Excel en PDF (utilisation de Acrobat Distiller et impression dans le même dossier).

     

    Dim workbook1 As Microsoft.Office.Interop.Excel.Workbook

    Dim excelapp As new Microsoft.Office.Interop.Excel.Application

    workbook1 = excelapp.Workbooks.Open("C:\ficPDF.xls")

    CType(workbook1.Sheets(1), Microsoft.Office.Interop.Excel.Worksheet).PrintOut(, , 1, False, ActivePrinter:="Acrobat Distiller sur Ne07:", PrintToFile:=True, Collate:=False, PrToFileName:="C:\ficPDF.pdf")

     

    Ceci lance l'impression mais me génère un PDF erroné.

     

    Merci de votre aide.

    lundi 26 mai 2008 13:57

Réponses

  •  

    Bonjour,

     

    Voici comment je fait et ça m'a tout l'air de plutôt bien fonctionner :

     

    Dim workbook1 As Microsoft.Office.Interop.Excel.Workbook

    Dim Chem As String = "Mon Chemin"

    Dim excelapp As New Microsoft.Office.Interop.Excel.Application

    workbook1 = excelapp.Workbooks.Open(Chem & ".xls")

    excelapp.Visible = False

    dim ongletActif as string = CType(workbook1.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet).Name

     

    excelapp.Sheets(ongletActif).PrintOut(Copies:=1, ActivePrinter:="Acrobat Distiller", Collate:=True, Preview:=False, PrintToFile:=True, PrToFileName:=Chem & ".ps")

    acr.FileToPDF(Chem & ".ps", Chem & ".pdf", "")

    Kill(Chem & ".ps")

     

    workbook1.Close(False)

    workbook1 = Nothing

    excelapp.Quit()

    excelapp = Nothing

     

     

    J'imprime juste l'onglet actif.

    Pour imprimer tous les onglets dans un nouveau PDF, faire :

     

    For Each onglet As Microsoft.Office.Interop.Excel.Worksheet In excelapp.Sheets

    Next

     

    J'ai aussi un autre code qui fonctionne avec CutePDF mais il est en VBA.

     

    Bon courage.
    jeudi 2 octobre 2008 10:52

Toutes les réponses

  • Lorsque vous le lancer directement dans Excel, es-ce que le PDF est bien créé?
    mardi 27 mai 2008 13:28
    Modérateur
  • En fait il faut imprimer d'abord en .ps puis en .pdf

     

    Pour un document Word :

    Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Private Sub convertWord()

    Dim wrd As New Microsoft.Office.Interop.Word.Application

    Dim doc As Microsoft.Office.Interop.Word.Document

     

    ' Conversion en .ps

    wrd.Visible = False

    wrd.ScreenUpdating = False

    wrd.ActivePrinter = "Acrobat Distiller"

    doc = wrd.Documents.Open(chemCompletDoc)

    doc.PrintOut(False, False, , "CheminFichierWord.ps", , , , , , , True)

    doc.Close(False)

    wrd.Quit(False)

    doc = Nothing

    wrd = Nothing

     

    ' Conversion en .pdf

    Dim acr As New ACRODISTXLib.PdfDistiller

    acr.bShowWindow = False

    acr.FileToPDF("ChemFichierWord.ps", "CheminFichierWord.pdf", "")

    acr = Nothing

    Sleep(10000)

    End Sub

     

    (Références du projet : Microsoft.Office.Interop.Word, Acrobat Distiller)

    (Imprimante installée : Acrobat Distiller)

     

    CEPENDANT :

     

    Ce code fonctionne pour convertir un fichier doc en pdf mais "plante" lors de la conversion de d'autres fichiers à la ligne acr.FileToPDF("ChemFichierWord.ps", "CheminFichierWord.pdf", ""), c'est à dire pour la conversion du .ps en .pdf.

     

    Message d'erreur : Le serveur a généré une exception. (Exception de HRESULT : 0x80010105 (RPC_E_SERVERFAULT))

     

    Ne sachant plus comment faire pur résoudre le problème, je me tourne une nouvelle fois vers vous.

     

    Merci de votre aide.

    jeudi 29 mai 2008 13:19
  • Salut,

    j'ai été confronté exactement au même problème que toi.

    J'ai trouvé une solution qui marche bien. Voilà les instructions à ajouter après ton acr.FileToPDF(xxxxx,xx....) mais avant le acr = Nothing (code C# à convertir en Vb.Net) :

    System.Threading.Thread.Sleep(3000);//pour laisser le temps de terminer le traitement
    Marshal.ReleaseComObject(acr);
    acr = null;
    System.GC.Collect();

    J'espère que cela résoudra ton problème. (l'appel au garbage collector n'est peut être pas indispensable)

    ++
    Tibo
    mercredi 13 août 2008 14:03
  •  

    J'ai aussi un problème j'ai réussi à créer le pdf par l'inprimant virtuel (j'utilise 'CutePDF')  mais je passe par la fenêtre 'Enrrgistrer sous' de l'imprimante virtuel, le truc c'est que je ne veux pas passer par là, je souhaite que tout ce fasse sans intervantion obligatoire de l'utilisateur.

     

    voici le code de ma méthode:

     

    // Objet pour les argument optionels

    object oMissing = System.Reflection.Missing.Value;

     

    // Créé une instance de Word, le rang invisible

    Word.ApplicationClass oWord = new Word.ApplicationClass();

    oWord.Visible = false;

    Word.Documents oDocs = oWord.Documents;

     

    // selectionne le document et ouvre le doc

    Object oFile = fileName;

    Word._Document oDoc = oDocs.Open(ref oFile, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing);

     

    // sélection de l'imprimante

    oWord.ActivePrinter = "CutePDF Writer";

     

    //code pour imprimer en pdf (l'imprimante par default est 'CutePDF')

    Object copie = 1;

    Object bg = true;

    oDoc.PrintOut(ref bg, ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing, ref copie,

    ref oMissing, ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing,

    ref oMissing, ref oMissing, ref oMissing);

     

    // Quitte word et nétoi les instances

    oDoc.Close(ref oMissing, ref oMissing, ref oMissing);

    System.Runtime.InteropServices.Marshal.ReleaseComObject(oDoc);

    oDoc = null;

    System.Runtime.InteropServices.Marshal.ReleaseComObject(oDocs);

    oDocs = null;

    oWord.Quit(ref oMissing, ref oMissing, ref oMissing);

    System.Runtime.InteropServices.Marshal.ReleaseComObject(oWord);

    oWord = null;

     

     

     

     

    Pour pouvoir écrir ça j'ai piqué un peu de code par si par la mais je ne trouve rien pour mon problème.

     

    Merci de m'aider un

    mercredi 1 octobre 2008 15:40
  •  

    Bonjour,

     

    Voici comment je fait et ça m'a tout l'air de plutôt bien fonctionner :

     

    Dim workbook1 As Microsoft.Office.Interop.Excel.Workbook

    Dim Chem As String = "Mon Chemin"

    Dim excelapp As New Microsoft.Office.Interop.Excel.Application

    workbook1 = excelapp.Workbooks.Open(Chem & ".xls")

    excelapp.Visible = False

    dim ongletActif as string = CType(workbook1.ActiveSheet, Microsoft.Office.Interop.Excel.Worksheet).Name

     

    excelapp.Sheets(ongletActif).PrintOut(Copies:=1, ActivePrinter:="Acrobat Distiller", Collate:=True, Preview:=False, PrintToFile:=True, PrToFileName:=Chem & ".ps")

    acr.FileToPDF(Chem & ".ps", Chem & ".pdf", "")

    Kill(Chem & ".ps")

     

    workbook1.Close(False)

    workbook1 = Nothing

    excelapp.Quit()

    excelapp = Nothing

     

     

    J'imprime juste l'onglet actif.

    Pour imprimer tous les onglets dans un nouveau PDF, faire :

     

    For Each onglet As Microsoft.Office.Interop.Excel.Worksheet In excelapp.Sheets

    Next

     

    J'ai aussi un autre code qui fonctionne avec CutePDF mais il est en VBA.

     

    Bon courage.
    jeudi 2 octobre 2008 10:52
  • Bonjour,

    Pour utiliser cutePdf writer dans le code vb d'un programme, quelle declaration ou dll faut-il liée au projet ?
    Par avance merci,
    dimanche 8 novembre 2009 18:11
  •  

    J'ai aussi un autre code qui fonctionne avec CutePDF mais il est en VBA.

    Bonjour,

    Serait il possible d'avoir ce code en VBA ?

    Merci d'avance.

    Julien
    jeudi 17 décembre 2009 12:45
  • pour la conversion des fichiers office en PDF, il ya aussi de nombreux outils gratuits: Gratuit convertisseur PDF

    Mais si vous voulez une meilleure sortie des fichiers PDF, je pense que le bureau du programme Convertisseur PDF vers office peut vous aider à mieux.

    Il est un utilitaire rapide qui vous permet de convertir par lots des documents Microsoft en fichier PDF de qualité professionnelle.

     

    Je les ai appliquées sur l'OS de Windows

    mercredi 30 mars 2011 02:22