Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Savoir par qui un fichier Excel est déjà utilisé

3 réponses
Avatar
HD
Bonjour,

Lorsque l'on ouvre manuellement un classeur Excel situé sur le réseau, si
celui ci est déjà utilisé par quelqu'un le nom de l'utilisateur Excel nous
apparaît. Lorsqu'en VBA j'ouvre un classeur Excel, si celui est déjà ouvert
par quelqu'un d'autre et est donc en lecture seule, je voudrais pouvoir
savoir quels sont les utilisateurs qui ont ouverts le fichier en question.

Les classeurs en question ne sont pas des classeurs partagés.

Merci d'avance pour votre aide.
--
@+
HD

3 réponses

Avatar
michdenis
Bonjour,

Cette macro fut publiée sur MPFE par Michel Perron.
'---------------------------------------
Sub WhoHasFileOpen()
Dim File As String
File = InputBox("Enter any part of Filename")
If File = "" Then Exit Sub
If Any_Part_Of_Filename = "" Then Exit Sub
Workbooks.Add
Rows(1).Font.Bold = True
Cells(1, 1) = "USER"
Cells(1, 2) = "PATH"
On Error Resume Next
Dim fso As Object, Res As Object, i&: i = 1
Set fso = GetObject("WinNT://<servername>/LanmanServer")
If IsEmpty(fso) Then Exit Sub
For Each Res In fso.resources
If Not Res.user = "" And Not Right(Res.user, 1) = "$" Then
If InStr(1, Res.Path, File, 1) Then
i = i + 1
Cells(i, 1) = Res.user
Cells(i, 2) = Res.Path
End If
End If
Next Res
Cells.Columns.AutoFit
MsgBox "Done !", 64
End Sub
'---------------------------------------

Pour la ligne de code suivante : Exemple.
Comme ceci :
Set fso = GetObject("WinNT://Nom du domaine/Nom du serveur/LanmanServer")

Exemple :
Set fso = GetObject("WinNT://Trucmuch/Serveur01/LanmanServer")

--
MichD
--------------------------------------------


"HD" a écrit dans le message de groupe de discussion : i2ormn$1vrt$
Bonjour,

Lorsque l'on ouvre manuellement un classeur Excel situé sur le réseau, si
celui ci est déjà utilisé par quelqu'un le nom de l'utilisateur Excel nous
apparaît. Lorsqu'en VBA j'ouvre un classeur Excel, si celui est déjà ouvert
par quelqu'un d'autre et est donc en lecture seule, je voudrais pouvoir
savoir quels sont les utilisateurs qui ont ouverts le fichier en question.

Les classeurs en question ne sont pas des classeurs partagés.

Merci d'avance pour votre aide.
--
@+
HD
Avatar
HD
Un grand MERCI à toi MichDenis !!! ça fonctionne très bien.

Par contre, la ligne:
If Any_Part_Of_Filename = "" Then Exit Sub
ne sert à rien.

A un moment donné, je m'étais trompé dans la ligne de commande
//Domaine/NomduServer/LanmanServer ce qui faisait qu'ensuite cela ne
fonctionnait plus... il m'a fallut sortir du classeur puis revenir dedans.
Je pense qu'une ligne finale avec: Set FSO = NoThing empécherait
d'avoir un tel souci.

--
@+
HD
Avatar
michdenis
Merci du retour.

| If Any_Part_Of_Filename = "" Then Exit Sub
| ne sert à rien.

C'est ce que je pensais.. ;- ) mais comme ce n'est pas moi qui
ai créé cette procédure, je n'ai pas voulu la modifier.

Pour le reste, comme je ne travaille pas en réseau, je n'ai
pas le moyen de tester ce type de procédure.

--
MichD
--------------------------------------------


"HD" a écrit dans le message de groupe de discussion : i395s2$2h9q$
Un grand MERCI à toi MichDenis !!! ça fonctionne très bien.

Par contre, la ligne:
If Any_Part_Of_Filename = "" Then Exit Sub
ne sert à rien.

A un moment donné, je m'étais trompé dans la ligne de commande
//Domaine/NomduServer/LanmanServer ce qui faisait qu'ensuite cela ne
fonctionnait plus... il m'a fallut sortir du classeur puis revenir dedans.
Je pense qu'une ligne finale avec: Set FSO = NoThing empécherait
d'avoir un tel souci.

--
@+
HD