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érifier l'ouverture d'un fichier excel [WD-2016]


Sujet :

VBA Word

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut Vérifier l'ouverture d'un fichier excel
    Bonjour,

    Je bosse sur des macros word. J'aimerais parcourir les tableaux excel ouverts pour vérifier si celui dont j'ai besoin est déjà ouvert ou pas.

    J'ai écris une macro toute simple pour ça, mais elle ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function IsOpen(fichier) As Boolean
     
        Dim Wb As Excel.Workbook
        For Each Wb In Excel.Workbooks
            If Wb.Name = fichier Then
                IsOpen = True
                Exit For
            End If
        Next Wb
        If Wb Is Nothing Then
            IsOpen = False
        End If
    End Function
    En gros, même si j'ai mon fichier ouvert à côté, le code ne rentre pas dans la boucle for et me renvoie "False".

    Je précise que j'ai activé la librairie Excel dans Word bien sûr.

    Une idée ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    Bonjour,

    C'est normal, il faudrait pour cela que votre fichier ait été ouvert dans une instance Excel créée depuis votre fichier Word.
    Je n'ai pas testé, mais l'essai d'ouverture d'un fichier déjà ouvert devrait provoquer, je suppose, un message du type "Ouverture du fichier en lecture seule".

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Bonjour Eric et merci pour votre célérité

    Je ne comprends pas bien. Comment fait-on depuis word pour écrire dans un fichier excel déjà ouvert (que ce soit par une macro de ce dit fichier word, ou à la main par l'utilisateur) ?

    En fait, pour expliquer le contexte, j'aimerais créer un fichier excel qui contiendra de manière convivial des paramètres utiles au fichier word. Et l'utilisateur pourra soit l'ouvrir pour les modifier à la main, soit activer des macros qui feront les écritures/lectures dans ce fichier de paramètres automatiquement. Du coup, je voudrais éviter les conflits dans le cas où l'utilisateur a ouvert le fichier et qu'une macro essaie d'écrire dedans par la suite.

    Je pensais faire un truc simple, comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub ChangeParameters()
        chemin = ThisDocument.Path
        Dim appXl As Excel.Application
        Dim Wb As Excel.Workbook
     
        If IsOpen(PARAMETERS_FILE) Then
            Excel.Workbooks(PARAMETERS_FILE).Activate
        Else
            Set appXl = CreateObject("Excel.Application")
            appXl.Visible = True
            Set Wb = appXl.Workbooks.Open(chemin & "\" & PARAMETERS_FILE)
        End If
    End Sub
    (avec la fonction "IsOpen" décrite dans mon message précédent)

    Je comprends que ça ne fonctionne pas comme ça, mais du coup je ne sais pas quoi faire, c'est comme si VBA WORD ne "voyait" pas les fichiers excel ouverts.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    Vous êtes dans la même situation qu'avec un fichier partagé sur un serveur où plusieurs personnes essaient de l'utiliser.
    Avez-vous essayé d'ouvrir votre fichier (déjà ouvert) depuis votre instance Excel créée dans Word ? Avez-vous un message ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Quand je l'ouvre depuis word alors qu'il est déjà ouvert, il s'ouvre sans message, mais en lecture seule (donc impossible à modifier).

    Je viens d'essayer cette méthode, qui ne fonctionne pas non plus :

    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
    Sub ChangeParameters()
        chemin = ThisDocument.Path
        Dim appXl As Excel.Application
        Dim Wb As Excel.Workbook
     
        On Error Resume Next
        Set appXl = GetObject(, "Excel.Application")
        Set Wb = appXl.Workbooks(chemin & "\" & PARAMETERS_FILE)
        On Error GoTo 0
     
        If Wb Is Nothing Then
            MsgBox "Le document est fermé"
            'code pour l'ouvrir
        Else
            MsgBox "Le document est ouvert"
            'code pour l'activer simplement
        End If
     
    End Sub

  6. #6
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Citation Envoyé par DarkGriffin Voir le message
    Quand je l'ouvre depuis word alors qu'il est déjà ouvert, il s'ouvre sans message, mais en lecture seule (donc impossible à modifier).
    C'est juste normal. Ceci étant dit c'est une idée impraticable pour une chose. On peut avoir plus d'une instance d'Excel ouverte à la fois et plus d'une instance de Word d'ouverte à la fois. On peut repêcher une instance ouverte avec GetObject au lieu de CreateObject.

    Mais pour de vulgaires paramètres, rien de mieux que le Registre (SaveSetting et GetSetting ou l'API Windows ou un vieux fichier ini (API Windows).

    Mais pourquoi permettre la modification d'un fichier de paramètres en cour d'utilisation ? C'est du délire.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    L'utilisateur veut extraire des infos du fichier word, les modifier dans un fichier excel, puis les réintégrer dans le fichier word. Il veut aussi, entre autres, ecrire une liste de mots à souligner par exemple, liste qu'il abondera en direct sur le fichier excel et voudrait voir souligner dans le word en fonction de ses modifications.

    Ma question est très simple sur le papier : comment récupérer les infos d'un fichier excel depuis word, qu'il soit instancié par ce fichier word ou non ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    Testez ce code, pour répondre strictement à votre question d'origine, mais prenez la précaution de sauvegarder votre fichier Excel sous un autre nom avant...
    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
     
    Sub Test()
     
    Dim CheminComplet As String
    Dim appXl As Excel.Application
    Dim Wb As Excel.Workbook
     
        CheminComplet = ThisDocument.Path & "\" & "......xlsx"
        Set appXl = CreateObject("Excel.Application")
        With appXl
               Set Wb = .Workbooks.Open(CheminComplet)
               If Wb.ReadOnly Then
                  MsgBox "Le document est ouvert"
               Else
                  MsgBox "Le document est fermé"
               End If
               Wb.Close savechanges:=False
               Set Wb = Nothing
        End With
        appXl.Quit
        Set appXl = Nothing
     
    End Sub

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    L'utilisateur veut extraire des infos du fichier word, les modifier dans un fichier excel, puis les réintégrer dans le fichier word. Il veut aussi, entre autres, ecrire une liste de mots à souligner par exemple, liste qu'il abondera en direct sur le fichier excel et voudrait voir souligner dans le word en fonction de ses modifications.

    Ma question est très simple sur le papier : comment récupérer les infos d'un fichier excel depuis word, qu'il soit instancié par ce fichier word ou non ?
    Franchement ! tout ce qu'il faut faire c'est insérer un objet Excel, ou même juste une feuille Excel dans le document Word et mettre ses informations dans la feuille Excel. UN double-clic sur sa feuille et il a accès à Excel directement. Cela date probablement d'Excel 5 et de Word 6 ou avant.

    Et c'est de l'OLE élémentaire, tellement c'est une question facile.

    Nom : InsertionObjet.jpg
Affichages : 460
Taille : 182,5 Ko
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Merci pour vos réponses, je vais regarder ce que je peux faire avec ça.

    Donc si je comprends bien, il n'y a aucun moyen, à partir d'une macro Word, d'interagir avec un fichier excel déjà ouvert (et non instancié par word) ? Ça me semble dingue quand même.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    L'utilisateur veut extraire des infos du fichier word, les modifier dans un fichier excel, puis les réintégrer dans le fichier word. Il veut aussi, entre autres, ecrire une liste de mots à souligner par exemple, liste qu'il abondera en direct sur le fichier excel et voudrait voir souligner dans le word en fonction de ses modifications.
    Pour info, sur mon blog :

  12. #12
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par DarkGriffin Voir le message
    Merci pour vos réponses, je vais regarder ce que je peux faire avec ça.

    Donc si je comprends bien, il n'y a aucun moyen, à partir d'une macro Word, d'interagir avec un fichier excel déjà ouvert (et non instancié par word) ? Ça me semble dingue quand même.
    GetObject dans l'aide ou sur MSDN
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    GetObject dans l'aide ou sur MSDN
    Je viens de tester GetObject comme indiqué par Clément avec l'exemple dans l'aide en ligne : cela marche nickel.

    Merci Clément.

  14. #14
    Membre émérite
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 756
    Points : 2 990
    Points
    2 990
    Par défaut
    Bonjour


    En programmation VBA, il est possible en effet de détecter si un fichier est déjà ouvert en Excel. J'ai développé une fonction IsLoaded qui fait exactement cela; voici le code source : https://github.com/cavo789/vbs_class....vbs#L424-L499


    Le code proposé permet de vérifier si un fichier .xlsx est chargé ou pas mais aussi un addin (.xlam) ce qui complexifie un tout petit peu le code.


    La variable oApplication est initialisée par un Set oApplication = GetObject(,"Excel.Application"); cela dans la fonction Instanciate qui se trouve dans le script proposé.


    Bonne journée et bonne programmation.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 92
    Points : 48
    Points
    48
    Par défaut
    Merci à vous tous pour vos réponses. Avec tout ça, j'ai de quoi résoudre mon problème. Bonne journée !

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

Discussions similaires

  1. Ouverture d'un fichier excel predefini
    Par nberthonneau dans le forum Access
    Réponses: 10
    Dernier message: 13/06/2007, 22h14
  2. problème d'ouverture d'un fichier EXCEL!!
    Par JauB dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/11/2005, 13h37
  3. Ouverture d'un fichier Excel en VBA par Access
    Par illight dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 11h14
  4. Réponses: 2
    Dernier message: 06/04/2005, 12h01
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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