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 02/03/2011, 07h39   #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 maitrisez les processus en cours

Bonjour, j'utilise word 2000.
A partir de word donc, et d'une macro écrite en VBA, j'ouvre un fichier pdf, puis je contrôle les mouvements de la souris pour actionnr le menu adobe << sélectionner tout >> puis le menu << copier >>, ensuite je récupére ces infos dans word en effectuant un << paste >> de ces données. Cette macro fonctionne bien généralement mais là je suis confronté à la taille des fichiers pdf importants ce qui a pour conséquence de faire durer :

1. le délai d'ouverture compléte du fichier pdf
2. le delai pour que l'action sélectionner tout soit complétement effectué
3. le délai pour que l'ensemble des données soit copiés dans le presse papier

ce que je souhaite c'est avec le code VBA controler chacune de ces actions en attendant qu'elles soient complétement terminées avant de passer à la suivante.

merci pour votre aide.
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2011, 09h55   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
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 321
Points : 29 219
Points : 29 219
Salut,

je pense que la commande DoEvents devrait t'aider.
Elle oblige le logiciel à attendre qu'une action soit terminée avant d'en commencer une autre.
__________________
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 10
Vieux 03/03/2011, 01h01   #3
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 377
Points : 3 377
Salut Riri2983,

Il existe des actions très consommatrices de temps de traitement dans le VBA de Word : celles qui déplacent le point d'insertion ou qui modifient la sélection. Si tu n'en es pas sûr, envoye ta macro pour qu'on y regarde.

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 09h37   #4
Nouveau Membre du Club
 
Inscription : septembre 2007
Messages : 110
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 110
Points : 31
Points : 31
Bonjour Sepia

Tu trouveras ci-dessous un bout du code

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
ReturnValue = Shell("""C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe"" ""D:\Mes documents\CCO\Telex\2011-02-27-RCV.pdf""", 3)
 
AppActivate ReturnValue
 
 
Sleep (1000)
 
'Manipulation du curseur pour effecuer l'opération "Selectionner tout" du menu Edition de Acrobat Reader
 
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
 
'Mise en attente <<aléatoire>> que la sélection s'opére - pour info le fichier traité compte 1285 pages - car le délai de sélection est variable
 
Sleep (10000)
 
'manipulation de la souris pour effectuer l'opération "Copier" du menu Edition d'acrobat Reader
 
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
 
'Mise en attente <<aléatoire>> que la sélection soit intégralement copier
 
Sleep (10000)
 
'Manipulation de la souris pour fermeture du fichier PDF
 
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
 
'Retour à Word
 
Windows(1).Activate
Sleep (300)
'Action de collage des données issues de PDV vers Word pour triturage et mise en forme à ma main
 
Selection.Paste
 
Sleep (15000)
L'insertion d'une commande ne change rien à l'affaire

J'ai cherché un bout de code qui surveille les processus en cours malheureusement si le processus <<AcroRd32.exe>> est bien detecté, le traitement à l'intérieur de ce processus (selectionner tout) lui ne l'est pas.

De même, l'action Copier qui prend un certain temps n'est pas plus detectée

En fait je souhaterais pouvoir mettre une routine vérifiant par exemple que le processus ClipBoard est en cours.

Enfin toute solution me permettant d'enchainer les actions automatiquement les unes après les autres serait la bienvenue.

Bien évidemment je confirme que la méthode que j'tilise fonctionne généralement très bien et que cela me permet ntament de récupérer et traités des documents PDF pour ensuite les exporter vers d'autres application (Excel, Access) mais effectivement généralement ces fichiers PDF sont plus "petit" d'ou un traitement des actions demandées maîtrisables, ce qui semble actuellement poser problème dès lors que le fichier PDF est volumineux.

Merci de toute l'aide que vous pourrez m'apporter

Riri 2938
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2011, 21h02   #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
bonsoir,
je pense avoir résolu mon problème et donc clos celui-ci

J'ai inséré ce bout de code qui vérifie si l'action << Copier >> est terminée

Code :
1
2
3
4
5
6
Do
DoEvents
If hClipMemory > 0 Then Exit Do
Sleep 1000
ClipBoard_GetData
Loop
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) _
   As Long
Declare Function GetClipboardData Lib "User32" (ByVal wFormat As _
   Long) As Long
 
Public Const GHND = &H42
Public Const CF_TEXT = 1
Public Const MAXSIZE = 4096
 
   Dim hClipMemory As Long
   Dim lpClipMemory As Long
   Dim RetVal As Long
 
Function ClipBoard_GetData()
    OpenClipboard (0)
    hClipMemory = GetClipboardData(CF_TEXT)
    lpClipMemory = GlobalLock(hClipMemory)
    RetVal = GlobalUnlock(hClipMemory)
    RetVal = CloseClipboard()
End Function
Merci à tous pour votre aide précieuse
riri2938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h55.


 
 
 
 
Partenaires

Hébergement Web