controler l'ouverture d'un classeur utilise par plusieurs utilisateurs

P

pierre

Guest
bonjour,

Je souhaite controler l'ouverture d'un classeur, stocké sur un serveur, utilisé par plusieurs utilisateurs.


la procédure serait la suivante:


- si: le classeur n'est utilisé par aucun utilisateur; alors: ouverture du classeur.

- si: le classeur est utilisé par un autre utilisateur; alors: ne pas ouvrir le classeur + msbox "le classeur est déjà en cours d'utilisation"


j'essaye de trouver une procédure depuis plusieurs jours, mais je n'y arrive pas.


si quelqun pouvait venir a mon aide........



Merci.
 
C

christine

Guest
Voilà 3 types de solution que l'on m'a proposé lorsque j'ai eu le même problème. J'utilise la 1ere possibilité

Bon courage

'=============================
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
Error errnum
End Select
End Function
'======================

Sub CallDemands()
Dim Msg, Style, Title
If IsFileOpen("P:\Developments\Demand.xls") Then
MsgBox "File Already in use" & Chr(13) & "Please Try Latter"
Else
Workbooks.Open "P:\Developments\Demand.xls"
End If
End Sub


2ème version:

Dim Wbk As Workbook
On Error Resume Next
Set Wbk = Workbooks("tonfichier.xls")
On Error GoTo 0
If Wbk Is Nothing Then Workbooks.Open "C:\tonfichier.xls" Else Set Wbk = Nothing
3ème version
Sub TextStreamTest()
Const ForReading = 1, ForWriting = 2, ForAppending = 3
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Dim fs, f, ts, s
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateTextFile "test1.txt"
Set f = fs.GetFile("test1.txt")
Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
ts.Write "Christine"
ts.Close
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
 
S

STéphane

Guest
bonjour

une solution que j'ai déjà soumis ici qui permet de savoir si un classeur, situé sur un réseau, est déjà utilisé. Légèrement similaire au premier exemple

sub test
If IsFileInUse("C:\Temp\Mappe1.xls") = TRUE Then
Call MsgBox("Mappe bereits geöffnet!", vbCritical)
End If
end sub

Function IsFileInUse(tFileName As String) As Boolean
On Error Resume Next

Dim hFile As Long

hFile = FreeFile()

Open tFileName For Random Access Read Lock Read Write As #hFile
IsFileInUse = Err.Number <> 0
Close #hFile

End Function

nb :voir aussi <http://xlbysteph.free.fr/aideinformatique/existence.htm>

bye
Stéphane
 

Discussions similaires