Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/11/2011, 18h51   #1
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 110
Points : 31
Points : 31
Par défaut Collaboration PDF et Word

Voila, j'ai créé une macro vba qui pilote pdf. Le but est d'ouvrir un fichier bien déterminé puis grâce à une API, je contrôle la souris et effectue une action "Selectionner tout" afin de récupérer les données contenues à l'intérieur du fichier PDF, enfin j'envoie un action (toujours par l'intermédiaire de l'API citée précédemment) afin que le texte sélectionné soit collé.
Et c'est la que débute les difficultés.
En effet, le fichier PDF peut comporte plus de 15000 pages et l'action "Selectionner tout" peut durer un certain temps qu'il est difficile à déterminer.
J'ai deux options, la première étant de fixer de manière totalement arbitraire un délai par le biais de l'API Sleep, mais au risque de soit minorer cette valeur auquel cas mon action à suivre (en l'occurrence la fonction copier) ne fasse long feu, soit de mettre trop de temps et dans ce cas de perdre cette denrée rare qu'est le temps.
Ce problème se représente pour l'action Copier avec à peu près les mêmes effets.
Je cherche donc un moyen pour que VBA détecte automatiquement la fin de la première action - Selectionner Tout - avant de démarrer la deuxième action - Copier -
Si quelqu'un avait l'amabilité de m'aider sur ce coup.
Merci d'avance
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 21h59   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 333
Points : 29 239
Points : 29 239
Salut,

DoEvents ne fonctionne pas ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h12   #3
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 110
Points : 31
Points : 31
et non. Les deux actions qui sont lancés sont toutes deux lancés par word pour agir sur pdf.
J'ai bien tenté également de vérifier l'état du curseur de la souris - tant que l'action "Selectionner Tout "" est en cours le curseur de la souris prend la forme d'un sablier - mais pour l'instant je n'ai pas eu plus de succès
Je joins ci-dessous le code utilisé
Code :
1
2
3
4
5
6
7
8
9
 
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Declare Function SetCursorPos& Lib "user32" (ByVal X As Long, ByVal Y As Long)
Declare Function mouse_event& Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function GetClipboardData Lib "user32" (ByVal wFormat As _
   Long) As Long
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
Sub PDFtoDOC()
 
OpenClipboard 0
EmptyClipboard
CloseClipboard
 
FileName = Year(Now - 1) & "-" & Format(Month(Now - 1), "00") & "-" & Format(Day(Now - 1), "00") & "-" & "RCV.pdf"
ReturnValue = Shell("""C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe"" ""D:\Mes documents\CCO\TELEX MXNNTDB\pdf\2011\Novembre\Telex received\" & FileName & "", 3)
 
Sleep (1000)
 
SetCursorPos 75, 35
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
Sleep (100)
SetCursorPos 75, 235
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
 
DoEvents
Do
Loop While System.Cursor = wdCursorWait
 
 
Sleep (1000)
 
SetCursorPos 75, 35
Sleep (100)
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
Sleep (100)
SetCursorPos 75, 130
Sleep (100)
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
 
Sleep (1000)
 
OpenClipboard GetWindow(0, 0)
Do Until données <> 0
données = GetClipboardData(1)
Loop
 
Sleep (1000)
 
SetCursorPos 35, 35
Sleep (100)
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
Sleep (100)
SetCursorPos 35, 470
Sleep (100)
mouse_event &H2, 2&, 0&, 0, 0
mouse_event &H4, 0&, 0&, 0, 0
 
Sleep (1000)
Selection.Paste
Sleep (1000)
 
OpenClipboard (0)
EmptyClipboard
CloseClipboard
 
End Sub
Le problème se situe donc au moment ou la souris se dirige vers Edition Selectionner tout, puis menu Edition Copier, puisque je souhaite que la deuxième action attende effectivement la fin de la première action.
Merci pour tout l'aide et conseils que vous pourriez m'apporter.
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h44   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 333
Points : 29 239
Points : 29 239
Salut,

Pourquoi ne pas travailler avec la bibliothèque Acrobat dans ce cas ?
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 09h04   #5
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 110
Points : 31
Points : 31
Pourquoi pas !
Pourriez vous m'en dire plus, s'il vous plaît
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 12h06   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 333
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 333
Points : 29 239
Points : 29 239
Salut,

Plus, c'est difficile, on est sur un forum Word.

Mais on peut déclarer la bibliothèque Acrobat dans le projet et directement piloter Acrobat au départ de Word comme on peut le faire pour Excel ou un autre logiciel.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 01h13   #7
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 356
Points : 3 356
Salut riri2938,

Citation:
Envoyé par Heureux-oli Voir le message
Salut,

Plus, c'est difficile, on est sur un forum Word.

Mais on peut déclarer la bibliothèque Acrobat dans le projet et directement piloter Acrobat au départ de Word comme on peut le faire pour Excel ou un autre logiciel.
Attention, la biblio Acrobat a (très très fortement) tendance à ne connaître que le format PDF de chez... Adobe ==> dur (très) de lire des fichiers PDF au format Microsoft PDF (PDF/XPS) ou PdfCreator. Il existe plusieurs bibliothèques qui lisent le PDF (dont certaines sont gratuites) mais elles ont leur spécificité en fonction du langage (C/C++ et C# et Java) : PDFBox, iText et IcePDF. Comme ton problème semble uniquement de lire le contenu textuel d'un PDF, je te conseille PDFBox en Java et/ou C++ et/ou en C#, elle est plus complète (sur ce point) : tableau...

2ième avertissement, Abode dispose d'un moteur de polices nécessaire parfois pour correctement récupérer des infos dans les fichiers PDF (langues étrangères, positionnement des mots par rapport à la page en fonction de ces polices spécifiques) mais ces points ne devraient pas compter en extraction de texte uniquement (sinon renvoie un message) surtout si tes documents sont de langue française (ou américaine).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h50.


 
 
 
 
Partenaires

Hébergement Web