IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

convertir une page web en pdf


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut convertir une page web en pdf
    Bonjour,

    j'ai a peu près 5000 pages web à convertir en pdf, j'aimerais donc automatiser la tâche ...
    J'ai un tableau excel avec 1 colonne contenant l'url de la page et 1 colonne avec le nom que je veux donner au pdf créé.

    Quelqu'un a-t-il une idée de la procédure pour réaliser une telle conversion ?

    merci d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Développeur VBA/C#/VB.Net/Power Platform
    Inscrit en
    Juillet 2007
    Messages
    14 595
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur VBA/C#/VB.Net/Power Platform
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 595
    Points : 34 274
    Points
    34 274
    Par défaut
    Salut,

    c'est faisable oui. As-tu par exemple PDF Creator pour faire tes PDF ?

    Un exemple de code que tu pourras adapter au besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    'A function that uses IE to print the contents of Google.com to a PDF document
    Sub printgoogle()
        Dim Explorer As Object
        Dim eQuery As Long 'return value type for QueryStatusWB
        Dim i As Integer
        Dim fTime As Single
     
        'See function below, to set the default printer to PDFCreator.  Note:  The user would probably be grateful if you checked to see what is the current default printer and set it back when finished printing
        SetDefaultPrinter "PDFCreator"
     
        'Connect to Internet Explorer
        Set Explorer = CreateObject("InternetExplorer.Application")
        'Open some document.  This is usually a file on your computer, but I use Google here for test purposes
        Explorer.Navigate "www.google.com"
     
    TryAgain:
            'Wait for 2 seconds to let IE load the document
            fTime = Timer
            Do While fTime > Timer - 2
                DoEvents
            Loop
            eQuery = Explorer.QueryStatusWB(6)  'get print command status
            If eQuery And 2 Then
                Explorer.ExecWB 6, 2, "", ""   'Ok to Print? Then execute the Print (6) command, without displaying the print dialog (2)
                'Wait for 2 seconds while IE prints
                fTime = Timer
                Do While fTime > Timer - 2
                    DoEvents
                Loop
            Else
                GoTo TryAgain
            End If
     
    End Sub
     
    'This function sets the Windows default printer to whatever printer you insert as parameter
    Public Sub SetDefaultPrinter(ByVal printerName As String)
        Dim oSH As Object 'WshNetwork
        Set oSH = CreateObject("Wscript.Network") 'New WshNetwork
        oSH.SetDefaultPrinter printerName
        Set oSH = Nothing
    End Sub
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Merci pour le bout de code,

    En effet, j'ai oublié de précisé que j'avais pdfcreator a ma disposition.

    étant encore novice en vba, je ne comprend pas à quel moment se fait l'impression. J'aimerais pouvoir aussi spécifier le nom du pdf créé.

    comment puis je faire celà ?

  4. #4
    Invité
    Invité(e)
    Par défaut Bonjour,
    j'ai fais ce genre de truc pour un client, il faudra adapté à ton code ou prendre ce qui t’intéresse.
    Fichiers attachés Fichiers attachés

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Je ne comprend pas le fonctionnement de ta macro ... Une fenetre s'ouvre, me demande de cliquer sur start, mais le dis bouton start est porté disparu !

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Il est dans le bas du formulaire.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par talkk Voir le message
    Je ne comprend pas le fonctionnement de ta macro ... Une fenetre s'ouvre, me demande de cliquer sur start, mais le dis bouton start est porté disparu !
    Ici il n'est pas question de te proposer une application qui exécute ce que tu demande mais de pouvoir te permettre de trouver les méthodes nécessaire à la réalisation ton code.

    je l'ai développé pour un client qui avait la même problématique. donc c'est un code proche de ce que tu recherche.
    Dernière modification par Invité ; 01/09/2013 à 20h56.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Bonjour à tous les deux,

    j'ai regardé en détail les codes que vous m'avez donné. Au final, je pense que tous ce dont j'ai besoin est là : comment imprimer une page sous IE a partir de VBA, définir les options d'impression de pdfcreator.
    Seulement, je ne sais pas comment associer les deux ..

    Comment puis-je insérer, et à quel moment, les options d'impressions de pdfcreator dans le code fournit par jpchek ?

    ( j’entends par options d'impressions : le chemin et le nom du fichier de sorti )

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    L'impression se lance grâce au code de jpcheck, mais les modifications des options ne se fait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    'A function that uses IE to print the contents of Google.com to a PDF document
    Sub conv_to_pdf()
        Dim Explorer As Object
        Dim eQuery As Long 'return value type for QueryStatusWB
        Dim i As Integer
        Dim fTime As Single
        Dim NomDir As String
        Dim NomFichier As String
        Dim PDFCreator1 As PDFCreator.clsPDFCreator
        Set PDFCreator1 = New clsPDFCreator
        Dim opt As clsPDFCreatorOptions '/ classe de paramétrage
     
        'See function below, to set the default printer to PDFCreator.  Note:  The user would probably be grateful if you checked to see what is the current default printer and set it back when finished printing
        SetDefaultPrinter "PDFCreator"
     
        NomDir = "C:\Documents and Settings\lcristante\Desktop\test\"
        NomFichier = "test1"
        With PDFCreator1
            '/ Répertoire de sortie
            .cOption("AutosaveDirectory") = NomDir
            '/ Fichier de sortie
            .cOption("AutosaveFilename") = NomFichier
            .cOption("UseAutosave") = 1
            .cOption("UseAutosaveDirectory") = 1
            '/ format de sortie (0 = PDF)
            .cOption("AutosaveFormat") = 0
        End With
        '
        '/ on affecte ensuite les nouvelles options au composant principal clsPDFCreator
        'Set PDFCreator1.cOptions = opt
     
        'Connect to Internet Explorer
        Set Explorer = CreateObject("InternetExplorer.Application")
        'Open some document.  This is usually a file on your computer, but I use Google here for test purposes
        Explorer.navigate "www.google.com"
     
    TryAgain:
            'Wait for 2 seconds to let IE load the document
            fTime = Timer
            Do While fTime > Timer - 2
                DoEvents
            Loop
            eQuery = Explorer.QueryStatusWB(6)  'get print command status
            If eQuery And 2 Then
                Explorer.ExecWB 6, 2, "", ""   'Ok to Print? Then execute the Print (6) command, without displaying the print dialog (2)
                'Wait for 2 seconds while IE prints
                fTime = Timer
                Do While fTime > Timer - 2
                    DoEvents
                Loop
            Else
                GoTo TryAgain
            End If
     
    End Sub
     
    'This function sets the Windows default printer to whatever printer you insert as parameter
    Public Sub SetDefaultPrinter(ByVal printerName As String)
        Dim oSH As Object 'WshNetwork
        Set oSH = CreateObject("Wscript.Network") 'New WshNetwork
        oSH.SetDefaultPrinter printerName
        Set oSH = Nothing
    End Sub
    Le nom du fichier output proposé est l'adresse google.com ...
    D'ailleurs, par la suite, j'aimerais que la pop up qu'ouvre PDFcréator ne s'affiche plus, si vous avez des idées sur la chose ...

    d'avance merci

  10. #10
    Invité
    Invité(e)
    Par défaut Bonjour,
    le programme est architecturé autour du contrôle WebBrowser dans un formulaire mais ça marche avec IE:

    je plante le décor:

    lorsque je click sur start, le programme me propose d'ouvrir un fichier Excel contenant les liens internet ainsi que le nom du PDF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FEX = BrowseForFile(Range("PATH"), "Excel File (*.xls);*.xls", "Open Workbook")
    de charger WebBrowser avec l'URL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.WebBrowser1.Navigate MyRange(L, 1).Value
    SavePdf = MyRange(L, 3) & ".pdf"
    d'attendre le chargement complet de la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until Me.WebBrowser1.busy = False
    de sélectionner et copier dans le presse papier la totalité de page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WebBrowser1.ExecWB OLECMDID_SELECTALL, OLECMDEXECOPT_DODEFAULT
    WebBrowser1.ExecWB OLECMDID_COPY, OLECMDEXECOPT_DODEFAULT
    de créer un nouveau document Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim ObjWord As Object
    Set ObjWord = CreateObject("Word.Application")
    ObjWord.Visible = False
    Set Doc = ObjWord.Documents.Add
    de coller le presse papier dans Word
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjWord.Selection.PasteAndFormat wdFormatOriginalFormatting
    après un traitement de mise en page (et éventuellement dans ton cas de suppression de valeures) dans Word, je sauvegarde le doc et je l'imprime en pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PdfCr PathSavePdf, SavePdf, ObjWord.ActiveDocument
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub PdfCr(NomDir As String, NomFichier As String, Doc As Object)
    Dim clExp As ExportPDF
    Supprimer_Fichier_RD NomDir & NomFichier
     Supprimer_Fichier_RD NomDir & Replace(NomFichier, ".pdf", ".doc")
     Doc.SaveAs NomDir & Replace(NomFichier, ".pdf", ".doc")
     
        '
        Set clExp = New ExportPDF
        '
        clExp.NomDir = NomDir
        clExp.NomFichier = NomFichier
        clExp.ChemDocComplet = NomDir & Replace(NomFichier, ".pdf", ".doc")
        '
        clExp.ConversionPDF
        '
        Set clExp = Nothing
     
    End Sub
    pour ce faire, j'utilise une classe fourni par bibi (modérateur sur ce forum).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Set clExp = New ExportPDF
        '
        clExp.NomDir = NomDir
        clExp.NomFichier = NomFichier
        clExp.ChemDocComplet = NomDir & Replace(NomFichier, ".pdf", ".doc")
        '
        clExp.ConversionPDF
        '
        Set clExp = Nothing
    Dernière modification par Invité ; 02/09/2013 à 11h14.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Merci pour l'explication du code !
    Cependant, après avoir essayé manuellement la procédure pour voir le résultat, la page web perd toute sa mise en forme ce qui demanderait un énorme temps de remise en page ...

    N'y aurait-il pas un moyen d'imprimer directement via IE la page web en configurant PDFCreator pour qu'il mette automatiquement le fichier a un endroit précis et en le renommant?

    J'ai aussi essayé d'enregistrer la page en local, mais je n'arrive pas à automatiquement mettre en place le nom et le chemin d'enregistrement, sans passé par une boite de dialogue windows...

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Public Sub page_internet()
    Dim adresse$, Chem$, Fic$
    Dim IE
    Set IE = CreateObject("InternetExplorer.Application")
    IE.Visible = True
    'IE.Silent = True
    adresse = 'mon url
     
    Chem = "C:\Documents and Settings\lcristante\Desktop\test\"
    Fic = "test001.mht"
    IE.navigate adresse
    Do While IE.readyState <> 4
            DoEvents
        Loop ' jusqu'ici OK IE charge bien la page
     
    IE.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DONTPROMPTUSER, Fic, Chem 
    'IE.ExecWB OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT, Fic, Chem 
     
    'IE.Quit
    Set IE = Nothing
    End Sub
    J'ai repris un autre code, qui doit directement convertir la page en pdf et je l'ai modifié afin qu'il corresponde à mon besoin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     Sub ImprimePDF()
        Dim PDFCreator1 As PDFCreator.clsPDFCreator
        Dim pErr As clsPDFCreatorError, opt As clsPDFCreatorOptions
        Dim noStart As Boolean, fac As Double, StartTime As Date
        Dim sRep, sNomFic As String
        Dim i As Integer
        Dim URL As String
        URL = "https://www.google.fr/"
    sRep = "C:\Documents and Settings\lcristante\Desktop\test\"
    sNomFic = "test001"
    Set opt = PDFCreator1.cOptions
        With opt
            .AutosaveDirectory = sRep
            .AutosaveFilename = sNomFic
            .UseAutosave = 1
            .UseAutosaveDirectory = 1
            .AutosaveFormat = 0 ' PDF
        End With
        With PDFCreator1
            Set .cOptions = opt
            .cClearCache
            .cDefaultPrinter = "PDFCreator"
            .cPrintURL (URL)
            .cPrinterStop = False
        End With
     
        PDFCreator1.cPrinterStop = False
        StartTime = Now
    End Sub
    J'ai une erreur 91 à la ligne "Set opt = PDFCreator1.cOptions"
    Une idée de comment la corrigée ?

  12. #12
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour, tu ne devrais pas créer d'abord une nouvelle instance de PDFCreator?

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim PDFCreator1 As New PDFCreator.clsPDFCreator
    Alleï Bonjour chez vous!

  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    yes bien vue !
    La macro se lance, mais l'enregistrement de la page ne se fait pas ...

  14. #14
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Déjà il faut que tu instances IE que tu ailles sur le site, et que tu lances l'impression


  15. #15
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Il me semblait que la commande cPrintUrl remplissait ce rôle ...
    y a-t-il un moyen grâce à ta commande EngueEngue d'automatiquement remplir le nom et le path du fichier qui va etre enregistrer ?

    Edit : comme prévu, l'impression se lance avec PDFCreator, mais je dois modifier le titre du fichier créé, alors que j'ai au préalable indiqué un titre et un chemin dans les opts de PDFCreator ...

Discussions similaires

  1. Convertir une page Web en PDF
    Par moudjahidine dans le forum Général Conception Web
    Réponses: 1
    Dernier message: 01/12/2013, 23h15
  2. Comment convertir une page Web en PDF avec HTMLDOC
    Par Monta^^ dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/02/2012, 17h28
  3. Réponses: 4
    Dernier message: 05/02/2008, 22h55
  4. Réponses: 7
    Dernier message: 25/09/2006, 20h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo