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
colle dans ton fichier dans un module
VB:
Sub testb()
    Dim x As Date
     OpenClipboard 0&: EmptyClipboard: CloseClipboard
    On Error Resume Next
    ActiveSheet.OLEObjects(1).Copy
    On Error GoTo 0
    dossier = Environ("userprofile") & "\AppData\Local\Temp"
     x = 0
    DoEvents
    fic = Dir(dossier & "\*.txt")
    Do While fic <> ""
        y = FileDateTime(dossier & "\" & fic)
        If CDate(y) > x Then x = CDate(y): f = fic
        'Debug.Print x
        fic = Dir
    Loop
   MsgBox dossier & "\" & f
End Sub
 

patricktoulon

XLDnaute Barbatruc
j'ai bien une autre idée pour faire ca il faudra que je la teste
a savoir mettre carrément ton exe dans le zip
et a l'ouvertir du fichier
savecopyas blablabla.zip
sortir le exe sur le bureau
s'en servir
a la fermeture kill fichier
 

Dudu2

XLDnaute Barbatruc
Ton code ne donne rien chez moi car dans mon répertoire C:\Users\Utilisateur\AppData\Local\Temp je n'ai aucun fichier texte.
Le fichier temporaire issu du OLEObject.Copy est dans C:\Users\Utilisateur\AppData\Local\Temp\{74E4ACF7-A21C-4C60-BCEB-C3697F8B799F}\{BC602ABA-472E-400B-A940-30848BA0D292}\Bonjour.txt

Et merci Everything sans lequel je ne pourrais même pas envisager de faire la moindre chose.
 

patricktoulon

XLDnaute Barbatruc
des fois oui des fois non
ce qui est etonnant c'est que ta version a des ratés a l'ouverture du fichier
et ma version c'est les lancement suivant la premiere apres l'ouverture
bien trop bancale tout ça
cela dit on apprend des choses
 

Dudu2

XLDnaute Barbatruc
j'ai bien une autre idée pour faire ca il faudra que je la teste
a savoir mettre carrément ton exe dans le zip
et a l'ouvertir du fichier
savecopyas blablabla.zip
sortir le exe sur le bureau
s'en servir
a la fermeture kill fichier
Tu peux faire ça mais pour moi ce n'est pas l'objectif d'avoir un classeur qui fait la conversion PDF to Text.
D'ailleurs avec un classeur on peut très bien conserver le pdftotext.exe dans un Embbeded Object sans passer par un ZIP.

Le classeur qu'on fournit n'est que "l'enveloppe" de démonstration d'une fonction (GETPDFText) qui fait la conversion. Cette fonction doit pouvoir être utilisée dans n'importe quel projet VBA et donc être auto-suffisante. D'où l'idée qu'elle ait le path du pdftotext.exe en paramètre conditionnel.

Le classeur "enveloppe" de démonstration peut utiliser un Embbeded Object pour le pdftotext.exe.
Et il doit contenir les consignes au cas où l'utilisateur voudrait utiliser pdftotext.exe pour la conversion en copiant l'Embbeded Object quelque part (on peut même fournir une petite macro pour ça) et lui indiquer de passer le path en argument à la fonction (GETPDFText).

La fonction restant opérationnelle sans ce path puisqu'utilisant un Web Browser par défaut.
 

patricktoulon

XLDnaute Barbatruc
ben c'est bien là le problème
c'est bancale avec nos windows+excel d'aujourd'hui on le constate depuis tout à l'heure
en tout cas en 32 ya trop de raté
Oui alors ça c'est incompréhensible.
J'ai fait une boucle de 1 à 2 pour récupérer la 1ère fois.
Ça ne suffit visiblement pas chez toi.
Essaie d'augmenter le nombre de boucles.
ben non justement chez moi la premiere lancement après l'ouverture du classeur marche à chaque fois
si je relance j'ai bien un KFUFGT1FG6BLABLABLAVLT5G6V1.TMP qui ce crée mais plus le bonjour.txt
alors que chez toi c'est l'inverses

bref c'est pas viable pour moi
 

Dudu2

XLDnaute Barbatruc
Bonjour,
Alors comme d'hab je ne sais pas comment tu fais, quel fichier tu utilises ou ce qu'il y a de spécial chez toi car sur un autre forum j'ai demandé un test aux possesseurs de Windows 32 bits et ils ont des résultats positifs avec le fichier ci-joint.




Peu importe, ce n'est pas grave car j'ai revu mes ambitions à la baisse pour ne pas tout mélanger.

J'ai créé un autre utilitaire de conversion qui propose l'installation de pdftotext.exe directement depuis Excel.
Une fois installé, la fonction GetPDFText autonome permet la conversion du PDF en Texte (soit en fichier soit en variable String) en utilisant le pdftotext.exe installé.

Le fichier fait 1105 Ko à cause des Embbeded Objects et ne peut donc être placé ici. Vraiment trop faible cette limite de 1000 Ko ! Il est téléchargeable ici -> https://www.cjoint.com/c/MKDkVDKiTx5
Je vais en faire une ressource distincte.
 

Pièces jointes

  • GetOLETempPath Windows 32 Bits.xlsm
    35.3 KB · Affichages: 0
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
comment je fait quoi?
je n'ai pas windows32 bits j'ai win 64 et office 32
c'est pas la même chose
de toute facon tu l'a vu dans la capture animée je racconte pas de sautises
après quelque recherche il semblerait que vous travaillez avec des versions office click and run tandis que moi une version MSI c'est a dire que j'ai le cdrom d'instalation
elle ne fonctionnent pas tout à fait pareil
d'autant plus que si vous êtes sur 365 il y a de forte chance que vous ayez activé le multi clipboard
 

Dudu2

XLDnaute Barbatruc
je n'ai pas windows32 bits j'ai win 64 et office 32
Ok, alors c'est encore différent.
Comme je l'ai dit ce n'est pas grave pour le nouvel utilitaire qui ne chercher pas le OLEObject Temp Path.

Au passage j'ai revu le code pour accélérer les traitements -> https://www.cjoint.com/c/MKDkVDKiTx5

J'avais 5 méthodes différentes pour attendre la fin d'un processus lancé par Excel mais finalement, pour un processus court, le plus simple c'est de faire ça:
VB:
Private Declare PtrSafe Function GetForegroundWindow Lib "user32" () As LongPtr

    Shell Processus etc...
  
    'Wait until the process is up and running
    Do While 1
        If Not GetForegroundWindow = Application.hwnd Then Exit Do
        DoEvents
    Loop
  
    'Wait until Excel is back
    Do While 1
        If GetForegroundWindow = Application.hwnd Then Exit Do
        DoEvents
    Loop
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
avant de conclure que c'est bon
et pourtant dieu sait que j'aimerais te dire OK c'est bon
je souhaiterais que tu regarde ce que te raporte ta methode chrome ou autre navigateur et ta methode pdftoexe
je t'en donne la capture


ici a gauche ma méthode fullclipboard a droite ta methode pdftotext
les tests ont été réalisés avec ton fichier usermanual de samsumg de 62 mega
pour de la faire courte il manque a peu près 3000 lignes de text par rapport a nos version avec le navigateur
pour info avec ma version fullclip
j'ai 19260 lignes
avec ta version pdftotext.exe j'ai 15222 lignes

à méditer
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
après examen des résultats
il manque beaucoup plus de ligne en fait
car dans ton résultat il y a beaucoup de lignes vides
et de saut de ligne que je n'ai pas dans mes résultats


je suis désolé d'être ton détracteur dans tes essais mais en même temps ravi si j'apporte un peu ma pierre à l'edifice

sache que depuis aussi longtemps que je me souvienne le pdf a toujours été problèmatique avec excel en terme de recupération
à l'exeption de solutions payantes bien sur
et encore pour en avoir testé quelque une à l'epoque y compris les solutions de kiki69 aucune à ce jour n'a rendu un résultat correcte à 100%
mais plus de 3000 lignes manquantes je pense pas que ce soit un résultat acceptable

cela dit le transport de l'exe est une idée pas nouvelle mais interessante car tu la mené a bien
reste a savoir si tu a la bonne version de pdftotext.exe car il y en eu plusieurs
@Kiki69 avait un lien qui nous proposait le pack peu être se rapporocher de lui pour confirmation
et eventuellement le lien vers la version optimale
 

Discussions similaires

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