Insérer PDF dans cellule Excel avec VBA
Bonjour,
Je dispose de 2 fichiers EXCEL, un fichier "Données" à la disposition de mes collaborateurs et un fichier "suivi interventions" qui est commun.
Le but est le suivant: mes collaborateurs saisissent des valeurs en colonne B du fichier "Données" qu'ils auront sur leur PC.
Une fois la saisie terminée, ils cliquent sur "Exporter", un fichier PDF est créé sur leur bureau et ensuite ils viennent sélectionner le fichier "suivi interventions" pour archiver leur rapport dans un classeur commun à tous les collaborateurs.
J'ai réussi à créer la macro pour exporter leur travail au format PDF sur leur bureau, exporter leur données dans le classeur "suivi des interventions". Par contre dans ce fichier, j'aimerais en colonne E y insérer le PDF au format icône (identique à celui exporté au préalable sur leur bureau).
Comment pourrais-je procéder s'il vous plait ?
Merci à vous tous :)
JB
Bonsoir JBP
Très très mauvaise idée de vouloir incorporer le PDF dans le fichier Excel
1) Je ne sais pas si c'est faisable
2) Si ça l'est, cela va alourdir énormément le fichier jusqu'à la rupture
Ce qui est fait en général :
- un dossier spécifique ou sont stockés tous les PDF
- une colonne dans laquelle est enregistrée le chemin complet vers le fichier PDF que l'on peut donc ouvrir à loisir
A+
Bonsoir BrunoM45,
Si cela est réalisable, j''ai trouvé un code où je peux le faire manuellement mais cela risque de peser lourd effectivement.
Je vais suivre votre conseil, j'ai réussi à exporter le PDF dans un dossier spécifique. Par contre comment faire pour générer le lien du PDF en colonne E et pouvoir ouvrir le PDF si je clique sur le lien ?
Merci BrunoM45 !
JB
bonjour BrunoM45,JeanBaptisteP,
je pense qu'on peut "importer" un pdf depuis excel2019 et l'automatiser aussi, je joins une macro qui est fait avec l'enregistreur (et à modifier plus tard). Ainsi, on lit le contenu du pdf et on met les données dans par exemple un tableau structuré ou ....
Sub Macro1()
ActiveWorkbook.Queries.Add Name:="Table001 (Page 1)", Formula:= _
"let" & Chr(13) & "" & Chr(10) & " Bron = Pdf.Tables(File.Contents(""C:\Users\Eigenaar\Desktop\Rapport_inter8798477.pdf""), [Implementation=""1.3""])," & Chr(13) & "" & Chr(10) & " Table001 = Bron{[Id=""Table001""]}[Data]," & Chr(13) & "" & Chr(10) & " #""Type gewijzigd"" = Table.TransformColumnTypes(Table001,{{""Column1"", type text}, {""Column2"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & " #""Type gewijzigd"""
ActiveWorkbook.Worksheets.Add
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""Table001 (Page 1)"";Extended Properties=""""" _
, Destination:=Range("$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [Table001 (Page 1)]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "Table001__Page_1"
.Refresh BackgroundQuery:=False
End With
Range("I11").Select
End Sub
Bonjour,
Par contre comment faire pour générer le lien du PDF en colonne E et pouvoir ouvrir le PDF si je clique sur le lien ?
Pour le lien, que vous indiquez l'emplacement d'enregistrement, il suffit de l'enregistrer aussi dans la cellule que vous voulez.
With activesheet
x = "lien complet du fichier"
.cells(1,5) = x
End with
Et pour ouvrir le PDF
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With activesheet
If Target.Address = "$E$1" then
If .cells(1,5) <> "" then
ThisWorkbook.FollowHyperlink .cells(1,5)
End if
End if
End with
End sub
J'ai écrit ça vite sans tester ou ouvrir votre document pour le moment. Mais je pense que globalement c'est ça.
Après, il faut tester l'existence du fichier* et voir en fonction de comment vous voulez que ça fonctionne (uniquement sur 1 cellule, ou bien sur l'ensemble de la colonne, etc.).
*Pour tester l'existence du fichier, quelque chose comme ça:
_____________________________
ex_fich(.cells(1,5) = True
If cib = then ThisWorkbook.FollowHyperlink .cells(1,5)
_____________________________
Public Function ex_fich(fich As String)
On Error GoTo Erreur
cib = 0
If fich <> "" And Len(Dir(fich)) > 0 Then
ex_fich = True
Else
ex_fich = False
End If
Exit Function
Erreur:
cib = 1
End Function
Bonne journée.
Bonjour,
OK, merci beaucoup, je vai tester tout ça !
Par contre je rencontre un souci car je souhaite enregistrer les PDF sur un serveur et moi et mes collaborateurs n'avons pas les mêmes chemins.
Certains disposent du chemin :
H:ENTREPRISE\DOSSIER1\FICHIER1
D'autres :
Q:ENTREPRISE\DOSSIER1\FICHIER1
Et moi:
C:ENTREPRISE\DOSSIER1\FICHIER1
Comment faire pour définir un chemin accessible par tour le monde ?
J'ai essayé de définir un chemin en utilisant ceci pour prendre en compte les différents serveurs mais ça ne fonctionne pas:
Chemin = *&":ENTREPRISE\DOSSIER1\FICHIER1"
Comment procéder s'il vous plaît ?
Merci
JB
Bonjour JBP
Quand on est en entreprise, on définit un lecteur commun à tous et on ne laisse pas faire ses collègues
Sinon, il faut parcourir la collection "Drives" de l'objet FSO (faire une recherche)
A+
Bonjour, pour le problème de lettre de serveur.
- Si chaque personne utilise une version du fichier "Donnees.xlsm" sur son PC le plus simple est d'ajouter la lettre du serveur en dessous du numéro d'intervention en "A5". Vous composerez alors votre cheminreseau
cheminreseau=Range("B5")&":\ENTREPRISE\DOSSIER\FICHIER1\"
- Si le fichier "Données.xlsm" se trouve lui aussi sur le serveur; pour pouvez récupérer la lettre directement.
cheminreseau=Left(ThisWorkbook.Path, 1)&":\ENTREPRISE\DOSSIER\FICHIER1\"
Bonjour à tous,
@BruoM45: Je comprends bien mais je ne peux pas demander à l'administrateur réseau de réaliser cette action. Je ne suis que salarié et non administrateur réseau dans une entreprise. Malgré tout, merci pour la piste !
@Xmenpl: Effectivement je vais choisir votre 1ère proposition. Je pensais pouvoir chercher le nom de mon fichier sur tous les serveurs mais ça sera trop long. Merci à vous.
Merci à vous tous, bonne soirée
JB
Bonsoir JBP
@BruoM45: Je comprends bien mais je ne peux pas demander à l'administrateur réseau de réaliser cette action. Je ne suis que salarié et non administrateur réseau dans une entreprise. Malgré tout, merci pour la piste !
Inutile d'être administrateur réseau pour connecter un lecteur
Mais si la solution de Xmenpl convient, alors
Bonjour,
Je n'ai pas compris vote réponse ""Sinon, il faut parcourir la collection "Drives" de l'objet FSO (faire une recherche)"
Mon but était de connaître la lettre du lecteur sur lequel était placé le fichier. Pour cela il faudrait rechercher ce fichier sur tous les serveurs connectés à mon PC je suppose?
Je débute, soyez indulgent svp..
Merci
JB
Bonsoir,
Comme indiqué par Xmenpl, je pense qu'en utilisant ThisWorkbook.Path
vous devriez obtenir le chemin d'accès du fichier qui est ouvert.
Quelle que soit la lettre où celui-ci est enregistré, le chemin d'accès devrait être fournis.
Ensuite, également dans la réponse de Xmenpl, en utilisant Left(ThisWorkbook.Path, 1)
vous aurez la lettre.
Bonne soirée.
Bonjour Le Drosophile,
Merci pour votre proposition. Malheureusement le fichier dans lequel je souhaite exporter mon PDF se trouve sur le serveur. Mes collaborateurs ont eu copie de ce fichier sur leur PC.
La lettre peut varier en fonction des collaborateurs qui utilisent le fichier donc je ne peux pas utiliser
ThisWorkbook.Path
Je vais opter pour cette solution:
cheminreseau=Range("B5")&":\ENTREPRISE\DOSSIER\FICHIER1\"
Merci quand même, bon weekend :)