Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/01/2012, 11h16   #1
 
Homme Julien
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : -1
Points : -1
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 :
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 :
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...
Julzz est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 02/01/2012, 11h29   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
« Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 02/01/2012, 11h46   #3
 
Homme Julien
Inscription : juillet 2011
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juillet 2011
Messages : 6
Points : -1
Points : -1
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 :
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 :
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
Julzz est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h35.


 
 
 
 
Partenaires

Hébergement Web