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

Macros et VBA Excel Discussion :

Savoir si un fichier word est ouvert


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Points : 28
    Points
    28
    Par défaut Savoir si un fichier word est ouvert
    Bonjour,

    Je souhaiterais faire une fonction qui permettrait de savoir si un fichier word est ouvert. Cette fonction doit s'exécuter sous excel.

    J'ai trouvé sur le site une fonction qui permet de savoir si une session word est ouverte. Je pense que ça pourrait servir, mais je n'ai pas trop compris comment ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Function IsWordOpen() As Boolean
        Dim objWord As Word.Application
        On Error Resume Next
        Set objWord = GetObject(, "Word.Application")
        IsWordOpen = Not objWord Is Nothing
        Set objWord = Nothing    '-- détruire l'objet Word
    End Function
    Je m'en remets donc à votre perspicacité

    Merci !

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Correction de mon précédent post :
    Cette fonction te retourne un boolean qui te dis si word est ouvert, pas si le fichier est ouvert.
    A+

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Oui, ça j'avais compris . Je me demande juste comment modifier cette
    fonction pour savoir si un fichier word est ouvert.

    Disons que si ma fonction s'exécutait sous Word, je ne pense pas que j'aurai
    eu de problème car j'aurai tout simplement parcouru l'ensemble des fichiers
    Word ouverts puisqu'il y en aurait au moins un d'ouvert ( celui qui lance la macro).

    Mais à partir d'Excel, je ne vois pas. Ou alors en exécutant la fonction, j'ouvre un fichier Word pour pouvoir utiliser la technique du dessus. Mais c'est moche .

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tiens, j'ai fait ça dans une simple sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub VerifierFichierWordOuvert()
    Dim objWord As Word.Application
    Dim c As Document
    On Error Resume Next
    Set objWord = GetObject(, "Word.Application")
    If Not objWord Is Nothing Then
        Set c = objWord.ActiveDocument
        if not c is nothing then 
             MsgBox c.Name
             Set c = Nothing
        endif
    End If
    Set objWord = Nothing '-- détruire l'objet Word
    End Sub
    Après, tu adaptes

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    Pour vérifier depuis Excel si un fichier Word est ouvert:


    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
    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\mimi\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


    bonne journée
    michel

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tiens, je te l'ai mis sous forme de fonction
    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
    Sub VerifFichierWordOuvert()
    Dim NomFich
    NomFich = Inputbox("Saisir le nom du document word")
    MsgBox "Le fichier " & NomFich & " est-il ouvert = " & TestWord(NomFich)
    End Sub
     
    Function TestWord(NomFich) As Boolean
    Dim objWord As Word.Application
    Dim doc As Document
        On Error Resume Next
        Set objWord = GetObject(, "Word.Application")
        If Not objWord Is Nothing Then
            Set doc = objWord.ActiveDocument
            If Not doc Is Nothing Then
                 TestWord = UCase(doc.Name) = UCase(NomFich)
                 Set doc = Nothing 'supprime l'objet doc
            End If
        End If
        Set objWord = Nothing '-- détruire l'objet Word
    End Function
    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Une autre manière de procéder si tu veux connaître tous les documents Word ouverts
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub ListerLesDocOuvertsDansWord()
    Dim objWord As Word.Application
    Dim i As Byte
        On Error Resume Next
        Set objWord = GetObject(, "Word.Application")
        If Not objWord Is Nothing Then
            For i = 1 To objWord.Documents.Count
                MsgBox objWord.Documents(i).Name
            Next
        End If
        Set objWord = Nothing '-- détruire l'objet Word
    End Sub
    Faut m'arrêter sinon je continue

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Ok merci, j'avais pas vu tous ces messages

    J'ai bossé le truc avec ton premier code et ça fonctionne.

    Voilà le 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
    16
    17
    18
    19
    Function TEST_FICHIER_WORD_OUVERT(nom_fichier As String, AppWord As Word.Application) As Boolean
        Dim DocWord As Document
     
        ' Initialisation
        TEST_FICHIER_WORD_OUVERT = False
     
        ' Parcours de tous les fichiers ouverts
        For i = 1 To AppWord.Documents.Count
            Set DocWord = AppWord.Documents(i)
     
            ' Recherche du fichier
            If DocWord.Name = nom_fichier Then
                TEST_FICHIER_WORD_OUVERT = True
            End If
     
            Set DocWord = Nothing
        Next
     
    End Function

    puis dans le programme principal :

    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
    23
    24
     
        Dim AppWord As Word.Application
        Dim fichier_ouvert As Boolean
        Dim word_ouvert As Boolean
     
        On Error Resume Next
     
        ' Initialisation
        word_ouvert = False
     
        Set AppWord = GetObject(, "Word.Application")
     
        ' Test pour voir si Word est ouvert
        If Not AppWord Is Nothing Then
            word_ouvert = True
        End If
     
        ' Cas où Word est ouvert
        If word_ouvert = True Then
     
            ' Test pour voir si le fichier word est ouvert
            fichier_ouvert = TEST_FICHIER_WORD_OUVERT(nom_fichier, AppWord)
     
       end if

    Donc ça fonctionne, même dans le cas où Word est ouvert mais qu'aucun fichier ne l'est : la boucle de parcours des fichiers ouverts ne sera pas traitée
    car i sera égal à 0. Donc fichier_ouvert vaudra faux .


    Merci pour votre aide

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Ah oui j'aurais encore une autre question mais rien à voir avec ça .

    Sur une feuille j'ai un CommandButton et le problème c'est que quand je supprime ( où que je rajoute ) des lignes, le CommandButton monte ou descend.

    Y a t'il une propriété pour éviter ça ?

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par enchanté Voir le message
    Ok merci, j'avais pas vu tous ces messages

    J'ai bossé le truc avec ton premier code et ça fonctionne.
    ...
    Donc ça fonctionne, même dans le cas où Word est ouvert mais qu'aucun fichier ne l'est : la boucle de parcours des fichiers ouverts ne sera pas traitée
    car i sera égal à 0. Donc fichier_ouvert vaudra faux .
    Tu n'as pas besoin de faire un test sur l'ouverture de l'application, On error resume next sert déjà à ça. Si pas d'appli -> erreur -> test sur le doc -> Erreur -> Doc = Nothing (dans mon code) -> Et tu sors de la fonction avec False (par défaut)
    Tu devrais tester

    Pour ta dernière question, dans EXCEL, tu sélectionnes ton bouton, Menu Format -> Contrôle -> Propriétés -> Tu valides "ne pas déplacer ni dimensionner avec les cellules"
    A+

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 29
    Points : 28
    Points
    28
    Par défaut
    Ok, d'accord je me demandais bien à quoi il pouvait servir.

    Merci encore pour l'astuce des boutons.

    A une prochaine peut être ! J'ai bientôt fini mon stage, donc bye bye le VBA

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 140
    Points : 77
    Points
    77
    Par défaut
    Bonjour Ouskel,

    J'ai voulu utiliser ta fonction en la mettant dans un module (pour ne pas avoir à la réécrire dans chaque pgm) et j'ai un petit soucis de fonctionnement. Pourrais-tu me dire ou ca cloche ?
    Voici le module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public objWord As Word.Application
    Public objDocumentW(5) As Word.document
     
    Public Function IsWordOpen() As Boolean
        On Error Resume Next
        Set objWord = GetObject(, "Word.Application")
        IsWordOpen = Not objWord Is Nothing
        Set objWord = Nothing '-- détruire l'objet Word
    End Function
    et le pgm l'appelant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If ModG.IsWordOpen = False Then
           Set objWord = CreateObject("Word.Application")
    End If
     
    K = K + 1
    If K < 6 Then
        Set objDocumentW(K) = objWord.Documents.Open(RepertoiresDoc &              CheminDoc(0) & Doc(0))
        objWord.Visible = True
    End if
    ModG est le nom du module. En faite ca marche pour ouvrir un premier document mais pas un second !
    J'ai testé en mettant ta fonction à l'intérieur du pgm (donc sans appel à un module), et là ca marche !

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 140
    Points : 77
    Points
    77
    Par défaut
    J'ai trouvé, en faite il me faut mettre
    "Set objWord = Nothing " en commentaire.
    Car cela fonctionne la première fois mais dès le 2ieme test, effectivement on detecte bien qu'une appli word est déjà ouverte MAIS juste derrière je la détruit avec "Set objWord = Nothing", hors je veux la garder ouverte.

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

Discussions similaires

  1. [XL-2007] comment savoir si mon fichier excel est ouvert avec excel en anglais?
    Par nath-0-0 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/05/2010, 15h28
  2. Verifier qu'un fichier Word est ouvert à partir de VBA Excel
    Par dimitrios dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 07/01/2009, 17h37
  3. Comment savoir si un fichier Excel est ouvert en lecture seul
    Par patate5555 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/06/2007, 13h53
  4. Savoir si un fichier texte est ouvert ?
    Par devl83 dans le forum Administration système
    Réponses: 4
    Dernier message: 22/05/2007, 17h00
  5. savoir si un fichier excel est ouvert
    Par toytoy18 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2006, 10h12

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