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.
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)
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
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\ ?