Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Récupérer le Caption d'un "Embbeded Object"

Dudu2

XLDnaute Barbatruc
Bonjour,

Pas trouvé de solution sur Internet. Dans ce classeur je voudrais récupérer le texte "Bonjour.txt" qui est le Caption (je suppose) de l' "Embbeded Object". Merci par avance.
 

Pièces jointes

  • Classeur1.xlsm
    27.9 KB · Affichages: 7

patricktoulon

XLDnaute Barbatruc
re
Bonjour @Dudu2
VB:
  'Call SaveEmbeddedObject(1, "F:\Téléchargements", "pdftotext.exe")
a oui carrément ??????
pour ton object embed je ne sais pas ce que c'est mais visiblement il est vide

edit: ok c'est un blocknot
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui je sais, la propriété qui semble la plus évidente c'est SourceName mais ça plante !

J'ai tout essayé:
VB:
    'MsgBox objOLE.SourceName
    'MsgBox objOLE.Object.SourceName
    'MsgBox objOLE.Object.Name
    'MsgBox objOLE.Object.Caption
    'MsgBox objOLE.OLEFormat.SourceName
    'MsgBox objOLE.OLEFormat.Name
    'MsgBox objOLE.OLEFormat.Caption
    'MsgBox objOLE.OLEFormat.Object.SourceName
    'MsgBox objOLE.OLEFormat.Object.Name
    'MsgBox objOLE.OLEFormat.Object.Caption
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Tu parles d'un binz !
J'aurais pas pu l'inventer celui-là !
Et encore ça ne marche pas la 1ère fois après ouverture du classeur !

Edit: Fichier supprimé, voir plus loin.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
et c'est quoi l'intérêt?
Y a pas d'intérêt

C'est pour connaître le nom du fichier qui sera créé quand on va enregistrer le Embedded Object.
Ça sert à rien si on le connaît à l'avance, ce qui est le cas la plupart du temps puisqu'on l'a créé manuellement.
Mais au cas où il y en a plusieurs, éventuellement créés dynamiquement, ça peut être utile.

Alors la toute première fois, le Temp Path rendu est toujours le même et ne correspond pas au fichier qui a été créé par Excel au moment du OLEObject.Copy. Je sais absolument pas pourquoi. Donc j'ai mis une boucle de 1 à 2 pour couvrir ce cas.

Edit: Fichier supprimé, voir plus loin.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Une petite erreur d'indice du développeur initial corrigée, et une mise au propre de la fonction SaveEmbeddedObject().
 

Pièces jointes

  • GetOLETempPath SaveEmbeddedObject.xlsm
    37.5 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
re si je cromprends bien ton histoire
tu va piquer le fichier en memoire c'est ca
mais comment tu l'ecrit en fichier dur dans le apdata ?
j'avoue que cette partie est obscure

si le fait de faire un .copy l'incrit dans un fichier dans les temps de appdata
il est facile de le retrouver
 

Dudu2

XLDnaute Barbatruc
En fait le code récupéré sur Internet
  • Génère un OLEObject.Copy ce qui a un double effet:
    - Créer un fichier temporaire issu de l'OLEObject dans le AppData.
    - Copier dans le Clipboard le path complet de ce fichier temporaire.

  • Récupère du Clipboard par GetClipboardData le path complet en question.
A partir du path complet du fichier temporaire, on connait le nom du fichier ("Bonjour.txt"). Ce qui permet donc, lors de l'export de l'OLEObject dans un répertoire par:
VB:
OLEObject.Copy
CreateObject("Shell.Application").Namespace(DestinationFilePath).Self.InvokeVerb "Paste"
de connaitre le path complet du fichier exporté. Sinon tu ne peux pas le connaître par avance.

Ça permet entre autres choses, de supprimer le fichier exporté s'il existe déjà.

Sinon, effectivement, tu peux explorer le AppData pour trouver le fichier temporaire après OLEObject.Copy, mais il faut savoir où il se trouve. Chez moi par exemple:
C:\Users\UTILIS~1\AppData\Local\Temp\{5688EA32-A3CE-488B-9F50-6F71ECFD7608}\{A4085E79-13C1-4838-AD45-B8FE1487FD4B}\Bonjour.txt

Je ne sais pas si {5688EA32-A3CE-488B-9F50-6F71ECFD7608}\{A4085E79-13C1-4838-AD45-B8FE1487FD4B} sont des références fixes et générales.
 

Dudu2

XLDnaute Barbatruc
Le but initial (je ne crois pas que je vais le poursuivre), était de placer pdftotext.exe extrait des Xpdf command line tools en Embbeded Object dans la feuille Excel de notre convertisseur VBA PDF en Texte, d'obtenir son Path en AppData et de l'exécuter en Shell pour faire la conversion.

Si ça peut marcher avec un classeur de conversion, ça ne permet l'utilisation généraliste de la fonction que si ce pdftotext.exe est installé quelque part et que la fonction en connait le Path. C'est pour ça que je ne vais pas le faire. La fonction actuelle étant autonome avec l'utilisation des Web Browsers.
Mais c'est sûr qu'avec le pdftotext.exe c'est le plus efficace et fonctionnel à 100% sans avoir à piloter le Browser.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
a bon
moi quand je fait un oleobject(x).copy
je prends le dernier fichier temporaire ".tmp"
je l'ouvre avec un blocknot et voila ce que j'ai

pas compliqué d'aller chercher cette donnée
alors c'est marrant on a d'abords un chemin qui corresponds au fichier mais dans le dossier ou se trouve le classeur et ensuite on a le chemin du fichier dans le TEMP

mais un truc bizarre avec ce truc je vais essayer de comprendre
le .copy apres ouverture du classeur fonctionne une fois et apres j'ai une erreur
 

patricktoulon

XLDnaute Barbatruc
ha ben il y a de l'idée
ca te permettrais de distribuer l'exe car il serait intégré dans le fichier
c'est ca que tu veux faire non?
 

Dudu2

XLDnaute Barbatruc
c'est ca que tu veux faire non?
Oui (je dis oui après avoir dit non !) , éventuellement améliorer le code actuel pour passer optionnellement le Path de l'exe en argument de la fonction. Sachant que l'exe est en Embbeded Object facile à récupérer si besoin. A défaut le faire avec le Browser.

Comment tu fais pour trouver le dernier fichier temporaire créé ?
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…