tester si un fichier est déja ouvert par un autre utilisateur
2 réponses
ttcpp
Bonjour,
Je génére un cerains nombre de fichiers excel sur mon disque local. Je dois
ensuite les transférer sur le disque réseau. J'ai donc créer une macro qui me
déplace les fichiers à l'endroit voulu et cela fonctionne trés bien.
Par contre si un utilisateur X a ouvert un fichier que je veux remplacé
celui-ci n'est pas mis à jour et je n'ai pas de message d'erreur. J'ai donc
voulu créér un code pour tester si le fichier est ouvert par quelqu'un avant
de le copier.
Mais cela ne fonctionne pas bien, en effet même si le fichier n'est pas
ouvert j'ai quand même une message me disant que c'est moi qui l'ai ouvert.
Pour info mes fichiers xls sont en mode partagé, pour voir qui est
l'utilisaeur du fichier.
Voici le code que j'ai utilisé :
Public fl As File
Public Nom_Fichier As String
Public Nom_Rep_Source As String
Public Nom_Rep_Dest As String
Public TestError As Integer
Private Sub Lancement_Copie_Click()
Dim fso As FileSystemObject
Dim f, f1, f2 As Folder
Dim fc, fc1, fc2 As Files
Dim s As String
Dim n As Integer
Dim i As Integer
ProgressBar1.MAX = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFolder("C:\Data\Essai\Societes\")
ProgressBar1.Min = 0
n = f.Files.Count + f1.Files.Count + f2.Files.Count
ProgressBar1.MAX = n
i = 1
On Error GoTo GestErreur
Nom_Rep_Dest = Tbox_Nom_Rep_Dest.Value
'Copie des fichiers du répertoire Société
For Each fl In fc
If fl.Type = "Feuille de calcul Microsoft Excel" Then
On Error Resume Next
'Name fl.Name As fl.Name
TestFichierEstOuvert fl.Name
If TestError = 0 Then
Call fso.CopyFile(fl, "H:\DF_Reporting\Reporting\Tableau de
Bord\2008\TB\" & Nom_Rep_Dest & "\", True)
tbox_Nom_Fichier.Value = fl.Name
Animation1.SetFocus
DoEvents
Call fso.DeleteFile(fl)
End If
End If
ProgressBar1.Value = i
i = i + 1
Next
'Destroy All Objects
Set fc = Nothing
Set f = Nothing
Set fso = Nothing
Set fl = Nothing
Sub TestFichierEstOuvert(fl As String)
Dim Chemin, fichier As String
Dim Utilisateurs
Dim n As Integer
Chemin = "H:\DF_Reporting\Reporting\Tableau de Bord\2008\TB\" & Nom_Rep_Dest
& "\"
fichier = fl
'Workbooks.Open (Chemin & fichier)
'MsgBox ActiveWorkbook.MultiUserEditing
Utilisateurs = ActiveWorkbook.UserStatus
For n = 1 To UBound(Utilisateurs, 1)
MsgBox fichier & " est utilisé par " & Utilisateurs(n, 1) 'affichage du
nom des noms pc
Next
If n >= 1 Then TestError = 1
End Sub
Ce petit bout de code détecte si un fichier est déjà ouvert (message dans une boîte de dialogue):
Workbooks.Open ("C:Fichier.xls") On Error GoTo Ouvert ActiveWorkbook.Save ActiveWorkbook.Close Exit Sub Ouvert: MsgBox ("Déjà ouvert") ActiveWorkbook.Close SaveChanges:úlse
Celà devrait convenir
Dis moi !!!
ttcpp
"FFO" a écrit :
Salut à toi
Ce petit bout de code détecte si un fichier est déjà ouvert (message dans une boîte de dialogue):
Workbooks.Open ("C:Fichier.xls") On Error GoTo Ouvert ActiveWorkbook.Save ActiveWorkbook.Close Exit Sub Ouvert: MsgBox ("Déjà ouvert") ActiveWorkbook.Close SaveChanges:úlse
Celà devrait convenir
Dis moi !!!
Merci pour ta réponse, mais j'ai déjà essayé ce test et c'est trop lent, car je transfert entre 1 et 30 fichiers à la fois et l'accés au disque réseau n'est pas trés rapide. Peut-être y-a-t-il une autre solution ?
"FFO" a écrit :
Salut à toi
Ce petit bout de code détecte si un fichier est déjà ouvert (message dans
une boîte de dialogue):
Workbooks.Open ("C:Fichier.xls")
On Error GoTo Ouvert
ActiveWorkbook.Save
ActiveWorkbook.Close
Exit Sub
Ouvert:
MsgBox ("Déjà ouvert")
ActiveWorkbook.Close SaveChanges:úlse
Celà devrait convenir
Dis moi !!!
Merci pour ta réponse, mais j'ai déjà essayé ce test et c'est trop lent, car je transfert entre 1 et 30 fichiers à la fois et l'accés au disque réseau n'est pas trés rapide. Peut-être y-a-t-il une autre solution ?
Ce petit bout de code détecte si un fichier est déjà ouvert (message dans une boîte de dialogue):
Workbooks.Open ("C:Fichier.xls") On Error GoTo Ouvert ActiveWorkbook.Save ActiveWorkbook.Close Exit Sub Ouvert: MsgBox ("Déjà ouvert") ActiveWorkbook.Close SaveChanges:úlse
Celà devrait convenir
Dis moi !!!
Merci pour ta réponse, mais j'ai déjà essayé ce test et c'est trop lent, car je transfert entre 1 et 30 fichiers à la fois et l'accés au disque réseau n'est pas trés rapide. Peut-être y-a-t-il une autre solution ?