Générer PDF avec PHOTO

Bonjour a tous,

Dans le cadre de mon travail j'ai créer un fichier de gestion des stocks, (j'ai réussi a trouver une base qui ma aidé beaucoup aidé déjà).

Mon besoin aujourd'hui est que pour chaque entrée en stock en plus de la date, de la désignation du produit et de la quantité il faudrait que je puisse insérer une photo et des dimensions et que le tout génère un PDF.

Ce PDF sera ensuite stocké dans un dossier, et on accédera au dossier ou sont les PDF via un lien hypertexte situé dans la colonne A de l'onglet "Etat stock"

Explication de mon fichier excel:

onglets:

- "liste": Sont écrit les différents nom de produits (utilisé dans la cellule G7 de l'onglet "nouveau" sous forme de liste)

- "Nouveau": Sert à ajouter une entrée ou sortie en stock

- "Mouvement": Trace l'historique de chaque entrée/sortie de notre stocks

- "Etat stock": permet d'avoir un aperçu de notre stock

Je sais pas si j'ai bien expliquer mon besoin, je ne suis vraiment pas doué et possède quasiment aucune base en VBA ... si quelqu'un peut m'éclairer ca serait vraiment top, je vous laisse mon fichier en PJ.

38suivi-de-stock.xlsm (43.56 Ko)

Petit bonjour pour faire remonter le poste ... si quelqu'un pourrait m'aider ce serait top !

Bonjour Sanzzie,

Je te propose :

  • de créer 2 dossiers : un pour recevoir tes images de produits, l'autre pour stocker les PDF à générer
  • d'étendre ton tableau "liste" avec 2 colonnes "Dimensions" et "Image".
  • d'insérer un nouveau module dans ton projet et y copier le code :
Option Explicit
Sub addImage(zImagePath As String)
    Const cImageName = "ImageProduit"

    Dim oFS As Object
    Dim oSheet As Worksheet
    Dim oCell As Range
    Dim oImg As Shape
    Dim lLeft As Single, lTop As Single, lWidth As Single, lHeight As Single

   'On affecte le feuille
    Set oSheet = ActiveSheet
    'On affecte la cellule de destination de l'image
    Set oCell = oSheet.Range("G9")
    'On récupère les dimensions de la cellule
    lLeft = oCell.Left
    lTop = oCell.Top
    lWidth = oCell.Width
    lHeight = oCell.Height

    'On suprime l'image si elle existe
    On Error Resume Next
    Set oImg = oSheet.Shapes(cImageName)
    oImg.Delete
    On Error GoTo 0

    'On s'assure que l'image existe
    Set oFS = CreateObject("Scripting.FileSystemObject")
    If oFS.FileExists(zImagePath) Then
        'On ajoute l'image demandée
        Set oImg = oSheet.Shapes.addPicture(zImagePath, msoFalse, msoTrue, lLeft, lTop, lWidth, lHeight)
        'On affecte le nom à l'image
        oImg.Name = cImageName
        'On attribut les propriétés à l'image
        oImg.LockAspectRatio = msoTrue
        oImg.OLEFormat.Object.PrintObject = msoTrue
    Else
        MsgBox "L'image '" & zImagePath & "' n'a pas été trouvée!", vbExclamation
    End If

    'On fait le ménage
    Set oFS = Nothing
    Set oImg = Nothing

End Sub

- d'ajouter dans le code VBA de ta feuille "Nouveau" :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oSheet As Worksheet
    Dim oCell As Range, oDestCell As Range
    Dim oLO As ListObject
    Dim sImagepath As String

    'On s'assure que la cellule modifiée est relative au produit
    Set oCell = ActiveSheet.Range("G7")

    If Target.Address = oCell.Address Then
        'On affecte la feuille "Liste"
        Set oSheet = ThisWorkbook.Worksheets("liste")
        'On affecte le tableau des produits
        Set oLO = oSheet.ListObjects("Tableau1")
        'On recheche la ligne du produit dans le tableau
        Set oCell = oLO.DataBodyRange.Columns(2).Find(Target.Value2, LookAt:=xlWhole)
        'On recupère les dimensions du produit
        Set oDestCell = Target.Offset(1, 0)
        oDestCell.Value = oCell.Offset(, 2).Value
        'On recupère l'image
        sImagepath = oCell.Offset(, 3).Value
        'On ajoute le  chemin de stockage de l'image (à adapter)
        sImagepath = ThisWorkbook.Path & "\IMAGES\" & sImagepath & ".jpg"
        'On charge l'image
        addImage sImagepath

    End If

End Sub

- de modifier la procédure "Nouveau" pour y ajouter la création du PDF et de l'hyperlink (je crois comprendre que l'hyperlink est à réaliser sur la cellule A de l'onglet "mouvement" et non "Etat stock"...)

Sub Nouveau()
'
' Nouveau Macro
'

'
    Dim sPDFName As String

    Sheets("mouvement").Rows("2:2").Insert Shift:=xlDown
    Range("A2:E2").Copy
    Sheets("mouvement").Range("A2").PasteSpecial Paste:=xlPasteValues
    'Selection.ClearContents
    'Range("G9:G10").Select
    'Selection.ClearCon

    'On compose le nom du PDF (à adapter)
    sPDFName = ThisWorkbook.Path & "\PDF\MAJSTOCK_" & Format(Now(), "yyyy_mm_dd_HH_MM_ss") & ".pdf"

    'On créé un lien hyperlink sur le pdf à la cellule de "mouvement" (à vérifier)
    With Sheets("mouvement")
        .Hyperlinks.Add Anchor:=.Range("A2"), Address:=sPDFName, ScreenTip:="Vers le PDF généré"
    End With

    'On crée le nouveau PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sPDFName, Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, openAfterPublish:=False

    Range("G6:G10").ClearContents
    Application.CutCopyMode = False

    ActiveSheet.Activate
End Sub

Je joins mon classeur de test

Je joins mon classeur de test

Alors déjà merci énormément pour ton aide et ton temps passé dessus !

j'avais plusieurs questions,

- pourquoi "étendre ton tableau "liste" avec 2 colonnes "Dimensions" et "Image" " ?

en faite le tableau liste sert uniquement a avoir la désignations des différents mobilier qui peut être envoyé en stock, et je comptais ajouter une photo dans l'onglet "nouveau", car par exemple pour la catégorie "armoire" ca ne seras pas toujours les mêmes armoires avec les même dimension.

- Je ne comprend pas ce qu'il y aura dans le pdf avec ce code ? une copie d’écran de l'onglet "Nouveau" ?

l’idéal pour moi serait un template word (par exemple) qui se mettrait a jours par rapport a ces informations, ou alors une nouvelle feuille dans excel mis en forme (nom, dimension, quantité, photo...) et qui sera gardé via une capture d'écran (ce qui je pense est le plus simple)

Et le lien hypertexte est bien dans l'onglet "Etat stock" car il permettra de voir les quelles références nous avons en stock, et du coup pouvoir cliqué dessus pour avoir un détail des différentes dimensions et photos par rapport a chaque entrées.

______

Sinon je t'avoue que je m'y connais vraiment pas en VBA, j'ai réussi à rentrer les macros que tu ma dis mais je ne vois pas où il faut que je mette mes liens de mes 2 dossiers etc ... je suis un peu perdu je sais pas ce qu'il me reste a modifier ou autre, de plus j'ai un message d'erreur a cette endroit (mais je pense que c'est normal)

erreurvba

est ce que ça serait possible de m'envoyer la MAJ de ce fichier avec ces demandes ... ? j'en demande peut être beaucoup, ou dans le pire des cas m'éclaircir d'avantage si possible

Up

Bonjour Sanzzie,

En réponse à quelques une de tes questions :

- pourquoi "étendre ton tableau "liste" avec 2 colonnes "Dimensions" et "Image" " ?...

Pour une facilité de manipulation, je te suggère d'étendre la liste de tes produits avec, d'une part les dimensions et noms des images que tu auras stockées au préalable dans un dossier particulier et d'autre part avec toutes tes références (faire un catalogue articles en résumé...)

Je ne comprend pas ce qu'il y aura dans le pdf avec ce code ?...

Effectivement dans la version que je t'ai fournie, il s'agit d'une copie de la feuille "Nouveau". Si ce n'est pas ce que tu avais en tête pour le PDF il faudrait que tu spécifie précisément ce que tu veux en sachant que si tu veux passer par un WORD, c'est tout à fait possible mais introduit un niveau supplémentaire de difficultés pour toi dans le VBA puisqu'il te faudra savoir manipuler les objets propres à WORD. (Comme tu débutes en VBA, il me semblerait plus raisonnable que tu te limites pour le moment aux objets EXCEL...)

Et le lien hypertexte est bien dans l'onglet "Etat stock"...

Ce que tu demandes est de mon point de vue incohérent : tu demandes d'associer un PDF à chaque entrée/sortie de stock vers une référence unique d'un article. Je n'ai pas compris le pourquoi de ta demande. Peux-tu expliciter?

Pour ce qui est du message d'erreur que tu obtiens, tu n'indique le libellé de ce message mais il est probable qu'il s'agit d'un problème lié à l'existence du dossier devant recevoir les PDF : dans la version que je t'ai envoyée, ce dossier est un sous dossier du dossier contenant ton classeur EXCEL:

   'On compose le nom du PDF (à adapter)
    sPDFName = ThisWorkbook.Path & "\PDF\MAJSTOCK_" & Format(Now(), "yyyy_mm_dd_HH_MM_ss") & ".pdf"

As-tu bien créé ce sous-dossier ...\PDF\MAJSTOCK\ ?

Rechercher des sujets similaires à "generer pdf photo"