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 :

Détecter si un fichier est ouvert(VBA)


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut Détecter si un fichier est ouvert(VBA)
    Bonjour savez vous comment detecter si un fichier excel est ouvert. Je veux créer un programme disant si ExcelVba ouvert alors ... sinon ouvrir fichier ExcelVba.
    Merci d'avance,
    Cordialement, Thomas

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

    Une solution possible avec cette 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
     
    Function VerificationFichierOuvert(ByVal NomFichier As String) As Boolean
     
    Dim WbEnCours As Workbook
     
        VerificationFichierOuvert = False
        If Workbooks.Count = 0 Then
           Exit Function
        Else
           For Each WbEnCours In Application.Workbooks
               If WbEnCours.Name = NomFichier Then VerificationFichierOuvert = True
           Next WbEnCours
        End If
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub TestVerificationFichierOuvert()
        MsgBox VerificationFichierOuvert("A.xlsm")
    End Sub
    Nb : Ce bout de code peut paraître complètement c..., mais il sert dans des macros complémentaires .xlam depuis le menu excel et il n'y a pas toujours des fichiers ouverts.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        If Workbooks.Count = 0 Then
           Exit Function
        ....

  3. #3
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    savoir :
    - s'il est ouvert dans la même instance de Excel
    ou
    - s'il est ouvert par n'importe quelle instance de Excel
    ???
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  4. #4
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    J'avais fait ceci pour PC/MAC (à voir - un petit retour serait cool ) :
    https://www.developpez.net/forums/d1...uer-procedure/
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par unparia Voir le message
    Bonjour
    savoir :
    - s'il est ouvert dans la même instance de Excel
    ou
    - s'il est ouvert par n'importe quelle instance de Excel
    ???
    Juste ouvert sur le pc actuel donc je suppose que c'est sur la meme instance Excel

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par RyuAutodidacte Voir le message
    Bonjour,

    J'avais fait ceci pour PC/MAC (à voir - un petit retour serait cool ) :
    https://www.developpez.net/forums/d1...uer-procedure/
    salut merci bcp mais ton code est trop "lourd" et je n'ai pas les connaissances pour le réduire et l'optimiser a mes besoins. J'ai essayé d'intégrer ton code au mien et il met enormement de temps a se lancer maintenant serais-tu ce que j epeux retirer du tien pour pouvoir l'optimiser a mon problème stp(je cherche juste a savoir si il est ouvert sur mon ordi)
    Merci déja énormement pour ton aide

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Une solution possible avec cette 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
     
    Function VerificationFichierOuvert(ByVal NomFichier As String) As Boolean
     
    Dim WbEnCours As Workbook
     
        VerificationFichierOuvert = False
        If Workbooks.Count = 0 Then
           Exit Function
        Else
           For Each WbEnCours In Application.Workbooks
               If WbEnCours.Name = NomFichier Then VerificationFichierOuvert = True
           Next WbEnCours
        End If
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub TestVerificationFichierOuvert()
        MsgBox VerificationFichierOuvert("A.xlsm")
    End Sub
    Nb : Ce bout de code peut paraître complètement c..., mais il sert dans des macros complémentaires .xlam depuis le menu excel et il n'y a pas toujours des fichiers ouverts.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        If Workbooks.Count = 0 Then
           Exit Function
        ....
    Merci beaucoup

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Juste ouvert sur le pc actuel donc je suppose que c'est sur la meme instance Excel
    Rien à voir.
    Plusieurs instances de Excel peuvent être ouvertes sur le même PC
    Je réitère donc ma question :
    savoir :
    - s'il est ouvert dans la même instance de Excel
    ou
    - s'il est ouvert par n'importe quelle instance de Excel
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re,

    une facon simple de vérifier qu'un classeur est ouvert à voir ici : https://excel.developpez.com/faq/?pa...ClasseurOuvert

    Maintenant la question de @unparia est importante car il se peut que tu es plusieurs instance d'Excel ouvert (comme si tu avais plusieurs d'Excel ouvert indépendant des uns et des autres (uniquement sur PC))
    et que le fichier que tu veux vérifier soit vérifié sur la mauvaise instance d'Excel, ce qui à pour conséquence de te donner en fin de compte une réponse erronée …

    donc tu choisis d'orienté ton code dans quel sens ?

    Option 1 : "s'il est ouvert dans la même instance de Excel"

    Option 2 : " s'il est ouvert par n'importe quelle instance de Excel"

    A choisir selon ta situation dans laquelle tu vas te trouver …


    Edit : Cela peut t'aider à comprendre :https://excel-malin.com/codes-source...nstance-excel/
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 267
    Points : 3 663
    Points
    3 663
    Par défaut
    Bonjour à tous,

    autre idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function fichierOuvert(nomFich As String) As Boolean
        Dim tmp
        On Error GoTo fin
        tmp = Workbooks(nomFich).Name
        fichierOuvert = True
    fin:
    End Function
    (dans la même session, sinon voir le lien de ryu)
    eric

  11. #11
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    VBA/Excel offre quand-même nativement beaucoup plus simple que ce qui est montré par le lien de la FAQ .
    Il suffit d'utiliser la fonction GetObject (plutôt que ouvrir, etc ...). Ainsi (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Function estouvert(fichier As String) As Boolean
      Dim f As Object
      On Error Resume Next
      Set f = GetObject(fichier)
      If Not f Is Nothing Then estouvert = True
      On Error GoTo 0
      Set f = Nothing
    End Function
    Appelable ainsi (exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim fichier As String
      fichier = "d:\blabla.xlsm"
      MsgBox estouvert(fichier)
    --->> si tout le monde est d'accord avec cette solution, je suggère que soit modifié le lien concerné (ou que cette méthode y soit au moins mentionnée).

    EDIT : plus j'y pense, plus je suis persuadé qu'il s'agit là d'une étourderie de Michel, dont je connais bien la grande compétence indubitable. Je suis persuadé de ce que - s'il passait par là - il interviendrait pour modifier ou compléter dans ce sens ce lien de la FAQ.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  12. #12
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Coucou Jacques,

    VBA/Excel offre quand-même nativement beaucoup plus simple que ce qui est montré par le lien de la FAQ .
    J'ai pas encore testé ta solution (que je n'hésiterai pas à tester dès que je peux - à mon avis à ne sera pas avant ce soir), mais ce qui est sûr, c'est que le lien de la faq marche uniquement sur PC.
    Et comme tu le sais je privilégie toujours à les codes les plus efficaces et aussi multiplateforme qd cela est possible
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Merci bcp a tous j'ai reussi je passe en résolu encore merci

  14. #14
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Content pour toi, mais il sera bien de dire ici quelle méthode tu as adoptée.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 37
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par unparia Voir le message
    Content pour toi, mais il sera bien de dire ici quelle méthode tu as adoptée.
    Ha oui désolé j'ai utlisé celle de Eric KERGRESSE (la toute premiere)

  16. #16
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par unparia Voir le message
    Il suffit d'utiliser la fonction GetObject (plutôt que ouvrir, etc ...). Ainsi (exemple)
    Peut-être que je n'ai pas tout compris ce que tu dis mais j'ai un sérieux doute sur cette procédure.

    Lorsque je la lance sur un classeur ouvert sur une autre session, pas de souci car le message est "Vrai".

    Je ferme l'autre session et je lance ta procédure qui ouvre le classeur maintenant disponible et le message est "Vrai".
    Cela parait exact car lorsque je ferme le classeur test, il me demande si je veux sauvegarder le classeur dont je testais l'ouverture.

    J'ai forcé la procédure fonction à "False" au départ mais c'est inutile car j'ai systématiquement "Vrai",
    même en ayant tout fermé au préalable, dès son premier lancement.

    N'y aurait-il pas un petit schmilblick ?

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour anasecu
    Tu as raison. Je viens de le vérifier.
    Mea culpa. L'instruction GetObject retourne vrai si le fichier existe, ouvert ou non.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,

    Jacques, j'ai commencé à tester hier soir ton code uniquement sur Mac avec 2 Excel différents (2011 et 2016 Mac - imitation de plusieurs instances) et comme @anescu je me suis retrouvé avec True et j'ai eu en sus des comportements que je n'ai pas compris :
    Le fichier à tester était parfois ouvert physiquement/visuellement et parfois il était ouvert virtuellement sans que je puisse le voir à l'écran ce qui avait pour conséquence quand celui-ci était réellement fermé, de recevoir un message de l'excel dont j'avais lancé la macro à savoir : "le fichier est disponible, voulez-vous l'ouvrir".

    Je.voulais investiguer plus sachant qu'il peut y avoir des différences de code entre Mac et PC .

    Maintenant avec ta dernière réponse Jacques, c'est chose inutile.

    @anasecu

    Edit : PS : pour ce qui passe par là, si il est possible de tester ma procédure se trouvant dans les contributions et d'avoir un retour ça serait cool ( cf lien sur le mon post en début de discussion)
    Et n'hésitez si vous avez une question …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

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

Discussions similaires

  1. Détecter si le fichier est déjà ouvert
    Par guidav dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/10/2007, 09h48
  2. [VBA-E] Verifier si un fichier est ouvert
    Par peaceandloveman01 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/09/2007, 14h45
  3. Macro dans excel permettant de voir si un fichier est ouvert
    Par VirginieGE dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/08/2004, 07h51
  4. Comment tester si fichier est ouvert ?
    Par fusef dans le forum Langage
    Réponses: 7
    Dernier message: 11/08/2004, 18h51

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