1. #1
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut Creer un Object Word Application - ouvrir un document et lui donner le focus à l'écran

    Bonjour,

    Je bute sur un problème et je ne parviens pas à trouver comment donner le focus à un document word lancé par le script en VB6.
    Une explication qlq mots :
    - une application web lance la commande d'ouverture d'un document word particulier stocké sur un serveur Unix
    - l'exécutable en VB6 qui écoute (avec un timer lit tous les 3'' si un file est lancé) lance le document à l'ouverture situé sur un lecteur réseau mappé sur le serveur Unix
    - Cet exe en vb6 crée un objet "word.application" et un objet word.document à partir de l'objet word.application
    - ce document est ouvert et doit arrivé au devant de l'écran devant tous les autres fenêtres.
    --> le document est bien ouvert mais toujours derrière le browser (IExplore) jamais devant toutes fenêtres

    !!! Je remarque que le document apparaît toujours en deuxième position au niveau de l'écran quel que soit le programme au premier niveau (donc pas seulement le browser)

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
            Dim objWord As Word.Application
            Dim DocWord As Word.Document
            Dim fichier As String
     
            '''fichier = le nom du document 
     
                Set objWord = CreateObject("Word.Application")    '-- ouvrir une session Word
                Sleep 100
                Set DocWord = objWord.Documents.Open(fichier)    '-- ouvrir le document Word
                Sleep 100
                objWord.WindowState = wdWindowStateMaximize
                Sleep 100
                DocWord.Activate
    Merci pour votre aide

    Bien à vous

    Carmelo

  2. #2
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 109
    Points : 8 159
    Points
    8 159

    Par défaut

    Salut

    Sleep 100 ?
    Es tu sûr de programmer en VB6 et non en VBA, sinon vois ce lien, Comment savoir si l'on utilise VBA ou VB6 ?
    Si vraiment en VB6 et antérieur, remplace Sleep par DoEvents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                Set objWord = CreateObject("Word.Application")    '-- ouvrir une session Word
                DoEvents
                Set DocWord = objWord.Documents.Open(fichier)    '-- ouvrir le document Word
                DoEvents
                objWord.WindowState = wdWindowStateMaximize
                DoEvents
                DocWord.Visible = True
                DocWord.Activate

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour et merci pour la réponse.
    Penses-tu que le fait de changer sleep par DoEvents va changer le comportement ?
    Je vais essayer de suite et te tiens au courant.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    @ ProgElecT
    J'ai changé mes sleep par DoEvents mais cela n'a rien donné comme changement dans le comportement
    Merci encore

  5. #5
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 109
    Points : 8 159
    Points
    8 159

    Par défaut

    Re

    N'ayant pas répondu à la question
    Es tu sûr de programmer en VB6 et non en VBA
    Je considère que tu es sous VB6 et antérieur.
    Dans ce cas, regardes du coté du dernier post de cette discussion Maximiser, Minimiser, Restaurer une fenêtre windows .
    Vue que tu es inscrit depuis 2006, je pense que tu sauras tirer ce qu'il te faut du code pour l'adapter à ton besoin.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour.
    Merci pour la réponse.
    J'étais en congé, j'en reviens.
    Oui, je travaille en VB6
    Je vais tester cela et vous tiens au courant.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour Proelect

    Après quelques adaptations, ton aide a été déterminante, surtout l'exemple dans le site

    j'ajouterai juste un élément : attention au libellé du titre dans les documents Word, ils changent d'une version à l'autre.
    Pour avoir le libellé exact, après nom du fichier il faut ajouter :
    - Dans Word 2010 : " - Microsoft Word"
    - Dans Word 2013 : " - Word"

    Un grand merci

    Carmelo

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour ProgElect,

    La solution semblait bonne mais un problème se pose :
    pas moyen de faire perdre le niveau supérieur à ce document Word ouvert et lancé par le script en question.
    Je voudrais pouvoir travailler sur d'autres document Word, mais à part le minimaliser complètement, je ne peux pas le réduire pour le mettre (par exemple) cote à côte d'un autre (copier/coller du contenu, par exemple).
    J'ai essayé toutes les options de :
    ... mais sans succes !

    Merci de votre aide

    Carmelo

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour

    Je me permets de relancer la discussion car cela semble quand même poser quelques problèmes.

    Le lien de ProgElect https://www.developpez.net/forums/d1...s/#post9493816
    fonctionne bien ... sauf que je ne peux plus par la suite, remettre en focus les autres documents ou programme.
    Le document Word lancé par la méthode décrite garde constamment le focus ...

    Y a-t-il possibilité de lui retirer par la suite sans instancier de nouveau un objet Word Application ?

    En d'autre mots, comment fonctionne Windows lorsqu'il lance une application, celle-ci prend le focus mais le perd dès qu'une autre application ou document est sélectionné ...

    Merci

    Cpf

  10. #10
    Rédacteur/Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    décembre 2004
    Messages
    4 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : décembre 2004
    Messages : 4 109
    Points : 8 159
    Points
    8 159

    Par défaut

    Salut
    Citation Envoyé par cpf2006 Voir le message
    Bonjour
    ..................
    Y a-t-il possibilité de lui retirer par la suite sans instancier de nouveau un objet Word Application ?
    En d'autre mots, comment fonctionne Windows lorsqu'il lance une application, celle-ci prend le focus mais le perd dès qu'une autre application ou document est sélectionné ...
    Merci
    Cpf
    Oui
    En jouant sur le 2éme paramètre de la fonction SetWindowPos de la fenêtre du programme que tu veux mettre à une position normale
    Si la variable Profondeur = HWND_TOPMOST, la fenêtre est toujours au premier plan, si Profondeur = HWND_NOTOPMOST, la fenêtre ne sera au premier plan que si elle est active.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        SetWindowPos Me.hwnd, Profondeur, Me.Left / 15, _
                            Me.Top / 15, Me.Width / 15, _
                            Me.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
    Je n'ai pas fait l'essai, mais lors de la mise au premier plan lors de la première fois pour la faire apparaitre, il doit être possible d'activer cette fenêtre au premier plan ( Profondeur = HWND_TOPMOST), puis de repasser immédiatement à un plan normal en repassant la commande SetWindowPos avec le 2éme paramètre Profondeur = HWND_NOTOPMOST.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour ProgElect

    Merci pour les infos.
    Je pense l'avoir déjà essayé et cela n'a pas enlevé le focus principal au document.
    Donc lancer la commande " SetWindowPos" une fois en profondeur = HWND_TOPMOST et une deuxième juste après avec profondeur = HWND_NOTOPMOST,
    Mais je vais le retester de nouveau et te tiens au courant.

    Merci encore

    Cpf

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    décembre 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : décembre 2006
    Messages : 193
    Points : 60
    Points
    60

    Par défaut

    Bonjour

    Ca marche !!!

    "SetWindowPos" c'est ce qu'il me fallait !

    Merci encore ProgElect

    Cpf

Discussions similaires

  1. Word lent à ouvrir un document
    Par offspring dans le forum VSTO
    Réponses: 1
    Dernier message: 26/12/2011, 16h37
  2. Failed to create COM object word.application: Accès refusé
    Par groovyroe dans le forum Bureautique
    Réponses: 2
    Dernier message: 10/05/2009, 17h46
  3. [Word] Comment ouvrir un document word avec PHP ?
    Par jojoquiasa dans le forum Bureautique
    Réponses: 4
    Dernier message: 17/07/2007, 16h10
  4. Réponses: 7
    Dernier message: 21/06/2006, 14h03
  5. Ouvrir un document word dans une application java
    Par serialkilled dans le forum APIs
    Réponses: 14
    Dernier message: 02/06/2006, 18h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo