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 , la conversion automatique d'images en PDF via Acrobat Pro via la ligne de commande (Shell) n'est pas directement supportée en ayant chercher un peu. Acrobat Pro ne fournit pas d'interface de ligne de commande pour effectuer de telles tâches.

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:

image

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.jpg
et 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 il semble que le problème se produise lorsque vous essayez d'appeler la fonction 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

image

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

capture

seulement une fois le fichier converti cela ne fonctionne pas du tout car s’affiche toujours sur A4 complet

62023-05-23-test.pdf (116.67 Ko)

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
image

avec si msgbox de cmd

sans titre

je tente meme

cmd = ThisWorkbook.Path & "\ImageMagick\convert.exe""" & imagePath & """ """ & pdfPath & """"

mais rien toujours pareil

Rechercher des sujets similaires à "conversion jpg pdf via vba"