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
 

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
ok donc de ma version a ta version ca ne va pas au même endroit
chez moi la racine c'est directement "Temp"
donc on a déjà un soucis avec ça pour ton concept
vraiment bizarre ton truc
regarde chez moi
demo.gif
 

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

1701247051443.jpeg

1701247059714.jpeg


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
1701264388853.png


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

Réponses
4
Affichages
212

Statistiques des forums

Discussions
315 109
Messages
2 116 322
Membres
112 717
dernier inscrit
doguet