Conversion jpg en pdf via VBA
Bonjour,
j 'ai un bouton généré via vba qui permet d'uploader des fichiers.
s 'agissant de jpg ou png je souhaiterais les convertir en pdf de taille réduite
comment pourrais je procéder? même via l'outil d'impression pdf ?
j 'ai trouvé un exemple
Function ImprimerFichier(ByVal Fichier As String)
CreateObject("Shell.Application").Namespace(0).ParseName(Fichier).InvokeVerb ("Print")
End Function
mais je souhaiterais que la conversion se fasse directement dans le chemindest et que la version jpg soit supprimée une fois la conversion effectuée
Mon code
Sub Upload_Click()
Dim myfile As String
Dim oFSO As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
myfile = Application.GetOpenFilename(, , "Browse for Files")
nomFic = Worksheets("Ecriture").Range("E13") & ".jpg"
CheminDest = ThisWorkbook.Path & "\Budget pieces\" & nomFic
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
With Worksheets("Ecriture")
.Hyperlinks.Add Anchor:=.Range("J13"), _
Address:="Budget%20pieces\" & nomFic, _
TextToDisplay:=Worksheets("Ecriture").Range("A13") & " - " & Worksheets("Ecriture").Range("E13")
End With
End If
End Sub
Une idée de comment je devrais procéder?
Merci par avance
Bonjour Darkangel,
Pour convertir vos fichiers JPG ou PNG en PDF de petite taille via VBA, vous pouvez utiliser une application externe, telle que ImageMagick ou Ghostscript. Cependant, cela nécessite l'installation de ces logiciels sur votre ordinateur, ce qui peut ne pas être une option viable si vous envisagez de partager votre code avec d'autres utilisateurs.
Une autre option pourrait être d'utiliser une bibliothèque VBA pour générer des fichiers PDF, mais cela pourrait également nécessiter l'installation de logiciels supplémentaires.
Dans votre cas, je pense que l'option la plus simple serait d'utiliser une application d'impression PDF, comme vous l'avez suggéré. Vous pouvez l'automatiser en utilisant la fonction Shell dans VBA pour lancer le processus d'impression.
Un exemple de code que vous pouvez utiliser :
Sub Upload_Click()
Dim myfile As String
Dim oFSO As Object
Dim nomFic As String
Dim CheminDest As String
Set oFSO = CreateObject("Scripting.FileSystemObject")
myfile = Application.GetOpenFilename(, , "Browse for Files")
nomFic = Worksheets("Ecriture").Range("E13") & ".jpg"
CheminDest = ThisWorkbook.Path & "\Budget pieces\" & nomFic
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
With Worksheets("Ecriture")
.Hyperlinks.Add Anchor:=.Range("J13"), _
Address:="Budget%20pieces\" & nomFic, _
TextToDisplay:=Worksheets("Ecriture").Range("A13") & " - " & Worksheets("Ecriture").Range("E13")
End With
' Convertir l'image en PDF
Call ConvertImageToPDF(CheminDest, Replace(CheminDest, ".jpg", ".pdf"))
' Supprimer l'image originale
oFSO.DeleteFile CheminDest
End If
End Sub
Function ConvertImageToPDF(ImagePath As String, PDFPath As String)
' Ici, vous devrez ajouter votre code pour convertir l'image en PDF en utilisant votre application d'impression PDF préférée.
' Vous pouvez utiliser la fonction Shell pour lancer l'application et lui passer les arguments appropriés.
End Function
J'ai ajouté une fonction appelée ConvertImageToPDF
. Vous devrez remplir cette fonction avec le code approprié pour convertir l'image en PDF en utilisant votre application d'impression PDF.
J'espère que ça vous aidera.
Bonjour,
et bien merci pour ce retour constructif
En effet si je peux éviter de devoir installer quoi que ce soit cela serait préférable
dans mon cas j'utilise adobe acrobat pro
du coup et n'ayant jamais utiisé shell coment procéder?
le chemin étant:
Shell "C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat"
comment faire passer les arguments?
edit j'ai tenté comme ceci
le dossier de destination étant:
ThisWorkbook.Path & "\Budget pieces\"
le fichier jpg a convertir
nomFic
' Convertir l'image en PDF
Call ConvertImageToPDF(ThisWorkbook.Path & "\Budget pieces\", Replace(nomFic, ".jpg", ".pdf"))
' Supprimer l'image originale
'oFSO.DeleteFile ThisWorkbook.Path & "\Budget pieces\"&nomFic
End If
End Sub
Function ConvertImageToPDF(ImagePath As String, PDFPath As String)
' Ici, vous devrez ajouter votre code pour convertir l'image en PDF en utilisant votre application d'impression PDF préférée.
' Vous pouvez utiliser la fonction Shell pour lancer l'application et lui passer les arguments appropriés.
Shell "C:\Program Files (x86)\Adobe\Acrobat 11.0\Acrobat\Acrobat.exe /p /h " & nomFic, vbHide
End Function
il n'y a pas d'erreur mais pas de fichier pdf pour autant
Re bonjour,
Malheureusement
Mais il est possible d'utiliser une autre méthode pour le faire en vba, par exemple automatiser Acrobat via OLE Automation pour ouvrir l'image et l'enregistrer en PDF. Cela nécessite une certaine compréhension de la façon dont Acrobat expose ses objets pour l'automation.
Un exemple de code, mais ça dépend de votre version spécifique d'Acrobat et pourrait nécessiter des ajustements :
Sub ConvertJPGtoPDF(JPGPath As String, PDFPath As String)
Dim AcroApp As Acrobat.AcroApp
Dim PDDoc As Acrobat.CAcroPDDoc
Dim AVDoc As Acrobat.CAcroAVDoc
Dim jsObj As Object
Dim SavePDF As Boolean
'Create the Acrobat objects.
Set AcroApp = CreateObject("AcroExch.App")
Set AVDoc = CreateObject("AcroExch.AVDoc")
Set PDDoc = CreateObject("AcroExch.PDDoc")
'Open the jpg file in Acrobat Pro.
SavePDF = AVDoc.Open(JPGPath, "")
'Connect the PDDoc object to the open document.
Set PDDoc = AVDoc.GetPDDoc
'Get the JS Object - this allows us to save as a pdf.
Set jsObj = PDDoc.GetJSObject
'Save the open document as a pdf.
jsObj.SaveAs PDFPath, "com.adobe.acrobat.pdf"
'Close the pdf.
AVDoc.Close (True)
'Close Acrobat Pro.
AcroApp.Exit
'Release the objects.
Set AcroApp = Nothing
Set AVDoc = Nothing
Set PDDoc = Nothing
Set jsObj = Nothing
End Sub
Ce code utilise Acrobat Pro pour ouvrir l'image et l'enregistrer en PDF (ne pas oublier d'activer la référence "Adobe Acrobat x.x Type Library" (où x.x est la version de votre Acrobat) dans le menu "Outils -> Références").
Ensuite vous pouvez appeler dans votre code principal cette fonction :
' Convertir l'image en PDF
ConvertJPGtoPDF CheminDest, CheminDestPDF
J'espère que ça vous aidera
Bonjour,
Merci pour votre retour et cette proposition de codage :)
Désolé pour mon délai de retour mais j'ai profité du weekend prolongé pour ne rien faire pour une fois
juste pour bien comprendre la macro ConvertJPGtoPDF
JPGPath As String, PDFPath As String)
je jpgpath c'est le bien le chemin complet du fichier jpg à convertir non?
et
PDFPath le chemin de destination donc le répertoire?
car pour le moment cela me génère:
Bonjour Darkangel,
La fonction ConvertJPGtoPDF
prend en argument deux chaînes de caractères : JPGPath
et PDFPath
.
JPGPath
correspond au chemin complet du fichier JPG à convertir. C'est-à-dire, il faut inclure le nom du fichier et son extension (par exemple, "C:\MesDocuments\MonImage.jpg").PDFPath
est le chemin complet où vous souhaitez enregistrer le fichier PDF converti. Encore une fois, cela doit inclure le nom du fichier et son extension (par exemple, "C:\MesDocuments\MonFichierConverti.pdf").
Concernant l'erreur que vous rencontrez ("Type d'argument ByRef incompatible"), cela se produit généralement lorsque vous essayez de passer une variable à une fonction, mais que le type de la variable ne correspond pas au type attendu par la fonction.
Dans le contexte de votre code, vous devez vous assurer que CheminDest
et CheminDestPDF
(qui sont passés à la fonction ConvertJPGtoPDF
) sont bien des chaînes de caractères.
Un exemple de code pour appeler la fonction ConvertJPGtoPDF
:
' Définir le chemin du fichier JPG d'origine
CheminDest = ThisWorkbook.Path & "\Budget pieces\" & nomFic
' Définir le chemin du fichier PDF à créer
CheminDestPDF = Replace(CheminDest, ".jpg", ".pdf")
' Convertir le fichier JPG en PDF
ConvertJPGtoPDF CheminDest, CheminDestPDF
Cela suppose que nomFic
est également une chaîne de caractères contenant le nom du fichier d'origine (avec l'extension ".jpg").
J'espère que cela vous aidera.
Merci mais le soucis est justement lié au fichier il semblerait
nomFic = dateen & " - " & Worksheets("Ecriture").Range("E" & ligne) & ".jpg"
CheminDest = ThisWorkbook.Path & "\Budget pieces\" & nomFic
car l'erreur s'affiche avant meme l'upload du fichier dans le dossier de destination
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
With Worksheets("Ecriture")
.Hyperlinks.Add Anchor:=.Range("J" & ligne), _
Address:="Budget%20pieces\" & nomFic, _
TextToDisplay:=dateen & " - " & Worksheets("Ecriture").Range("E" & ligne)
End With
Worksheets("Ecriture").Range("J" & ligne).Font.Size = 9
Sh.Select
Sh.Delete
CheminDestPDF = Replace(CheminDest, ".jpg", ".pdf")
'Convertir l 'image en PDF
ConvertJPGtoPDF CheminDest, CheminDestPDF
End If
Il semble qu'il y ait un problème avec le chemin du fichier (CheminDest) ou le nom du fichier (nomFic).
Essayez d'afficher la valeur de CheminDest
et nomFic
avant l'appel de oFSO.CopyFile
pour voir si les chemins de fichier sont corrects :
Debug.Print "nomFic: " & nomFic
Debug.Print "CheminDest: " & CheminDest
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
Une autre chose à vérifier est si dateen
et Worksheets("Ecriture").Range("E" & ligne)
retournent des valeurs appropriées pour la construction du nom de fichier. Essayez de vérifier si le dossier "\Budget pieces" existe déjà dans le répertoire du classeur. Si ce n'est pas le cas, oFSO.CopyFile
pourrait échouer car il ne peut pas copier un fichier dans un répertoire qui n'existe pas. Et enfin vérifiez si le fichier que vous essayez de copier n'est pas déjà ouvert ou utilisé par une autre application, car cela pourrait également causer l'échec de la copie du fichier (plusieurs vérifications pour être sur on sait jamais
je viens de vérifier via debut.print
nomFic: 2023-05-22 - essai1.jpg
CheminDest: C:\Users\Moi\Desktop\Perso\Budget pieces\2023-05-22 - essai1.jpget l'image jpg est bien existante dans le dossier
mais je dois avant désactiver 'ConvertJPGtoPDF CheminDest, CheminDestPDF sinon même problème
je joins la macro global
Sub Upload_Click()
Dim myfile As String
Dim oFSO As Object
Dim Sh As Shape
Set Sh = ActiveSheet.Shapes(Application.Caller) 'recupere le bouton cliqué
Dim ligne As Long
Dim colonne As Long
ligne = Sh.TopLeftCell.Row 'N° ligne du bouton
colonne = Sh.TopLeftCell.Column 'N° colonne du bouton
datefr = Worksheets("Ecriture").Range("A" & ligne)
dateen = Format(datefr, "yyyy-mm-dd")
nomFic = dateen & " - " & Worksheets("Ecriture").Range("E" & ligne) & ".jpg"
CheminDest = ThisWorkbook.Path & "\Budget pieces\" & nomFic
'Debug.Print "nomFic: " & nomFic
'Debug.Print "CheminDest: " & CheminDest
Set oFSO = CreateObject("Scripting.FileSystemObject")
myfile = Application.GetOpenFilename(, , "Browse for Files")
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
With Worksheets("Ecriture")
.Hyperlinks.Add Anchor:=.Range("J" & ligne), _
Address:="Budget%20pieces\" & nomFic, _
TextToDisplay:=dateen & " - " & Worksheets("Ecriture").Range("E" & ligne)
End With
Worksheets("Ecriture").Range("J" & ligne).Font.Size = 9
Sh.Select
Sh.Delete
CheminDestPDF = Replace(CheminDest, ".jpg", ".pdf")
'Convertir l 'image en PDF
'ConvertJPGtoPDF CheminDest, CheminDestPDF
' Supprimer l'image originale
'oFSO.DeleteFile ThisWorkbook.Path & "\Budget pieces\"&nomFic
End If
End Sub
A vrai dire ça me semble bizarre ce problème ConvertJPGtoPDF
.
Dans le cas de ConvertJPGtoPDF
, les deux arguments (CheminDest
et CheminDestPDF
) doivent être des Strings
. L'erreur pourrait donc être due au fait que l'un de ces arguments n'est pas une chaîne ou est une chaîne vide. Vous pourriez ajouter plus de messages de débogage pour vérifier la valeur de CheminDest
et CheminDestPDF
juste avant d'appeler ConvertJPGtoPDF
Debug.Print "CheminDest avant ConvertJPGtoPDF: " & CheminDest
Debug.Print "CheminDestPDF avant ConvertJPGtoPDF: " & CheminDestPDF
'Convertir l'image en PDF
'ConvertJPGtoPDF CheminDest, CheminDestPDF
Si les valeurs semblent correctes, l'erreur pourrait être dans la fonction ConvertJPGtoPDF
elle-même. Vous pouvez également essayer de commenter certaines parties de cette fonction pour voir quelle partie précise provoque l'erreur.
Une autre chose à vérifier serait la version d'Adobe Acrobat que vous utilisez et la référence ajoutée dans le VBA. Si vous utilisez une version différente, il pourrait y avoir des incompatibilités qui entraînent l'erreur à mon avis.
Assurez-vous que le fichier que vous essayez de convertir est bien un fichier .jpg. Si le fichier n'est pas un jpg, la fonction ConvertJPGtoPDF
pourrait échouer (Vous avez mentionné que le fichier jpg est bien existant dans le dossier. Néanmoins, il serait bon de vérifier que le fichier est accessible et n'est pas en cours d'utilisation par une autre application lorsque vous exécutez le code).
Bon alors j'ai progressé mais qu'un peu
il fallait juste déclarer
Dim CheminDest As String
Dim CheminDestPDF As String
maintenant cela lance bien la macro lié à acrobat
mais ca bloque directement à la premiere ligne
Dim AcroApp As Acrobat.AcroApp
a tout hasard j'ai acrobat pro 11.0.23, acrobat reader
sinon j'ai procéde autrement et cela fonctionne plus ou moins
Chemin = ThisWorkbook.Path & "\Budget pieces\"
Fich = Dir(Chemin & dateen & " - " & Worksheets("Ecriture").Range("E" & ligne) & ".jpg")
FichPDF = Split(Fich, ".")(0) & ".pdf"
ActiveWorkbook.Sheets.Add.name = "Temp"
Worksheets("Temp").Range("A1").Select
Worksheets("Temp").Pictures.Insert (Chemin & Fich)
Worksheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & FichPDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Application.DisplayAlerts = False
Worksheets("Temp").Delete
Kill CheminDest
seulement l'image est inséré dans un doc format A4 m'ais j'aimerais le resizer à la taille de l'image.
sinon le pdf est bien généré avec l'image mais en format A4
Pour le problème que vous rencontrez avec l'erreur Type défini par l'utilisateur non défini
, cela signifie que VBA ne reconnaît pas Acrobat.AcroApp
comme un type valide. Cela se produit généralement lorsque la bibliothèque d'objets correspondante n'est pas activée dans les références de votre projet.
Pour l'activer : 1) Outils --> Référence
2) Dans la fenêtre qui s'ouvre, recherchez la référence correspondant à Adobe Acrobat, par exemple "Adobe Acrobat 10.0 Type Library" ou une version similaire.
3) Cochez la case à côté de cette référence pour l'activer, puis cliquez sur "OK".
Normalement ça devrait résoudre l'erreur de compilation que vous aviez.
Quant à la taille de l'image dans le document PDF, l'une des solutions possibles est de modifier la taille de la plage d'impression pour qu'elle corresponde à la taille de l'image. Un exemple de code :
Dim rng As Range
' Définir la plage à la taille de l'image
Set rng = Worksheets("Temp").Range("A1:B10") ' A ajuster en fonction de la taille de l'image
' Définir la plage d'impression
Worksheets("Temp").PageSetup.PrintArea = rng.Address
' Exporter en PDF
Worksheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & FichPDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
N'oubliez pas de remplacer "A1:B10"
par la plage qui correspond à la taille de votre image. J'espère que cela vous aidera, et désolé pour la réponse tardive j'étais pas mal occupé ^^
Ok merci à vous pour ce retour que j’analyserais demain à tête reposer. Aucun soucis pour le délai que je comprends tout à fait.
Par contre pour la taille de l’image je ne la connais pas. peut on la détecter lors de l’upload?
‘merci et bonne soirée
Ok merci à vous pour ce retour que j’analyserais demain à tête reposer. Aucun soucis pour le délai que je comprends tout à fait.
Par contre pour la taille de l’image je ne la connais pas. peut on la détecter lors de l’upload?
‘merci et bonne soirée
ps je pense avoir trouvé une piste avec ExtendedProperty("Dimensions") qu’il me faut approfondir car je ne connais pas
Bonjour,
Oui, on peut obtenir la taille d'une image importée, une fois que vous avez la taille de l'image, vous pouvez convertir ces dimensions en nombre de cellules pour définir la plage d'impression.
Voici un exemple de code qui insère une image dans une feuille, obtient sa taille, puis définit la plage d'impression en conséquence :
Dim pic As Picture
Dim rng As Range
Dim picWidth As Long, picHeight As Long
' Insérer l'image
Set pic = Worksheets("Temp").Pictures.Insert(Chemin & Fich)
' Obtenir la taille de l'image en cellules
picWidth = Round(pic.Width / Worksheets("Temp").Range("A1").Width)
picHeight = Round(pic.Height / Worksheets("Temp").Range("A1").Height)
' Définir la plage à la taille de l'image
Set rng = Worksheets("Temp").Range("A1").Resize(picHeight, picWidth)
' Définir la plage d'impression
Worksheets("Temp").PageSetup.PrintArea = rng.Address
' Exporter en PDF
Worksheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & FichPDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
Notez que ce code suppose que la cellule A1 est de taille standard. Si la cellule A1 a été redimensionnée, vous devrez remplacer "A1"
par la référence d'une cellule de taille standard.Ce code utilise également la fonction Round
pour arrondir la taille de l'image au nombre de cellules le plus proche. Si vous voulez être plus précis, vous pouvez utiliser la fonction Ceiling
à la place pour arrondir toujours à la cellule supérieure (mais cela nécessite d'ajouter une référence à la bibliothèque Microsoft Office ou d'utiliser une formule Excel à la place, à vous de voir).
Bonjour,
Merci à vous une nouvelle fois pour cette proposition de code ainsi que votre aide pour résoudre mon soucis
Je viens de l'intégrer et faire un test avec un smiley trouvé sur le web.
J'ai enlevé la suppression de la feuille temp pour pouvoir visualiser
1) dans le fichier temp on voit que la zone d'impression s'ajuste mais pas totalement correctement
seulement une fois le fichier converti cela ne fonctionne pas du tout car s’affiche toujours sur A4 complet
une idée de ce que je fais mal?
merci encore pour votre aide
ps : j'en suis là avec la macro
Set oFSO = CreateObject("Scripting.FileSystemObject")
myfile = Application.GetOpenFilename(, , "Browse for Files")
If myfile <> "" Then
oFSO.CopyFile myfile, CheminDest, True
With Worksheets("Ecriture")
.Hyperlinks.Add Anchor:=.Range("J" & ligne), _
Address:="Budget%20pieces\" & nomFic, _
TextToDisplay:=dateen & " - " & Worksheets("Ecriture").Range("E" & ligne)
End With
Worksheets("Ecriture").Range("J" & ligne).Font.Size = 9
Sh.Select
Sh.Delete
Chemin = ThisWorkbook.Path & "\Budget pieces\"
Fich = Dir(Chemin & dateen & " - " & Worksheets("Ecriture").Range("E" & ligne) & ".jpg")
FichPDF = Split(Fich, ".")(0) & ".pdf"
ActiveWorkbook.Sheets.Add.name = "Temp"
Worksheets("Temp").Range("A1").Select
Worksheets("Temp").Pictures.Insert (Chemin & Fich)
Set pic = Worksheets("Temp").Pictures.Insert(Chemin & Fich)
' Obtenir la taille de l'image en cellules
picWidth = Ceiling(pic.Width / Worksheets("Temp").Range("A1").Width)
picHeight = Ceiling(pic.Height / Worksheets("Temp").Range("A1").Height)
' Définir la plage à la taille de l'image
Set rng = Worksheets("Temp").Range("A1").Resize(picHeight, picWidth)
' Définir la plage d'impression
Worksheets("Temp").PageSetup.PrintArea = rng.Address
Worksheets("Temp").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & FichPDF, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
' Worksheets("Temp").Delete
Kill CheminDest
End If
Bonjour,
L'export PDF d'Excel n'est pas toujours très précis lorsqu'il s'agit de respecter les zones d'impression spécifiques, surtout avec les images. Même si la zone d'impression est correctement définie dans Excel, le fichier PDF peut toujours inclure des marges supplémentaires qui n'étaient pas prévues.
Une option pourrait être de modifier les paramètres de mise en page de la feuille de calcul avant l'exportation. Par exemple, vous pouvez essayer de régler les marges à 0, de définir l'orientation à Paysage et d'ajuster l'échelle à 100%. Un exemple de code que vous pouvez tester :
With Worksheets("Temp").PageSetup
.PrintArea = rng.Address
.LeftMargin = 0
.RightMargin = 0
.TopMargin = 0
.BottomMargin = 0
.HeaderMargin = 0
.FooterMargin = 0
.Orientation = xlLandscape
.FitToPagesWide = 1
.FitToPagesTall = 1
.Zoom = False
End With
Cela peut ne pas être suffisant pour obtenir un PDF parfaitement dimensionné. Si la précision est une priorité pour vous, vous pouvez envisager d'utiliser une bibliothèque externe ou un outil dédié pour générer les fichiers PDF.
Enfin, dans le code que vous avez partagé, vous insérez deux fois l'image (une fois avant le Set pic = Worksheets("Temp").Pictures.Insert(Chemin & Fich)
et une fois dedans). Vous pouvez supprimer la ligne Worksheets("Temp").Pictures.Insert (Chemin & Fich)
pour n'insérer qu'une seule fois l'image.
espère que cela vous aidera.
re bonjour,
j'ai cru un instant que cela aurait pu fonctionner.
en effet dans le fichier temp et si je passe en mode affichage avec saut de page cela s'ajuste bien mais quand j'ouvre le pdf toujours la même chose
je pense n'avoir donc pas le choix que je passer par une bibliothèque externe / outil dédié
dans les imprimantes je vois bien adobe pdf mais aussi microsoft print to pdf
Je pense aussi que la meilleure solution serait de passer par une bibliothèque, mais faites attention car utiliser Adobe PDF ou Microsoft Print to PDF peut être une tâche un peu complexe qui nécessite une interopérabilité avec des API externes et peut varier en fonction de l'environnement de l'utilisateur.
Une autre alternative pourrait être d'utiliser un outil de ligne de commande pour convertir l'image en PDF. Par exemple, il existe des outils open source comme ImageMagick qui peuvent faire cela. Vous pouvez l'installer sur votre machine, puis l'appeler à partir de VBA en utilisant Shell
. Un exemple de comment faire si cela vous intéresse :
Sub ConvertImageToPdf(imagePath As String, pdfPath As String)
Dim cmd As String
cmd = "magick convert """ & imagePath & """ """ & pdfPath & """"
Call Shell(cmd, vbHide)
End Sub
Vous devez remplacer "magick convert"
par le chemin complet vers l'exécutable convert
de ImageMagick sur votre machine. C'est une solution qui peut etre la plus adéquate avec votre problème mais vous pouvez explorer d'autres options bien évidemment.
J'espère avoir été utile et n'hésitez pas si vous avez d'autres questions.
merci mais je vais devoir utiliser ce qu'il y a sur le pc
en effet je n'ai pas les droit d'admin sur mon pc de boulot et donc pas moyen d'installer imagmagik mais seulement de récupérer la version portable
en espérant que cela reste possible mais m'obligera à l'installer sur mon autre ordi aussi
j'ai tenté comme cela
Chemin = ThisWorkbook.Path & "\Budget pieces\"
Fich = Dir(Chemin & dateen & " - " & Worksheets("Ecriture").Range("E" & ligne) & ".jpg")
MsgBox (ThisWorkbook.Path & "\ImageMagick\convert.exe")
Call ConvertImageToPdf(Fich, Chemin)
Sub ConvertImageToPdf(imagePath As String, pdfPath As String)
Dim cmd As String
cmd = ThisWorkbook.Path & "\ImageMagick\convert.exe" & imagePath & """ """ & pdfPath & """"
Call Shell(cmd, vbHide)
End Sub
avec si msgbox de cmd
je tente meme
cmd = ThisWorkbook.Path & "\ImageMagick\convert.exe""" & imagePath & """ """ & pdfPath & """"
mais rien toujours pareil