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

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
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 4 140
    Points : 10 574
    Points
    10 574
    Billets dans le blog
    28
    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".
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

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

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 4 140
    Points : 10 574
    Points
    10 574
    Billets dans le blog
    28
    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 ?
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

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

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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
    Expert éminent

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

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 862
    Points : 9 986
    Points
    9 986
    Billets dans le blog
    34
    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
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 4 140
    Points : 10 574
    Points
    10 574
    Billets dans le blog
    28
    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
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  9. #9
    Expert éminent

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

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 862
    Points : 9 986
    Points
    9 986
    Billets dans le blog
    34
    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 : 16
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
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 4 140
    Points : 10 574
    Points
    10 574
    Billets dans le blog
    28
    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 :
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  12. #12
    Expert éminent

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

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

    Informations forums :
    Inscription : janvier 2012
    Messages : 4 862
    Points : 9 986
    Points
    9 986
    Billets dans le blog
    34
    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
    Expert éminent sénior

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    4 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

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

    Informations forums :
    Inscription : avril 2013
    Messages : 4 140
    Points : 10 574
    Points
    10 574
    Billets dans le blog
    28
    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.
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  14. #14
    Membre éprouvé
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    mai 2004
    Messages
    818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : mai 2004
    Messages : 818
    Points : 1 017
    Points
    1 017
    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)
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan
    Développeur de marknotes, logiciel de gestion de prises de notes : https://github.com/cavo789/marknotes
    Mes logiciels OpenSource : https://www.avonture.be

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

    Informations forums :
    Inscription : mars 2009
    Messages : 81
    Points : 47
    Points
    47
    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