begin process at 2013 05 23 14:27:45
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Exporter un graphique en pdf en conservant la mise en forme


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Exporter un graphique en pdf en conservant la mise en forme

vendredi 6 juillet 2012 à 09:41:46 | Exporter un graphique en pdf en conservant la mise en forme

alpking

Bonjour,

J'essaie de créer une macro VBA qui exporte un graphique Excel en pdf. La spécificité de ma macro est que le pdf créé doit conserver la même taille que le graphique, donc sans marge. Pour y arriver, je copie le graphique dans Powerpoint, je redimensionne la présentation à la taille du graphique puis ensuite j'exporte depuis Powerpoint en pdf.

Le code que j'ai développé fonctionne presque, mais il ne conserve pas certains attributs de mise en forme. Par exemple, les étiquette que j'ai orienté en verticales sont remises à l’horizontale lors de l'exportation.

Quelqu'un saurait-il comment corriger cela et exporter en conservant toute la mise en forme ?

Merci d'avance de votre aide !

[CODE]
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Sub SaveAsPDF()

Dim objApp As Object
Dim lngResult As Long
Dim output As String

'Get paths for the output-file
output = Application.GetSaveAsFilename("Graph.pdf", "PDF files (*.pdf), *.pdf")
If output = "False" Then
Exit Sub
End If

'Check if file if locked
FileLocked:
If IsFileLocked(output) = True Then
answer = MsgBox("Unable to write to the specified file. File is use by another process." & Chr(13) & "Please close the application in question and try again.", vbExclamation + vbRetryCancel, "Permission denied")
If answer = vbRetry Then GoTo FileLocked
Exit Sub
End If

If ActiveChart Is Nothing Then
RangeSel = ActiveWindow.Selection.Address
A = Range(RangeSel).Height
B = Range(RangeSel).Width
Selection.Copy
c = 0
Else
'Read the geometry of graph
A = ActiveChart.Parent.Height
B = ActiveChart.Parent.Width
'copy chart into clipboard
ActiveChart.ChartArea.Select
Selection.Copy
c = 1
End If

'Is PowerPoint Running?
On Error Resume Next
Set objApp = GetObject(, "PowerPoint.Application")
If Not objApp Is Nothing Then
answer = MsgBox("PowerPoint is currently running and will be forcefully closed." & Chr(13) & "Any unsaved progress for the open presentation will be lost." & Chr(13) & Chr(13) & "Do you want to proceed?", vbYesNo + vbQuestion)
If answer = vbNo Then
Exit Sub
End If
objApp.Quit
End If
On Error GoTo 0

'start PowerPoint
Set objApp = CreateObject("Powerpoint.Application")
With objApp
.Presentations.Add
.ActivePresentation.ApplyTemplate Filename:="J:\Modèles\System\Export.potx"
End With

'Adjust the slide-geometry
On Error GoTo ErrorHandler
With objApp
.Presentations(1).Slides.Add 1, 1
.Presentations(1).Slides(1).Shapes(1).Delete
.Presentations(1).Slides(1).Shapes(1).Delete
.Presentations(1).PageSetup.SlideHeight = A
.Presentations(1).PageSetup.SlideWidth = B
End With

'Different paste methods are applied to graphs and tables
If c = 1 Then
objApp.Presentations(1).Slides(1).Shapes.Paste
Else
objApp.Presentations(1).Slides(1).Shapes.PasteSpecial (ppPasteEnhancedMetafile)
objApp.Presentations(1).Slides(1).Shapes(1).Height = A
objApp.Presentations(1).Slides(1).Shapes(1).Width = B
objApp.Presentations(1).Slides(1).Shapes(1).Left = 0
objApp.Presentations(1).Slides(1).Shapes(1).Top = 0
End If

'Save as PDF
objApp.Presentations(1).SaveAs Filename:=output, FileFormat:=ppSaveAsPDF

'Quit PPT
objApp.Quit

'Open PDF in default PDF Viewer
lngResult = ShellExecute(hwnd, "Open", output, "", "", vbNormalFocus)

'Release the objects
Set objApp = Nothing

On Error GoTo 0

Exit Sub

ErrorHandler:
If Err.Number = -2147467259 Then
Resume
Else
MsgBox "An error occured! Have fun figuring out what's wrong :-P" & Chr(13) & "Maybe this errornumber will help you: " & Err.Number, vbMsgBoxSetForeground + vbExclamation, "ARRRRRRRRRRRRR"
objApp.Quit
End If

End Sub


Function IsFileLocked(sFile As String) As Boolean
On Error Resume Next

' \\ Open the file
Open sFile For Binary Access Read Write Lock Read Write As #1
' \\ Close the file
Close #1

' \\ If error occurs the document if open!
If Err.Number <> 0 Then
'\\ Return true and clear error
IsFileLocked = True
Err.Clear
On Error GoTo 0
End If
End Function
[/CODE]
dimanche 8 juillet 2012 à 15:43:42 | Re : Exporter un graphique en pdf en conservant la mise en forme

NHenry

Membre Club Administrateur CodeS-SourceS
Bonjour,

Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).

As-tu essayé de forcer les marges à 0 directement dans Excel ?

---------------------------------------------------------------------
  1. Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.
  2. Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).
  3. En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
  4. Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés

---
Mon site


Cette discussion est classée dans : end, pdf, objapp, if, presentations


Répondre à ce message

Sujets en rapport avec ce message

VBA Macro Excel longue. [ par rgccx ] Bonjour, J'ai ecrit sous VBA excel une macro qui 1) demande un répertoire où se situe une liste de PDF à imprimer 2) lance en boucle [list]* l'impr Etat de sorti et mémoirre [ par MegaMIND243 ] Bonsoir, s'il vous plait pouvez vous m'aidez? je crée un logiciel qui un objet a la possibilité d'avoir un ou plusieurs photos. Private Sub Button1_ Problème sur le chargement d'un formulaire sur VB 6 [ par MareshallElamine ] Bonjour et merci d'avance de votre aide. J'ai 2 questions différentes sur Visual Basic 1- Comment faire pour afficher en rouge, dans Label1, un tau problème d'envoie et de reçevoir data avec port com [ par kbibi99 ] salut pour tous ; comment je peut vérifier que mon programme en vb8 envoie et reçue data à travers le port com c'est la fonctionne responsable à la co Récupération d'adresse MAC d'un pc distant [ par olfafoufa ] bonjour je développe ce code mais il y a des erreurs qui sont incompréhensibles est ce qu'il y a quelqu'un qui peut m'aider svp j'ai besoin de ce cod Aide sur un code VBA [ par doudouben3 ] Bonsoir j'ai un ptit souci, mon problème est le suivant suite à un ajout de champs dans un formulaire et Lorsque je clique sur le bouton modifier, le Boucle vba excel [ par nadeson ] Bonjour à tous voici mon programme, [code=vb] Sub définitionCarte() Worksheets("def").Range("B10:B11").ClearContents Application.DisplayAlerts = F Capacité de stockage [ par MegaMIND243 ] Bonsoir, j'ai projet de créer une application, me permettant de gérer 13500 enregistrement avec 3 images pour chaque enregistrement. j'ai pensé à si Test existance table [ par thomasaurelien ] Bonjour, je recherche depuis quelque jours sur le net comment testé l'éxistence d'un table access mais je n'ai pas trouvé quelqu'un chose d'intéréssan Utilisation multiple liredatarow [ par thomasaurelien ] Bonjour, j'ai une fonction LireDataRow qui me sert pour une table Users dans Access mais je voudrais que celle-ci lise n'importe quelle table passé en


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales