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 21/06/2008, 22h54   #1
Invité de passage
 
Homme Philippe LEVERT
Paramétreur de progiciels
Inscription : mars 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Philippe LEVERT
Âge : 58
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Paramétreur de progiciels
Secteur : Conseil

Informations forums :
Inscription : mars 2008
Messages : 6
Points : 0
Points : 0
Par défaut Echanges trop lents entre Excel (Maitre) et Word

suite à notre discussion sur erreur d'automation
J'aimerai accélérer les échanges entre ces fichiers

Je vous dit tout, c'est pour traiter très rapidement des QCM
L'environnement est le suivant:
Word est fermé
un fichier .doc contient des cases à cocher, les cases à cocher sont parfois séparées par des paragraphes de niveau 3, ce qui permet de lancer sous Word le code suivant:
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
Sub RenommerLesCasesACocher()
vxCB = 1
For i = 1 To ActiveDocument.Paragraphs.Count
    vxStyle = ActiveDocument.Paragraphs(i).OutlineLevel
    ' Créer une incrémentation
    If vxStyle = wdOutlineLevel3 Then
    vxNiveau = vxNiveau + 1
    Count = 0
    End If
    If vxStyle = wdOutlineLevelBodyText And vxNiveau >= 1 Then
                vxNomObjet = ActiveDocument.InlineShapes(vxCB).OLEFormat.Object.Name
                vxValObjet = ActiveDocument.InlineShapes(vxCB).OLEFormat.Object.Value
                Count = Count + 1
   If vxNomObjet <> "CB" & vxNiveau & "_" & Count Then
                ActiveDocument.InlineShapes(vxCB).OLEFormat.Object.Name = "CB" & vxNiveau & "_" & Count
                ActiveDocument.InlineShapes(vxCB).OLEFormat.Object.GroupName = "AAA" & vxNiveau
   End If
        vxCB = vxCB + 1
    End If
Next i
    End Sub
 
; c'est donc le résultat de ce traitement qui est sélectionné en pointant le fichier Word.
 
Les Références de ces objets et leurs valeurs sont récupérées dans Excel
 
voici le code complet sous Excel
 
Sub test()
Dim wdApp As New Word.Application
Dim WordDoc As Word.Document
Dim FileToOpen
 
'Cette méthode affiche la boîte de dialogue standard Ouvrir et lit un nom de fichier tapé par l'utilisateur sans réellement ouvrir les fichiers.
FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
If FileToOpen = False Then 'évite le bug si on clique sur annuler dans la boite d'ouverture du fichier
Exit Sub
Else
Set WordDoc = wdApp.Documents.Open(FileToOpen) 'ouvre le document Word
wdApp.Visible = False
End If
Worksheets(2).Cells(1, 1) = FileToOpen
vxN°Lig = 2
For i = 1 To WordDoc.InlineShapes.Count
Worksheets(2).Cells(vxN°Lig, 1) = WordDoc.InlineShapes(i).OLEFormat.Object.Name
Worksheets(2).Cells(vxN°Lig, 2) = WordDoc.InlineShapes(i).OLEFormat.Object.Value
vxN°Lig = vxN°Lig + 1
 Next i
wdApp.Documents.Close SaveChanges:=wdDoNotSaveChanges
wdApp.Quit
Set wdApp = Nothing
End Sub
Fichiers attachés
Type de fichier : doc QCM - QR6-Jeu-De l'oie.doc (269,5 Ko, 1 affichages)
Philippe53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2008, 23h36   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Si tu ouvres une instance de Word, tu auras toujours un problème de délai.
Et là, comme une macro est lancée dans word (je pense que c'est à l'ouverture du fichier) je ne vois pas bien comment réduire ce délai
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2008, 00h49   #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 356
Points : 3 356
Par défaut Pour accélérer Word

Salut,

Pour accélérer Word, empêches les mises à jour d'écran ==> interdit les mises à jour d'écran par le code mais n'hésitez pas à utiliser une ruse qui consiste à ne pas faire voir les modif en déclarant un écran de visualisation en dehors de ton écran réel et de faire "afficher" Word dedans. C'est surprenant, le gain est parfois un facteur 10
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2008, 01h02   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Hello Sepia,
Deux questions :
- Si on met "wdApp.Visible = False", il est malgré tout nécessaire de déclarer un écran de visualisation en dehors de l'écran réel ?
- Comment fait-on ça ?
Merci de tes réponses, c'est un domaine que je ne connais pas.
Bonne soirée
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2008, 08h37   #5
Invité de passage
 
Homme Philippe LEVERT
Paramétreur de progiciels
Inscription : mars 2008
Messages : 6
Détails du profil
Informations personnelles :
Nom : Homme Philippe LEVERT
Âge : 58
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Paramétreur de progiciels
Secteur : Conseil

Informations forums :
Inscription : mars 2008
Messages : 6
Points : 0
Points : 0
Bonjour Sepia,
Même question: déclarer un écran de visualisation en dehors de l'écran réel ?
- Comment fait-on ça ?
Merci de ta réponse
Philippe53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h33   #6
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
Par défaut Un faux écran comme 2ieme écran

Salut,

Il te faut au moins 2 sorties écran sur ton PC. Dans ce cas tu ouvres ton Word et tu déplaces la fenêtre sur le 2ieme ecran, tu lances ta macro et tu éteins ton écran. Si tu veux quand même parfois regarder, tu lances ta macros et déplaces ta fenêtre de façon à n'avoir qu'un bout (qui ne bouge pas = le bord de ta fenêtre quoi).

Remarque : pour savoir quand ta macro est finie, il faut que tu termines
par un signal sonore (série d'instructions beep(), par exemple)

Si tu n'as pas de sortie écran multiple, tu peux aussi faire pareil: tu lances ton word avec sa macro et tu couvres l'écran (attention, l'écran pas la fenêtre avec une application à fenêtre en mode plein écran, mais pas Word)
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 21h08   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Quel intérêt cela offre-t-il sur AppWd.visible = false (puisque dans ce cas précis, l'affichage n'est pas utile) ?
Je comprends le principe mais j'avoue que je ne vois toujours pas ce que ça apporte.

Par contre, je viens de me souvenir que, bien qu'aucun mouvement d'écran ne soit provoqué par le code, application.screenUpdating = false accélère les procédures dans Excel.
Il serait peut-être intéressant de tester ça dans Word.
Avant d'ouvrir le doc, ajouter
Code :
1
2
3
4
5
Else
wdApp.screenUpdating = false
wdApp.Visible = False
Set WordDoc = wdApp.Documents.Open(FileToOpen) 'ouvre le document Word
End If
(à repasser à true avant fermeture, si modif et enregistrement, ce qui n'est pas le cas ici.)
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 23h19   #8
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
Par défaut Optimiser l'affichage

Salut,

Dans l'absolu, tu as raison ouskel'n'or mais il y a une énorme différence entre "ne pas faire voir" et "ne pas mettre à jour" sous Windows et particulièrement avec Office.

Lorsque tu fais "ne pas mettre à jour" (screenUpdating = false), Word masque les mises à jour dans Word mais lance toutes les procédures d'affichage globales Windows (mise à jour des intitulés de fenêtre, mise à jour de l'application active dans la barre de tâche... et surtout Word repagine en arrière-plan dès que tu fais appel à des entêtes différentes) ==> donc presque à chaque section pour un doc normal. Bien sûr, il optimise mais le gain de temps n'est que de l'ordre de 7 à 8 alors que si tu arrives à dire à Windows de "ne pas faire voir", le gain est alors d'un facteur 12 à 35 (tests effectués une dizaine de fois sur différents documents de 80 à 750 pages avec des images et des tableaux).

Bien sûr, il y a aussi les options d'affichage (ne pas afficher les dessins, ne pas se mettre en mode page...) et de sauvegarde (ne effectuer de sauvegarde automatique), mais ça je pense que lorsque tu regardes des optimisations de traitement, c'est que ces paramètres ont déjà été virés. Mais le gain est relativement faible (facteur 2 à 4) alors que screenUpdating = false et surtout "ne pas faire voir" sont tellement plus importants

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 23h25   #9
Membre Expert
 
Avatar de JackOuYA
 
Inscription : juin 2008
Messages : 1 036
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 1 036
Points : 1 035
Points : 1 035
Bonsoir,

eu.... c'est un troll ce post ..?

Citation:
tu éteins ton écran.
Comment par le bouton marche/arrêt de celui-ci....



Jacques.
JackOuYA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 23h35   #10
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
Non, non, le but est que Windows (et pas seulement Word) ne fasse pas de rafraichissement d'écran ==> une des solutions est bien de l'éteindre.

Ce genre de truc n'est pas rare avec les macros en général, lorsqu'il s'agit de tâches répétitives qui ne nécessitent pas d'intervention humaine une fois lancées, comme des purges massives, des changements globaux, ou une compilation d'une doc (c'est souvent mon cas, on gère les doc des softs que l'on développe via une macro, elle-même lancée via ant qui génère le manuel utilisateur en multi-langues, intègre les fichiers des icônes pour les mises à jour, génère le site Web d'aide en ligne, lance la javadoc associée et l'intègre dans les différentes aides des softs que l'on embarque dans les notres. Ah oui, on la compile aussi en PDF ==> actuellement 750 pages en version française).

Donc non ce n'est pas un troll
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 09h28   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
En l'occurence, le document n'a pas à subir de modification. Pas de mise à jour, pas de gestion d'icônes, pas de compilation en pdf, une simple lecture des données qu'il contient. Je pense que dans ce cas on peut se contenter des méthodes classiques, wdApp.screenUpdating = false et wdApp.Visible = False.
Déjà, ça donnera une indication sur le gain de temps.
Il serait également intéressant de connaître le temps mis par word pour s'ouvrir.
Pour le déterminer, un message affiché sitôt l'application ouverte permettrait de savoir s'il n'est pas la cause principale de la lenteur observée.
Sur mon micro, lors de l'install, Word mettait moins de deux secondes pour s'ouvrir. Avec les mises à jour d'Office 2003 il met maintenant près de 30 secondes (!)
Word 97 persiste lui à s'ouvrir dans la seconde.
Je crois qu'Heureux Oli a parlé de ce phénomène quelque part mais je ne retrouve plus où.
Je verrais d'abord s'il ne s'agit pas de ça.
Bonne journée
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 12h27   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
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 364
Points : 29 286
Points : 29 286
On pourrais envisager de créer une nouvelle instance de Word sans plus, elle sera présente dans les processus de l'os, mais juste pour un traiement du document.
Et seulement à la fin du processus afficher cette instance.

C'est utiliser un soucis fréquent en avantage.
Pour preuve :

Code :
1
2
3
Sub TestInstanceDeWord()
Dim wApp as New Word.Application
End Sub
Il suffit d'aller dans le gestionnaire de tâche de Windows pour se rendre compte que Word tourne, mais n'est pas affiché.
__________________
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 24/06/2008, 17h01   #13
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
J'abonde !
Mais si cette application est en tâche de fond, donc lancée par une autre appli, pour récupérer l'application, on fait comment ? pour lui dire au bon moment, "va ouvrir le fichier.doc de mes voeux !"
Je sais que ça peut se faire pour la fermer, donc certainement pour l'utiliser aussi, mais depuis que j'ai nettoyé mon disque dur, je n'ai plus la syntaxe
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 17h08   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 364
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 364
Points : 29 286
Points : 29 286
C'est pas trop compliqué, il suffit au bon moment de faire un .Visible = True

Je ne sais plus comment mais on peut lors de la création de l'objet Word récupérer son ID et l'ouvrir par cet ID.
__________________
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 24/06/2008, 17h25   #15
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par Heureux-oli
C'est pas trop compliqué, il suffit au bon moment de faire un .Visible = True
Oui, ça c'est si tu lances l'appli depuis la même appli que celle qui ouvre le doc.

Citation:
Envoyé par Heureux-oli
Je ne sais plus comment mais on peut lors de la création de l'objet Word récupérer son ID et l'ouvrir par cet ID.
Effectivement, c'est ça que je n'ai plus
Bon, il va falloir que j'aille fouiller mon "vieux" disque dur si je veux retrouver la syntaxe... Ben ce ne sera pas ce soir.
ouskel'n'or 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 03h05.


 
 
 
 
Partenaires

Hébergement Web