[VBA] Savoir par qui un fichier Excel est déjà utilisé
3 réponses
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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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")
"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
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")
"HD" <hd@anti.spam.fr> a écrit dans le message de groupe de discussion : i2ormn$1vrt$1@saria.nerim.net...
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.
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")
"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
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
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.
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
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.
"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
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.
"HD" <hd@anti.spam.fr> a écrit dans le message de groupe de discussion : i395s2$2h9q$1@saria.nerim.net...
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" 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.