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

8donnees.xlsm (21.29 Ko)

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.Pathvous 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 :)

Rechercher des sujets similaires à "inserer pdf vba"