Savoir si un classeur est ouvert sans l'activer ?

Savoir si un classeur est ouvert sans l'activer ? - VB/VBA/VBS - Programmation

Marsh Posté le 29-07-2010 à 14:12:41    

:hello:  
Autre question du jour : j'ai une macro dans un classeur dans laquelle je souhaiterais mettre un bout de code qui va vérifier si un autre classeur est ouvert ou non... tout cela, sans l'activer...
Quelqu'un aurait une soluce ?
 :whistle:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 29-07-2010 à 14:12:41   

Reply

Marsh Posté le 29-07-2010 à 14:29:33    

J'essaie bien de faire :
 

Code :
  1. If IsOpen("FICHIER.xls" Then
  2. ...
  3. End If


 
Mais IsOpen ne semble pas être reconnu...  :cry:


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 29-07-2010 à 19:11:50    

Salut,à tester


Private Function WOuvert(sNom As String) As Boolean
Dim Wkb As Workbook
    WOuvert = False
    For Each Wkb In Workbooks
        If Wkb.Name = sNom Then
            WOuvert = True
            Exit For
        End If
    Next Wkb
End Function

Reply

Marsh Posté le 29-07-2010 à 22:18:20    

Bonsoir,
Oui... la même en couleur :
 

Code :
  1. Function WbOpen(WbName As String) As Boolean
  2. On Error Resume Next
  3. WbOpen = Not Workbooks(WbName) Is Nothing
  4. End Function


 
...Mais bien sur ça ne marche que dans une même instance d'Excel !
 
Pour tester l'ouverture ou non d'un classeur dans des instances différentes (en réseau par exemple)
je n'ai pas trouvé mieux que de créer un drapeau (fichier "flag.dat" ) à la fermeture (BeforeClose) du classeur en question et on supprime le "flag.dat" à l'ouverture.
Ensuite on teste la présence du flag (avec un Dir) : Si le flag est absent c'est que quelqu'un à déja ouvert le classeur, sinon c'est bon.
 
A+

Reply

Marsh Posté le 30-07-2010 à 06:42:56    

Salut,pour les instances multiples il faut passer par Microsoft WMI Scripting v1.x Library

Reply

Marsh Posté le 30-07-2010 à 09:08:25    

kiki29 a écrit :

Salut,à tester


Private Function WOuvert(sNom As String) As Boolean
Dim Wkb As Workbook
    WOuvert = False
    For Each Wkb In Workbooks
        If Wkb.Name = sNom Then
            WOuvert = True
            Exit For
        End If
    Next Wkb
End Function



 
Merci beaucoup pour ce bout de code que je vais tester immédiatement...
Je vous tiens au courant.  :p  


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Marsh Posté le 30-07-2010 à 09:15:14    

Ça marche nickel chrome du tonnerre...  :sol:  
 
Merci encore !  ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed