IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Vérification si document déjà ouvert


Sujet :

VBA Word

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut Vérification si document déjà ouvert
    Bonjour,

    Comme c'est indiqué dans le titre, je souhaite vérifier si un document Word est déjà ouvert (avant de l'ouvrir par macro depuis Excel).

    J'ai vu la solution que propose SilkyRoad :
    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
    16
    17
    18
     
    Sub ControleSiDocumentWordOuvert()
        Dim Appli As Word.Application
        Dim WordDoc As Word.Document
     
        'nécéssite d'activer la reference Microsoft word xx.x 0bject Library
        On Error Resume Next
        Set Appli = GetObject(, "Word.Application")
        Set WordDoc = Appli.Documents("C:\Documents and Settings\dossier\monFichier.doc")
        On Error GoTo 0
     
        If WordDoc Is Nothing Then
            MsgBox "Le document est fermé"
            Else
            MsgBox "Le document est ouvert"
            'WordDoc.Close 'fermeture application Word
        End If
    End Sub
    mais elle ne me convient pas car selon moi l'erreur peut aussi venir du fait que le document n'est pas à l'emplacement désiré (ou que le nom du fichier a changé)...

    Je souhaitais donc faire quelque chose du genre (adapté depuis un code qui fonctionne pour le test avant l'ouverture d'un document Excel) mais je ne parviens pas à trouver le fichier quand il est ouvert. J'ai l'impression que le programme ne rentre pas dans la boucle for...
    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
    16
    17
    18
    19
    20
    21
    22
        Dim wordDoc As WORD.Document
        Dim wordApp As WORD.Application
        chemin = ThisWorkbook.Path ' Nom du chemin pour accéder au dossier de l'opération
        Set wordApp = CreateObject("Word.Application")
        DoEvents 'laisse le temps à l'application de s'ouvrir
        existe_deja = False
        For Each wordDoc In GetObject(, "Word.Application").Documents ' vérification que le fichier ne soit pas déjà ouvert
            If wordDoc.Name Like "*" & temp_att_ac & "*" Then ' temp_att_ac : nom du rapport type
                MsgBox ("Veuillez fermer le rapport type.")
                existe_deja = True
            End If
        Next wordDoc
     
        If existe_deja = False Then
            On Error GoTo AbsDoc
            Set wordDoc = wordApp.Documents.Open(chemin & "\" & dossier_temp & "\" & temp_att_ac & ".docx") ' Ouvre le rapport type
            On Error GoTo 0 ' arrêt de la gestion d'erreur associée à l'ouverture du fichier
    [...code...]
        End If
     
    AbsDoc:
        MsgBox ("ERREUR : Impossible de trouver le rapport type à l'emplacement suivant : " & chemin & "\" & dossier_temp & "\" & temp_att_ac & ".docx")
    Auriez-vous des pistes pour vérifier que le document existe bien à l'emplacement donné et qu'il n'est pas ouvert ?

    Merci d'avance.

    Bonne journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Par défaut
    Salut,

    Moins simple qu'il n'y parait.

    Une boucle sur les documents ouverts ne va fonctionner que pour une seule instance de Word.
    Si tu as plusieurs instances, il faut le faire pour toutes les instances.
    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 !

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Bonjour Heureux-oli et merci pour l'intérêt porté à ma question.

    Citation Envoyé par Heureux-oli Voir le message
    Si tu as plusieurs instances, il faut le faire pour toutes les instances.
    Comment pourrais-je réaliser cette boucle ?

    Avec le code que j'ai présenté ci-dessus, même lorsque 1 seul fichier Word est ouvert (et que c'est justement mon rapport type), il ne parvient pas à le trouver...

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Personne n'aurait une petite piste ?

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Déjà éviter d'ouvrir plusieurs sessions de Word, aucun intérêt ‼

    Ensuite pour vérifier si un document d'un dossier particulier est ouvert,
    c'est du niveau débutant pour peu de consulter les propriétés de l'objet Document !
    Excel ou Word, même combat, tout est à portée de clic dans l'aide interne !
    Même pas besoin d'aller sur un forum …

    Donc je te laisse les consulter et une fois la propriété trouvée,
    ce n'est vraiment pas compliqué d'effectuer la comparaison …

    ______________________________________________________________________________________________________
    L'effort fait les forts …

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Bonjour Marc-L et merci pour ton intervention... Tes remarques suscitent plusieurs interrogations :
    Citation Envoyé par Marc-L Voir le message
    Déjà éviter d'ouvrir plusieurs sessions de Word, aucun intérêt ‼
    Je n'en ouvre qu'une, mais je suis pas à l'abri que l'utilisateur en ai ouvert manuellement d'autres avant, c'est pour cela que je souhaite vérifier que le document n'est pas ouvert dans aucune des sessions Word.

    Citation Envoyé par Marc-L Voir le message
    Ensuite pour vérifier si un document d'un dossier particulier est ouvert,
    c'est du niveau débutant pour peu de consulter les propriétés de l'objet Document !
    Excel ou Word, même combat, tout est à portée de clic dans l'aide interne !
    Même pas besoin d'aller sur un forum …
    Eh bien je n'ai même pas le niveau débutant puisque ma tentative ci-dessus ne fonctionne pas pour détecter uniquement si un fichier est ouvert ou non
    C'est pourquoi je me permettais de solliciter l'aide généreuse sur ce forum !

    D'avance merci,

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Différentes possibilités en moins de dix lignes de code, voire même moitié moins mais pas mieux que celle de SilkyRoad !

    Comme la présentation initiale est contradictoire, cette fois en clair, quel est le besoin ?
    Accompagné d'un exemple concret du contexte …

  8. #8
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 130

  9. #9
    Membre confirmé
    Homme Profil pro
    Ingénieur acousticien
    Inscrit en
    Septembre 2015
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur acousticien
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Septembre 2015
    Messages : 122
    Par défaut
    Bonjour et merci pour votre participation.

    Je vais préciser mes besoins :
    - depuis Excel, je souhaite ouvrir un document Word qui contient des signets que je vais remplacer par du contenu tiré de mon fichier Excel. Je vais ensuite enregistrer ce document Word sous un autre nom pour garder vierge mon document Word type (contenant les signets).
    - les fichiers Word "types" sont positionnés dans un dossier dont je connais la position relativement au chemin du fichier Excel.

    Avant l'ouverture du fichier Word et dans l'objectif de ne pas produire d'erreur qui arrête le programme, je souhaite :
    1) Vérifier que le document Word existe bien à l'emplacement prévu, sinon : en avertir l'utilisateur
    2) Vérifier que le document Word n'est pas déjà ouvert (d'autres cessions Word peuvent être en cours d'utilisation), sinon : en avertir l'utilisateur

    Je souhaiterais donc bien dissocier ces deux problèmes lors de l'avertissement de l'utilisateur (qui aura soit déplacé le dossier contenant le document Word type soit ouvert ce même document). Les solutions que j'ai trouvé pour l'instant ne me semble pas faire cette différence (y compris celle de kiki29)... Le problème concernant la tentative d'ouverture d'un fichier déjà ouvert est que l’exécution du code VBA dans Excel se bloque mais aucun message d'erreur n'apparaît...

    J'avoue être un peu perdu, merci d'avance pour votre aide !

  10. #10
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 130
    Par défaut
    Salut, voir Manipulation des fichiers en VBA avec FileExists ou via un Dir

    Pour le reste voir lien plus haut


    P.-S.: à lire

  11. #11
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    1) Via la fonction VBA Dir : elle ne renvoie rien si le fichier n'existe pas.

    2) C'est exactement la fonction de SilkyRoad ! Certes dans une session unique …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Atteindre un signet d'un document Word ouvert à partir d'Excel
    Par tgaumont dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/09/2012, 14h17
  2. Liste des documents récemment ouverts
    Par frantzgac dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 21/01/2009, 00h59
  3. Réponses: 6
    Dernier message: 07/08/2008, 18h29
  4. [VBA-W] Faire une fusion dans un document ouvert
    Par zahui_eric dans le forum VBA Word
    Réponses: 6
    Dernier message: 22/01/2007, 12h41
  5. [VB6] Savoir depuis VB, si un document Excel est ouvert
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h16

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