Vérifier si classeur déjà ouvert (fichier distant HTTP)
Bonjour à tous,
J'ai trouvé un très bon code pour tester si un fichier est ouvert avec gestion des erreurs.
Le pb c'est que le code fonctionne bien en local (C:\xx) ou sur le réseau (quand on connecte un lecteur réseau en lui attribuant une lettre) mais pas en distant (http:// (sans pouvoir monter ce lien en tant que lecteur réseau) )
Ce que je ne comprends car le code se base sur la même variable string (sNomWkb)
Si vous avez une idée pour débuger ce code ou l’améliorer ça serait top
Voici le code :
Option Explicit
Sub Test()
Dim i As Integer
Dim sNomWkb As String
sNomWkb = "Test.xlsm"
i = VerifClasseur("http://serveur.mondomaine/dossier/2014/" & sNomWkb)
Select Case i
Case 0: MsgBox "Classeur fermé."
Case 53:
If WOuvert(sNomWkb) = False Then
MsgBox "Fichier introuvable"
Else
MsgBox "Classeur déja ouvert."
End If
Case 70: MsgBox "Classeur déja ouvert."
Case Else: MsgBox "Erreur : " & i
End Select
End Sub
Private Function VerifClasseur(Fichier As String) As Integer
Dim x As Integer
On Error Resume Next
x = FreeFile()
Open Fichier For Input Lock Read As #x
Close x
VerifClasseur = Err.Number
On Error GoTo 0
End Function
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 FunctionJe suis sous XP, dans un domaine AD, sur une plateforme sharepoint 2003 avec Excel 2010.
Merci d'avance pour vos retours.
J'ai reussi a trouver une réponse. Je la poste si ca peut vous aider.
En fait l'idée est de faire une boucle pour parcourir tous les fichiers ouverts mais en se basant que sur le nom de fichier et pas sur le chemin+nom. Ce qui ici résout mon pb de traitement entre c:\test.xlsm et http://serveur/test.xlsm.
Dim Wb$, I%, TestPresent%
Wb$ = "test.xlsm": TestPresent = 0
'boucle pour trouver le bon classeur nommé en variable Wb$
For I = 1 To Workbooks.Count
'si Wb$ est trouvé alors on sort en donnant validant TestPresent à 1
If Workbooks(I).Name = Wb$ Then TestPresent = 1: Exit For
Next
'on active le classeur trouvé.
If TestPresent = 1 Then 'présent
MsgBox Wb$ & " est présent !"
Workbooks(Wb$).Activate
Else 'non présent, donc on load le fichier
MsgBox Wb$ & " n'est présent... alors on l'ouvre"
Workbooks.Open "http://monserveur.mondomaine/" & Wb$
End If
'on est sorti de la boucle et sur le bon classeur on peut alors faire ses actions dans ce classeur.