OVH Cloud OVH Cloud

Classeur mono utilisateur

7 réponses
Avatar
Cyrille
Bonjour,
j'ai mis une appli Excel 2000 sur un lecteur r=E9seau. Ce=20
classeur peut =EAtre accessible par n'importe qui mais=20
seulement par un utilisateur =E0 la fois. Mon probl=E8me,=20
lorsque l'appli est d=E9j=E0 ouverte par un utilisateur, c'est=20
de ne pas donner la possibilit=E9 =E0 un autre utilisateur=20
d'ouvrir le classeur en lecture seule. Je ne souhaite pas=20
non plus qu'une notification soit envoy=E9 =E0 l'utilisateur.=20
En r=E9sum=E9, le premier connect=E9 sur l'appli peut=20
l'utiliser. Le second ne doit pas se voir proposer la=20
boite de dialogue l'informant que le classeur est utilis=E9=20
et qu'il peut soit l'ouvrir en lecture seule ou bien=20
recevoir une notification. Pour cette utilisateur l=E0, il y=20
aura juste un message (inclus dans la propri=E9t=E9=20
Workbook_Open) lui indiquant que le classeur est oqp et=20
qu'il doit revenir + tard. Et l=E0 le classeur se ferme.
Connaissez-vous un moyen de supprimer cette boite de=20
dialogue??
A noter : la manip Outils/Partage du classeur/Permettre=20
une modification multi utilisateur... (si elle a=20
l'avantage de supprimer la boite de dial) ne me satisfait=20
pas car elle ne rend pas disponible le projet VBA.

Merci de votre aide :)

Cyrille

7 réponses

Avatar
JpPradier
Bonjour Cyrille

Tu peux t'inspirer de ceci :

Private Sub Workbook_Open()
If ThisWorkbook.ReadOnly Then
MsgBox "Le classeur est utilisé actuellement. Réessayez plus tard"
ThisWorkbook.Close
End If
End Sub

j-p
Avatar
JpPradier
Oh laaa, doucement les chevaux. Bon , j'ai lu trop vite :-)
En fait, tu voudrais supprimer le message qui dit que le classeur est en lecture seule ? Je crois
pas que ce soit possible puisque le dit message arrive avant l'ouverture du classeur.

j-p
Avatar
cyrille
Bonjour jp,
ouaip finalement c'est pas mal,
aprés tout, si le classeur est déjà ouvert, l'utilisateur
qui arrive en 2eme va soit partir tout de suite (donc pb
reglé), soit choisir lecture seule, soit notifier. Dans
ces 2 cas, le classeur est qd meme ouvert en lecture
seule. Et là, PAF !!! je le tacle avec ta petite macro.

Ca me va bien.
Merci jp,
A+
Cyrille
-----Message d'origine-----
Bonjour Cyrille

Tu peux t'inspirer de ceci :

Private Sub Workbook_Open()
If ThisWorkbook.ReadOnly Then
MsgBox "Le classeur est utilisé actuellement.
Réessayez plus tard"

ThisWorkbook.Close
End If
End Sub

j-p

.



Avatar
Michel Pierron
Bonjour Cyrille;
Ce que tu demandes nécessite d'aller consulter la liste des fichiers ouverts sur
le serveur avant l'ouverture du fichier proprement dit.
Je crois que cela suppose que tu aies les droits Administrateur (à vérifier); je
m'explique:
Tu ne peux pas faire cela avec le fichier en question car cette vérification est
faite par le système avant même l'ouverture du fichier pour indiquer le fameux
message "... Notifier ... etc. L'astuce consiste donc à faire cela dans un fichier
séparé, lequel sera chargé d'autoriser ou non l'ouverture du fichier proprement
dit avant que ce fichier séparé s'auto referme.
Le lancement de ton fichier au moyen d'un fichier vbs pourrait réaliser le même
travail.
Supposons que le fichier de vérification s'appelle OpenMyFile.xls, dans le module
ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
Const NomClasseur$ = "EnCours.xls"
If Not FileIsopen(NomClasseur) Then
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
End If
If Application.Workbooks.Count > 1 Then
ThisWorkbook.Close False
Else
Application.Quit
End If
End Sub

Private Function FileIsopen(FileName$) As Boolean
On Error Resume Next
Dim FSO, Res
' //Nom du domaine/Nom du serveur
Set FSO = GetObject("WinNT://Europtest/Serveur01/LanmanServer")
If (IsEmpty(FSO) = False) Then
For Each Res In FSO.resources
If (Not Res.User = "") And (Not Right(Res.User, 1) = "$") Then
FileIsopen = (InStr(1, Res.Path, FileName, 1) > 0)
If FileIsopen Then Exit Function
End If
Next Res
End If
Set FSO = Nothing
End Function

Procédure où NomClasseur représente le nom du classeur initial.
Enregistre ce classeur dans le même répertoire que le classeur initial ou dans un
répertoire différent en adaptant la ligne:
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
et place la propriété de ce fichier en lecture seule puisqu'aucune modification le
concernant n'y sera apporté et pour qu'il puisse être ouvert par plusieurs et non
concerné par le fameux message ... Notifier... etc.
Si tu souhaites de l'aide pour faire la même chose avec un fichier vbs, reviens à
la charge.
MP

"Cyrille" a écrit dans le message de
news:583a01c47483$5de282c0$
Bonjour,
j'ai mis une appli Excel 2000 sur un lecteur réseau. Ce
classeur peut être accessible par n'importe qui mais
seulement par un utilisateur à la fois. Mon problème,
lorsque l'appli est déjà ouverte par un utilisateur, c'est
de ne pas donner la possibilité à un autre utilisateur
d'ouvrir le classeur en lecture seule. Je ne souhaite pas
non plus qu'une notification soit envoyé à l'utilisateur.
En résumé, le premier connecté sur l'appli peut
l'utiliser. Le second ne doit pas se voir proposer la
boite de dialogue l'informant que le classeur est utilisé
et qu'il peut soit l'ouvrir en lecture seule ou bien
recevoir une notification. Pour cette utilisateur là, il y
aura juste un message (inclus dans la propriété
Workbook_Open) lui indiquant que le classeur est oqp et
qu'il doit revenir + tard. Et là le classeur se ferme.
Connaissez-vous un moyen de supprimer cette boite de
dialogue??
A noter : la manip Outils/Partage du classeur/Permettre
une modification multi utilisateur... (si elle a
l'avantage de supprimer la boite de dial) ne me satisfait
pas car elle ne rend pas disponible le projet VBA.

Merci de votre aide :)

Cyrille
Avatar
Michel Pierron
Re Cyrille;
Je n'avais pas lu jusqu'au bout:
A noter : la manip Outils/Partage du classeur/Permettre
une modification multi utilisateur... (si elle a
l'avantage de supprimer la boite de dial) ne me satisfait
pas car elle ne rend pas disponible le projet VBA.

Bien sur que si, le projet VBA est disponible pour tous également; seule sa
modification est indisponible. Toutefois, quelques commande ne sont plus
accessibles dans un classeur partagé (consulter l'aide pour avoir la liste,
suppression de feuille, etc.)
MP

"Cyrille" a écrit dans le message de
news:583a01c47483$5de282c0$
Bonjour,
j'ai mis une appli Excel 2000 sur un lecteur réseau. Ce
classeur peut être accessible par n'importe qui mais
seulement par un utilisateur à la fois. Mon problème,
lorsque l'appli est déjà ouverte par un utilisateur, c'est
de ne pas donner la possibilité à un autre utilisateur
d'ouvrir le classeur en lecture seule. Je ne souhaite pas
non plus qu'une notification soit envoyé à l'utilisateur.
En résumé, le premier connecté sur l'appli peut
l'utiliser. Le second ne doit pas se voir proposer la
boite de dialogue l'informant que le classeur est utilisé
et qu'il peut soit l'ouvrir en lecture seule ou bien
recevoir une notification. Pour cette utilisateur là, il y
aura juste un message (inclus dans la propriété
Workbook_Open) lui indiquant que le classeur est oqp et
qu'il doit revenir + tard. Et là le classeur se ferme.
Connaissez-vous un moyen de supprimer cette boite de
dialogue??
A noter : la manip Outils/Partage du classeur/Permettre
une modification multi utilisateur... (si elle a
l'avantage de supprimer la boite de dial) ne me satisfait
pas car elle ne rend pas disponible le projet VBA.

Merci de votre aide :)

Cyrille
Avatar
Cyrille
Bonjour Michel,
merci pour ton aide, cette soluce est en effet assez bien
pensée. Pour les droits administrateurs je les ais.
Je vais voir si cette soluce est fiable et simple à
maintenir.

A+

Cyrille
-----Message d'origine-----
Bonjour Cyrille;
Ce que tu demandes nécessite d'aller consulter la liste
des fichiers ouverts sur

le serveur avant l'ouverture du fichier proprement dit.
Je crois que cela suppose que tu aies les droits
Administrateur (à vérifier); je

m'explique:
Tu ne peux pas faire cela avec le fichier en question car
cette vérification est

faite par le système avant même l'ouverture du fichier
pour indiquer le fameux

message "... Notifier ... etc. L'astuce consiste donc à
faire cela dans un fichier

séparé, lequel sera chargé d'autoriser ou non l'ouverture
du fichier proprement

dit avant que ce fichier séparé s'auto referme.
Le lancement de ton fichier au moyen d'un fichier vbs
pourrait réaliser le même

travail.
Supposons que le fichier de vérification s'appelle
OpenMyFile.xls, dans le module

ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
Const NomClasseur$ = "EnCours.xls"
If Not FileIsopen(NomClasseur) Then
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
End If
If Application.Workbooks.Count > 1 Then
ThisWorkbook.Close False
Else
Application.Quit
End If
End Sub

Private Function FileIsopen(FileName$) As Boolean
On Error Resume Next
Dim FSO, Res
' //Nom du domaine/Nom du serveur
Set FSO = GetObject
("WinNT://Europtest/Serveur01/LanmanServer")

If (IsEmpty(FSO) = False) Then
For Each Res In FSO.resources
If (Not Res.User = "") And (Not Right(Res.User, 1) = "$")
Then

FileIsopen = (InStr(1, Res.Path, FileName, 1) > 0)
If FileIsopen Then Exit Function
End If
Next Res
End If
Set FSO = Nothing
End Function

Procédure où NomClasseur représente le nom du classeur
initial.

Enregistre ce classeur dans le même répertoire que le
classeur initial ou dans un

répertoire différent en adaptant la ligne:
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
et place la propriété de ce fichier en lecture seule
puisqu'aucune modification le

concernant n'y sera apporté et pour qu'il puisse être
ouvert par plusieurs et non

concerné par le fameux message ... Notifier... etc.
Si tu souhaites de l'aide pour faire la même chose avec
un fichier vbs, reviens à

la charge.
MP

"Cyrille" a écrit
dans le message de

news:583a01c47483$5de282c0$
Bonjour,
j'ai mis une appli Excel 2000 sur un lecteur réseau. Ce
classeur peut être accessible par n'importe qui mais
seulement par un utilisateur à la fois. Mon problème,
lorsque l'appli est déjà ouverte par un utilisateur, c'est
de ne pas donner la possibilité à un autre utilisateur
d'ouvrir le classeur en lecture seule. Je ne souhaite pas
non plus qu'une notification soit envoyé à l'utilisateur.
En résumé, le premier connecté sur l'appli peut
l'utiliser. Le second ne doit pas se voir proposer la
boite de dialogue l'informant que le classeur est utilisé
et qu'il peut soit l'ouvrir en lecture seule ou bien
recevoir une notification. Pour cette utilisateur là, il y
aura juste un message (inclus dans la propriété
Workbook_Open) lui indiquant que le classeur est oqp et
qu'il doit revenir + tard. Et là le classeur se ferme.
Connaissez-vous un moyen de supprimer cette boite de
dialogue??
A noter : la manip Outils/Partage du classeur/Permettre
une modification multi utilisateur... (si elle a
l'avantage de supprimer la boite de dial) ne me satisfait
pas car elle ne rend pas disponible le projet VBA.

Merci de votre aide :)

Cyrille


.



Avatar
Michel Pierron
Bonjour Cyrille;
Une autre façon de faire sans droits Administrateur, à partir d'un fichier tiers:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
Const NomClasseur$ = "SERVEUR01ProductionsGpaoListUsers.xls"
If Not IsOpen(NomClasseur) Then Workbooks.Open NomClasseur
If Application.Workbooks.Count > 1 Then
ThisWorkbook.Close False
Else
Application.Quit
End If
End Sub

Private Function IsOpen(FileName$) As Boolean
Dim n%
n = FreeFile
On Error Resume Next
Open FileName For Input Lock Read Write As #n
IsOpen = CBool(Err.Number = 70)
Close #n
If IsOpen Then MsgBox "Revenez plus tard !", 64
End Function

MP

"Cyrille" a écrit dans le message de
news:65ab01c47541$7fb4dce0$
Bonjour Michel,
merci pour ton aide, cette soluce est en effet assez bien
pensée. Pour les droits administrateurs je les ais.
Je vais voir si cette soluce est fiable et simple à
maintenir.

A+

Cyrille
-----Message d'origine-----
Bonjour Cyrille;
Ce que tu demandes nécessite d'aller consulter la liste
des fichiers ouverts sur

le serveur avant l'ouverture du fichier proprement dit.
Je crois que cela suppose que tu aies les droits
Administrateur (à vérifier); je

m'explique:
Tu ne peux pas faire cela avec le fichier en question car
cette vérification est

faite par le système avant même l'ouverture du fichier
pour indiquer le fameux

message "... Notifier ... etc. L'astuce consiste donc à
faire cela dans un fichier

séparé, lequel sera chargé d'autoriser ou non l'ouverture
du fichier proprement

dit avant que ce fichier séparé s'auto referme.
Le lancement de ton fichier au moyen d'un fichier vbs
pourrait réaliser le même

travail.
Supposons que le fichier de vérification s'appelle
OpenMyFile.xls, dans le module

ThisWorkbook:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Saved = True
End Sub

Private Sub Workbook_Open()
Const NomClasseur$ = "EnCours.xls"
If Not FileIsopen(NomClasseur) Then
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
End If
If Application.Workbooks.Count > 1 Then
ThisWorkbook.Close False
Else
Application.Quit
End If
End Sub

Private Function FileIsopen(FileName$) As Boolean
On Error Resume Next
Dim FSO, Res
' //Nom du domaine/Nom du serveur
Set FSO = GetObject
("WinNT://Europtest/Serveur01/LanmanServer")

If (IsEmpty(FSO) = False) Then
For Each Res In FSO.resources
If (Not Res.User = "") And (Not Right(Res.User, 1) = "$")
Then

FileIsopen = (InStr(1, Res.Path, FileName, 1) > 0)
If FileIsopen Then Exit Function
End If
Next Res
End If
Set FSO = Nothing
End Function

Procédure où NomClasseur représente le nom du classeur
initial.

Enregistre ce classeur dans le même répertoire que le
classeur initial ou dans un

répertoire différent en adaptant la ligne:
Workbooks.Open ThisWorkbook.Path & "" & NomClasseur
et place la propriété de ce fichier en lecture seule
puisqu'aucune modification le

concernant n'y sera apporté et pour qu'il puisse être
ouvert par plusieurs et non

concerné par le fameux message ... Notifier... etc.
Si tu souhaites de l'aide pour faire la même chose avec
un fichier vbs, reviens à

la charge.
MP

"Cyrille" a écrit
dans le message de

news:583a01c47483$5de282c0$
Bonjour,
j'ai mis une appli Excel 2000 sur un lecteur réseau. Ce
classeur peut être accessible par n'importe qui mais
seulement par un utilisateur à la fois. Mon problème,
lorsque l'appli est déjà ouverte par un utilisateur, c'est
de ne pas donner la possibilité à un autre utilisateur
d'ouvrir le classeur en lecture seule. Je ne souhaite pas
non plus qu'une notification soit envoyé à l'utilisateur.
En résumé, le premier connecté sur l'appli peut
l'utiliser. Le second ne doit pas se voir proposer la
boite de dialogue l'informant que le classeur est utilisé
et qu'il peut soit l'ouvrir en lecture seule ou bien
recevoir une notification. Pour cette utilisateur là, il y
aura juste un message (inclus dans la propriété
Workbook_Open) lui indiquant que le classeur est oqp et
qu'il doit revenir + tard. Et là le classeur se ferme.
Connaissez-vous un moyen de supprimer cette boite de
dialogue??
A noter : la manip Outils/Partage du classeur/Permettre
une modification multi utilisateur... (si elle a
l'avantage de supprimer la boite de dial) ne me satisfait
pas car elle ne rend pas disponible le projet VBA.

Merci de votre aide :)

Cyrille


.