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 :

Enregistrement PDF avec pour nom de fichier le contenu d'une cellule. [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Enregistrement PDF avec pour nom de fichier le contenu d'une cellule.
    Bonjour à tous,

    J'ai écrit un code qui me permet d'envoyer par mail une plage de cellule et j'aimerais enregistrer le fichier au format PDF après envoi.

    voici un extrait de ce que j'ai écrit pour l'enregistrement PDF :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim fichier As String
    fichier = "D:\Data\test\" & [B5].Value & ".PDF"
    Worksheets("Check-List VERIF FMI").Range("A1:F50").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=fichier, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        ignorePrintAreas:=False, _
        OpenAfterPublish:=False
    Lorsque j'exécute la macro, excel me renvois une erreur :

    Erreur d'éxécution -2147024773(8007007B')
    Document non enregistré

    Et, effectivement, le document n'est pas enregistré.

    Quelqu'un saurait-il comment résoudre ce problème ?

    J'avais pour commencé écrit le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Worksheets("Check-List VERIF FMI").Range("A1:F50").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:="D:\Data\test\Nom.PDF", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        ignorePrintAreas:=False, _
        OpenAfterPublish:=False
    Il fonctionnait mais le fichier s'appelait toujours "Nom" et donc il m'écrasait toujours le fichier enregistré précédemment...

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Et il y a bien un nom de fichier valide en B5 de la feuille active au moment où tu lances la procédure ?
    Par exemple, ça ne marchera pas si la cellule est vide.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par ZebreLoup Voir le message
    Et il y a bien un nom de fichier valide en B5
    Effectivement, le contenu de B5 n'était pas valide pour un enregistrement... Nez dans le guidon je n'ai pas pensé à regarder du côté du contenu de la cellule.

    Merci beaucoup !

    Voici l'ensemble du code qui pourra peut être servir à quelqu'un plus tard :

    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
    Sub Mail_Cliquer()
     
        Dim rng As Range
        Dim OutApp As Object
        Dim OutMail As Object
        Dim fichier As String
     
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
     
        Set rng = Nothing
        On Error Resume Next
        Set rng = Sheets("Check-List VERIF FMI").Range("A1:F50").SpecialCells(xlCellTypeVisible)
        On Error GoTo 0
     
     
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
     
        On Error Resume Next
        With OutMail
            .To = "A COMPLETER" 'on peut insérer une adresse ici si le destinataire est toujours le même
            .CC = ""
            .BCC = ""
            .Subject = Range("B5").Text 'idem pour l'objet
            .HTMLBody = RangetoHTML(rng)
            .Display   'or use .Send
        End With
        On Error GoTo 0
     
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
     
        Set OutMail = Nothing
        Set OutApp = Nothing
     
    'enregistrement PDF du fichier.
    fichier = "D:\Data\test\" & [B5].Value & ".PDF"
    Worksheets("Check-List VERIF FMI").Range("A1:F50").ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=fichier, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        ignorePrintAreas:=False, _
        OpenAfterPublish:=False
     
    End Sub
    La fonction qu'il ne faut pas oublier de coller dans le module aussi :

    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
    Function RangetoHTML(rng As Range)
    ' Working in Office 2000-2010
        Dim fso As Object
        Dim ts As Object
        Dim TempFile As String
        Dim TempWB As Workbook
     
        TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
     
        'Copy the range and create a new workbook to past the data in
        rng.Copy
        Set TempWB = Workbooks.Add(1)
        With TempWB.Sheets(1)
            .Cells(1).PasteSpecial Paste:=8
            .Cells(1).PasteSpecial xlPasteValues, , False, False
            .Cells(1).PasteSpecial xlPasteFormats, , False, False
            .Cells(1).Select
            Application.CutCopyMode = False
            On Error Resume Next
            .DrawingObjects.Visible = True
            .DrawingObjects.Delete
            On Error GoTo 0
        End With
     
        'Publish the sheet to a htm file
        With TempWB.PublishObjects.Add( _
             SourceType:=xlSourceRange, _
             Filename:=TempFile, _
             Sheet:=TempWB.Sheets(1).Name, _
             Source:=TempWB.Sheets(1).UsedRange.Address, _
             HtmlType:=xlHtmlStatic)
            .Publish (True)
        End With
     
        'Read all data from the htm file into RangetoHTML
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
        RangetoHTML = ts.readall
        ts.Close
        RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                              "align=left x:publishsource=")
     
        'Close TempWB
        TempWB.Close savechanges:=False
     
        'Delete the htm file we used in this function
        Kill TempFile
     
        Set ts = Nothing
        Set fso = Nothing
        Set TempWB = Nothing
    End Function
    A+,

    Julien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Load data avec une variable pour nom de fichier
    Par kelk1 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 14/01/2016, 15h41
  2. Réponses: 3
    Dernier message: 09/07/2015, 10h54
  3. "enregistrer.sous" avec un nom de fichier récupéré dans une variable
    Par mauriceguillier dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/10/2010, 15h49
  4. Créer une liste avec des noms de fichiers
    Par Jeffboj dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 06h48
  5. probleme avec un nom de fichier
    Par Ludo75 dans le forum C
    Réponses: 7
    Dernier message: 08/12/2005, 20h55

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