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

tester si fichier lecture seule ou non

6 réponses
Avatar
Antho87
Bonjour,
Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
mais ne fonctionne pas sur toutes les versions d'excel.
En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
teste sans ouvrir le fichier s'il est déjà utilisé ou non.
J'ai eu un très bon code sur ce forum que voici :
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False

' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True

' Another error occurred.
Case Else
Error errnum
End Select
End Function
Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
faire des modifications sauf sur 2007. Le code considère le fichier déjà
ouvert, certes oui mais en lecture seule...
Si vous avez une idée je vous en remercie par avance

6 réponses

Avatar
MichDenis
Bonjour,

Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
et dans un autre fichier Excel, j'ai mis la procédure
que tu as publiée ici et j'ai lancé cette petite « sub »

Eh bien, cela a provoqué une erreur de type 70 et
elle m'a retourné « vrai», la valeur attendue.

J'ai répété la même manipulation, mais cette fois en
utilisant une instance différente de l'application Excel,
une contenant le fichier ouvert et l'autre pour effectuer
le test. Dans chaque cas, la procédure a retourné la
valeur attendue.

Tu procèdes autrement ?

Sub test()
MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
End Sub




"Antho87" a écrit dans le message de groupe de
discussion :
Bonjour,
Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
mais ne fonctionne pas sur toutes les versions d'excel.
En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
teste sans ouvrir le fichier s'il est déjà utilisé ou non.
J'ai eu un très bon code sur ce forum que voici :
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False

' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True

' Another error occurred.
Case Else
Error errnum
End Select
End Function
Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
faire des modifications sauf sur 2007. Le code considère le fichier déjà
ouvert, certes oui mais en lecture seule...
Si vous avez une idée je vous en remercie par avance
Avatar
Antho87
Bonsoir MichDenis,

Visiblement on se retrouve...

En fait le fichier A.xls est ouvert en lecture seule sur excel 2000 ou 2003
et si une personne tente de l'ouvrir pour modifier avec excel 2007, le sub se
lance est détecte le fichier ouvert et donc, l'erreur 70 comme quoi le
fichier est déjà utilisé.
Alors que sur Excel 2000 ou 2003, si je vérifie si le fichier est dispo ou
non et il n'a pas l'erreur 70 car fichier en lecture seule simplement.

On dirait que excel 2000 ou 2003 retourne l'erreur 70 si le fichier est
ouvert en lecture/ecriture mais par contre sur excel 2007 il retourne
l'erreur 70 même si le fichier est ouvert en lecture seule.

Ce n'est qu'une impression...

Merci encore pour l'aide

"MichDenis" wrote:

Bonjour,

Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
et dans un autre fichier Excel, j'ai mis la procédure
que tu as publiée ici et j'ai lancé cette petite « sub »

Eh bien, cela a provoqué une erreur de type 70 et
elle m'a retourné « vrai», la valeur attendue.

J'ai répété la même manipulation, mais cette fois en
utilisant une instance différente de l'application Excel,
une contenant le fichier ouvert et l'autre pour effectuer
le test. Dans chaque cas, la procédure a retourné la
valeur attendue.

Tu procèdes autrement ?

Sub test()
MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
End Sub




"Antho87" a écrit dans le message de groupe de
discussion :
Bonjour,
Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
mais ne fonctionne pas sur toutes les versions d'excel.
En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
teste sans ouvrir le fichier s'il est déjà utilisé ou non.
J'ai eu un très bon code sur ce forum que voici :
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False

' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True

' Another error occurred.
Case Else
Error errnum
End Select
End Function
Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
faire des modifications sauf sur 2007. Le code considère le fichier déjà
ouvert, certes oui mais en lecture seule...
Si vous avez une idée je vous en remercie par avance




Avatar
MichDenis
A )

à partir de la procédure générale publiée dans ton premier message :
sous excel 2007,
'-------------------------------------------
Sub test()
MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
End Sub
'-------------------------------------------

Si le fichier testé n'est pas en lecture seule, la procédure "Test" retourne "vrai"
lorsque le fichier est ouvert.
si le fichier ouvert est en lecture seule, la procédure retourne "False".

La procédure a été testée avec des fichiers au format Excel 2007. Normalement
lorsqu'Excel 2007 ouvre un fichier .xls , ce fichier est ouvert en mode "compatibilité"
il deviendra un fichier au format 2007 seulement après avoir été enregistré au format
2007, fermé et rouvert à nouveau.






"Antho87" a écrit dans le message de groupe de
discussion :
Bonsoir MichDenis,

Visiblement on se retrouve...

En fait le fichier A.xls est ouvert en lecture seule sur excel 2000 ou 2003
et si une personne tente de l'ouvrir pour modifier avec excel 2007, le sub se
lance est détecte le fichier ouvert et donc, l'erreur 70 comme quoi le
fichier est déjà utilisé.
Alors que sur Excel 2000 ou 2003, si je vérifie si le fichier est dispo ou
non et il n'a pas l'erreur 70 car fichier en lecture seule simplement.

On dirait que excel 2000 ou 2003 retourne l'erreur 70 si le fichier est
ouvert en lecture/ecriture mais par contre sur excel 2007 il retourne
l'erreur 70 même si le fichier est ouvert en lecture seule.

Ce n'est qu'une impression...

Merci encore pour l'aide

"MichDenis" wrote:

Bonjour,

Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
et dans un autre fichier Excel, j'ai mis la procédure
que tu as publiée ici et j'ai lancé cette petite « sub »

Eh bien, cela a provoqué une erreur de type 70 et
elle m'a retourné « vrai», la valeur attendue.

J'ai répété la même manipulation, mais cette fois en
utilisant une instance différente de l'application Excel,
une contenant le fichier ouvert et l'autre pour effectuer
le test. Dans chaque cas, la procédure a retourné la
valeur attendue.

Tu procèdes autrement ?

Sub test()
MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
End Sub




"Antho87" a écrit dans le message de groupe de
discussion :
Bonjour,
Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
mais ne fonctionne pas sur toutes les versions d'excel.
En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
teste sans ouvrir le fichier s'il est déjà utilisé ou non.
J'ai eu un très bon code sur ce forum que voici :
Function IsFileOpen(filename As String)
Dim filenum As Integer, errnum As Integer

On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False

' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True

' Another error occurred.
Case Else
Error errnum
End Select
End Function
Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
faire des modifications sauf sur 2007. Le code considère le fichier déjà
ouvert, certes oui mais en lecture seule...
Si vous avez une idée je vous en remercie par avance




Avatar
Antho87
Merci pour votre aide.
Il y a un truc que je comprends pas trop sur le code c'est que là
actuellement je fais appel de mon premier code publié par ce code :

If IsFileOpen("Serveur2etest.xls") Then
MsgBox "L'utilisateur " &
ActiveWorkbook.BuiltinDocumentProperties(7).Value & " a le fichier de suivis
déjà ouvert." & vbCrLf & "Il est impossible de poursuivre l'opération." &
vbCrLf & "Veuillez essayer à nouveau dans quelques instants.", vbCritical,
"Erreur"
Unload chargement
Exit Sub
Else
Workbooks.Open "Serveur2etest.xls"
End If

Le fichier a testé est au format .xls, car une majorité de PC avec excel
2003. Le problème est que sur excel 2007 le test renvoie que le fichier est
indisponible à partir du moment qu'il est ouvert que ce soit en mode
lecture/ecriture ou simple lecture sur un autre PC avec excel 2003 ou 2007.
J'ai l'impression que excel 2007 ne fait pas de différence entre une
ouverture en lecture seule et une ouverture pure du fichier.
Je vais faire des essais entre midi et deux quand un PC sera dispo.
Merci encore


"MichDenis" wrote:

A )

à partir de la procédure générale publiée dans ton premier message :
sous excel 2007,
'-------------------------------------------
Sub test()
MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
End Sub
'-------------------------------------------

Si le fichier testé n'est pas en lecture seule, la procédure "Test" retourne "vrai"
lorsque le fichier est ouvert.
si le fichier ouvert est en lecture seule, la procédure retourne "False".

La procédure a été testée avec des fichiers au format Excel 2007. Normalement
lorsqu'Excel 2007 ouvre un fichier .xls , ce fichier est ouvert en mode "compatibilité"
il deviendra un fichier au format 2007 seulement après avoir été enregistré au format
2007, fermé et rouvert à nouveau.






"Antho87" a écrit dans le message de groupe de
discussion :
Bonsoir MichDenis,

Visiblement on se retrouve...

En fait le fichier A.xls est ouvert en lecture seule sur excel 2000 ou 2003
et si une personne tente de l'ouvrir pour modifier avec excel 2007, le sub se
lance est détecte le fichier ouvert et donc, l'erreur 70 comme quoi le
fichier est déjà utilisé.
Alors que sur Excel 2000 ou 2003, si je vérifie si le fichier est dispo ou
non et il n'a pas l'erreur 70 car fichier en lecture seule simplement.

On dirait que excel 2000 ou 2003 retourne l'erreur 70 si le fichier est
ouvert en lecture/ecriture mais par contre sur excel 2007 il retourne
l'erreur 70 même si le fichier est ouvert en lecture seule.

Ce n'est qu'une impression...

Merci encore pour l'aide

"MichDenis" wrote:

> Bonjour,
>
> Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
> et dans un autre fichier Excel, j'ai mis la procédure
> que tu as publiée ici et j'ai lancé cette petite « sub »
>
> Eh bien, cela a provoqué une erreur de type 70 et
> elle m'a retourné « vrai», la valeur attendue.
>
> J'ai répété la même manipulation, mais cette fois en
> utilisant une instance différente de l'application Excel,
> une contenant le fichier ouvert et l'autre pour effectuer
> le test. Dans chaque cas, la procédure a retourné la
> valeur attendue.
>
> Tu procèdes autrement ?
>
> Sub test()
> MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
> End Sub
>
>
>
>
> "Antho87" a écrit dans le message de groupe de
> discussion :
> Bonjour,
> Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
> mais ne fonctionne pas sur toutes les versions d'excel.
> En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
> si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
> teste sans ouvrir le fichier s'il est déjà utilisé ou non.
> J'ai eu un très bon code sur ce forum que voici :
> Function IsFileOpen(filename As String)
> Dim filenum As Integer, errnum As Integer
>
> On Error Resume Next ' Turn error checking off.
> filenum = FreeFile() ' Get a free file number.
> ' Attempt to open the file and lock it.
> Open filename For Input Lock Read As #filenum
> Close filenum ' Close the file.
> errnum = Err ' Save the error number that occurred.
> On Error GoTo 0 ' Turn error checking back on.
>
> ' Check to see which error occurred.
> Select Case errnum
>
> ' No error occurred.
> ' File is NOT already open by another user.
> Case 0
> IsFileOpen = False
>
> ' Error number for "Permission Denied."
> ' File is already opened by another user.
> Case 70
> IsFileOpen = True
>
> ' Another error occurred.
> Case Else
> Error errnum
> End Select
> End Function
> Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
> En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
> faire des modifications sauf sur 2007. Le code considère le fichier déjà
> ouvert, certes oui mais en lecture seule...
> Si vous avez une idée je vous en remercie par avance
>
>



Avatar
Antho87
Bonjour,
Je n'ai pu faire des essais qu'hier soir finalement et donc voici la
situation avec le code :
Le fichier à modifier par plusieurs personnes et consultable en lecture
seule est appelée global.xls.
Donc une ouverture directe du fichier permet une simple lecture avec le
fichier en lecture seule.
Chacune des personnes dispose d'un fichier atitré pour modifier leurs
fichiers persos et le fichier global qui, en fait, regroupe les données de
tout le monde.
Voici l'essai où j'ai un problème:
Le fichier global.xls est ouvert en lecture seule sur le réseau
Utilisateur toto utilise son fichier toto.xls pour modifier ses données.
- sur excel 2000 et 2003, il peut modifier le fichier global mais si ouvert
ailleurs en lecture seule
- sur excel 2007, retourne le message comme quoi le fichier est
indisponible, comme s'il était ouvert en lecture/ecriture.

Mes fichiers sont tous au format .xls.
Voilà le problème un peu plus concrètement que je rencontre et que je
n'explique pas. Est-ce un problème avec le code ou un problème de config avec
excel 2007 entre les formats .xls et .xlsx

Merci

"Antho87" wrote:

Merci pour votre aide.
Il y a un truc que je comprends pas trop sur le code c'est que là
actuellement je fais appel de mon premier code publié par ce code :

If IsFileOpen("Serveur2etest.xls") Then
MsgBox "L'utilisateur " &
ActiveWorkbook.BuiltinDocumentProperties(7).Value & " a le fichier de suivis
déjà ouvert." & vbCrLf & "Il est impossible de poursuivre l'opération." &
vbCrLf & "Veuillez essayer à nouveau dans quelques instants.", vbCritical,
"Erreur"
Unload chargement
Exit Sub
Else
Workbooks.Open "Serveur2etest.xls"
End If

Le fichier a testé est au format .xls, car une majorité de PC avec excel
2003. Le problème est que sur excel 2007 le test renvoie que le fichier est
indisponible à partir du moment qu'il est ouvert que ce soit en mode
lecture/ecriture ou simple lecture sur un autre PC avec excel 2003 ou 2007.
J'ai l'impression que excel 2007 ne fait pas de différence entre une
ouverture en lecture seule et une ouverture pure du fichier.
Je vais faire des essais entre midi et deux quand un PC sera dispo.
Merci encore


"MichDenis" wrote:

> A )
>
> à partir de la procédure générale publiée dans ton premier message :
> sous excel 2007,
> '-------------------------------------------
> Sub test()
> MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
> End Sub
> '-------------------------------------------
>
> Si le fichier testé n'est pas en lecture seule, la procédure "Test" retourne "vrai"
> lorsque le fichier est ouvert.
> si le fichier ouvert est en lecture seule, la procédure retourne "False".
>
> La procédure a été testée avec des fichiers au format Excel 2007. Normalement
> lorsqu'Excel 2007 ouvre un fichier .xls , ce fichier est ouvert en mode "compatibilité"
> il deviendra un fichier au format 2007 seulement après avoir été enregistré au format
> 2007, fermé et rouvert à nouveau.
>
>
>
>
>
>
> "Antho87" a écrit dans le message de groupe de
> discussion :
> Bonsoir MichDenis,
>
> Visiblement on se retrouve...
>
> En fait le fichier A.xls est ouvert en lecture seule sur excel 2000 ou 2003
> et si une personne tente de l'ouvrir pour modifier avec excel 2007, le sub se
> lance est détecte le fichier ouvert et donc, l'erreur 70 comme quoi le
> fichier est déjà utilisé.
> Alors que sur Excel 2000 ou 2003, si je vérifie si le fichier est dispo ou
> non et il n'a pas l'erreur 70 car fichier en lecture seule simplement.
>
> On dirait que excel 2000 ou 2003 retourne l'erreur 70 si le fichier est
> ouvert en lecture/ecriture mais par contre sur excel 2007 il retourne
> l'erreur 70 même si le fichier est ouvert en lecture seule.
>
> Ce n'est qu'une impression...
>
> Merci encore pour l'aide
>
> "MichDenis" wrote:
>
> > Bonjour,
> >
> > Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
> > et dans un autre fichier Excel, j'ai mis la procédure
> > que tu as publiée ici et j'ai lancé cette petite « sub »
> >
> > Eh bien, cela a provoqué une erreur de type 70 et
> > elle m'a retourné « vrai», la valeur attendue.
> >
> > J'ai répété la même manipulation, mais cette fois en
> > utilisant une instance différente de l'application Excel,
> > une contenant le fichier ouvert et l'autre pour effectuer
> > le test. Dans chaque cas, la procédure a retourné la
> > valeur attendue.
> >
> > Tu procèdes autrement ?
> >
> > Sub test()
> > MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
> > End Sub
> >
> >
> >
> >
> > "Antho87" a écrit dans le message de groupe de
> > discussion :
> > Bonjour,
> > Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
> > mais ne fonctionne pas sur toutes les versions d'excel.
> > En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
> > si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
> > teste sans ouvrir le fichier s'il est déjà utilisé ou non.
> > J'ai eu un très bon code sur ce forum que voici :
> > Function IsFileOpen(filename As String)
> > Dim filenum As Integer, errnum As Integer
> >
> > On Error Resume Next ' Turn error checking off.
> > filenum = FreeFile() ' Get a free file number.
> > ' Attempt to open the file and lock it.
> > Open filename For Input Lock Read As #filenum
> > Close filenum ' Close the file.
> > errnum = Err ' Save the error number that occurred.
> > On Error GoTo 0 ' Turn error checking back on.
> >
> > ' Check to see which error occurred.
> > Select Case errnum
> >
> > ' No error occurred.
> > ' File is NOT already open by another user.
> > Case 0
> > IsFileOpen = False
> >
> > ' Error number for "Permission Denied."
> > ' File is already opened by another user.
> > Case 70
> > IsFileOpen = True
> >
> > ' Another error occurred.
> > Case Else
> > Error errnum
> > End Select
> > End Function
> > Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
> > En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
> > faire des modifications sauf sur 2007. Le code considère le fichier déjà
> > ouvert, certes oui mais en lecture seule...
> > Si vous avez une idée je vous en remercie par avance
> >
> >
>


Avatar
MichDenis
Je ne t'ai pas oublié, mais comme je n'ai pas un environnement réseau, je suis un peu
limité pour effectuer des tests. Cependant, j'aimerais apporter quelques commentaires.

A ) Généralement, lorsqu'un fichier est ouvert, si j'ouvre ce fichier dans une autre
instance d'excel, ce fichier est nécessairement ouvert en lecture seule, en supposant que
ce fichier n'a pas le statut de fichier partagé. Est-ce que tu as des situations où cet
axiome n'est pas vrai ? Si oui, décris un peu la situtation...

B ) Sous Excel 2003, la fonction ci-bas, retourne "vrai" si le fichier testé est ouvert.
Cela veut dire que si quelqu'un d'autre ouvre ce fichier, il sera en mode lecture seule
... Non ?

C ) J'ai refait le test en utilisant Excel 2007, la fonction retourne lui aussi "Vrai" si
le fichier est ouvert. En conséquence, toute nouvelle ouverture du fichier le sera en
lecture seule non ?

D ) Le fait d'être en lecture seule, n'empêche pas d'ouvrir le fichier ou de le modifier
mais la personne ne pourra l'enregistrer sous le même nom.

E ) Ces tests n'ont pas été faits en réseau, je cherche seulement à comprendre ta
problématique.

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

On Error Resume Next ' Turn error checking off.
filenum = FreeFile() ' Get a free file number.
' Attempt to open the file and lock it.
Open filename For Input Lock Read As #filenum
Close filenum ' Close the file.
errnum = Err ' Save the error number that occurred.
On Error GoTo 0 ' Turn error checking back on.

' Check to see which error occurred.
Select Case errnum

' No error occurred.
' File is NOT already open by another user.
Case 0
IsFileOpen = False
' Error number for "Permission Denied."
' File is already opened by another user.
Case 70
IsFileOpen = True
' Another error occurred.
Case Else
Error errnum
End Select
End Function
'----------------------------------------------



"Antho87" a écrit dans le message de groupe de
discussion :
Bonjour,
Je n'ai pu faire des essais qu'hier soir finalement et donc voici la
situation avec le code :
Le fichier à modifier par plusieurs personnes et consultable en lecture
seule est appelée global.xls.
Donc une ouverture directe du fichier permet une simple lecture avec le
fichier en lecture seule.
Chacune des personnes dispose d'un fichier atitré pour modifier leurs
fichiers persos et le fichier global qui, en fait, regroupe les données de
tout le monde.
Voici l'essai où j'ai un problème:
Le fichier global.xls est ouvert en lecture seule sur le réseau
Utilisateur toto utilise son fichier toto.xls pour modifier ses données.
- sur excel 2000 et 2003, il peut modifier le fichier global mais si ouvert
ailleurs en lecture seule
- sur excel 2007, retourne le message comme quoi le fichier est
indisponible, comme s'il était ouvert en lecture/ecriture.

Mes fichiers sont tous au format .xls.
Voilà le problème un peu plus concrètement que je rencontre et que je
n'explique pas. Est-ce un problème avec le code ou un problème de config avec
excel 2007 entre les formats .xls et .xlsx

Merci

"Antho87" wrote:

Merci pour votre aide.
Il y a un truc que je comprends pas trop sur le code c'est que là
actuellement je fais appel de mon premier code publié par ce code :

If IsFileOpen("Serveur2etest.xls") Then
MsgBox "L'utilisateur " &
ActiveWorkbook.BuiltinDocumentProperties(7).Value & " a le fichier de suivis
déjà ouvert." & vbCrLf & "Il est impossible de poursuivre l'opération." &
vbCrLf & "Veuillez essayer à nouveau dans quelques instants.", vbCritical,
"Erreur"
Unload chargement
Exit Sub
Else
Workbooks.Open "Serveur2etest.xls"
End If

Le fichier a testé est au format .xls, car une majorité de PC avec excel
2003. Le problème est que sur excel 2007 le test renvoie que le fichier est
indisponible à partir du moment qu'il est ouvert que ce soit en mode
lecture/ecriture ou simple lecture sur un autre PC avec excel 2003 ou 2007.
J'ai l'impression que excel 2007 ne fait pas de différence entre une
ouverture en lecture seule et une ouverture pure du fichier.
Je vais faire des essais entre midi et deux quand un PC sera dispo.
Merci encore


"MichDenis" wrote:

> A )
>
> à partir de la procédure générale publiée dans ton premier message :
> sous excel 2007,
> '-------------------------------------------
> Sub test()
> MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
> End Sub
> '-------------------------------------------
>
> Si le fichier testé n'est pas en lecture seule, la procédure "Test" retourne "vrai"
> lorsque le fichier est ouvert.
> si le fichier ouvert est en lecture seule, la procédure retourne "False".
>
> La procédure a été testée avec des fichiers au format Excel 2007. Normalement
> lorsqu'Excel 2007 ouvre un fichier .xls , ce fichier est ouvert en mode
> "compatibilité"
> il deviendra un fichier au format 2007 seulement après avoir été enregistré au format
> 2007, fermé et rouvert à nouveau.
>
>
>
>
>
>
> "Antho87" a écrit dans le message de groupe de
> discussion :
> Bonsoir MichDenis,
>
> Visiblement on se retrouve...
>
> En fait le fichier A.xls est ouvert en lecture seule sur excel 2000 ou 2003
> et si une personne tente de l'ouvrir pour modifier avec excel 2007, le sub se
> lance est détecte le fichier ouvert et donc, l'erreur 70 comme quoi le
> fichier est déjà utilisé.
> Alors que sur Excel 2000 ou 2003, si je vérifie si le fichier est dispo ou
> non et il n'a pas l'erreur 70 car fichier en lecture seule simplement.
>
> On dirait que excel 2000 ou 2003 retourne l'erreur 70 si le fichier est
> ouvert en lecture/ecriture mais par contre sur excel 2007 il retourne
> l'erreur 70 même si le fichier est ouvert en lecture seule.
>
> Ce n'est qu'une impression...
>
> Merci encore pour l'aide
>
> "MichDenis" wrote:
>
> > Bonjour,
> >
> > Sous Excel 2007, j'ai ouvert un fichier Excel (xlsx)
> > et dans un autre fichier Excel, j'ai mis la procédure
> > que tu as publiée ici et j'ai lancé cette petite « sub »
> >
> > Eh bien, cela a provoqué une erreur de type 70 et
> > elle m'a retourné « vrai», la valeur attendue.
> >
> > J'ai répété la même manipulation, mais cette fois en
> > utilisant une instance différente de l'application Excel,
> > une contenant le fichier ouvert et l'autre pour effectuer
> > le test. Dans chaque cas, la procédure a retourné la
> > valeur attendue.
> >
> > Tu procèdes autrement ?
> >
> > Sub test()
> > MsgBox IsFileOpen("c:usersdmdocumentstest.xlsx")
> > End Sub
> >
> >
> >
> >
> > "Antho87" a écrit dans le message de groupe de
> > discussion :
> > Bonjour,
> > Je vous sollicite à nouveau pour toujours mon même problème qui a été résolu
> > mais ne fonctionne pas sur toutes les versions d'excel.
> > En fait un utilisateur 1 utilise un fichier B qui met à jour un fichier A et
> > si un utilisateur 2 utilise un fichier C qui met à jour le fichier A alors je
> > teste sans ouvrir le fichier s'il est déjà utilisé ou non.
> > J'ai eu un très bon code sur ce forum que voici :
> > Function IsFileOpen(filename As String)
> > Dim filenum As Integer, errnum As Integer
> >
> > On Error Resume Next ' Turn error checking off.
> > filenum = FreeFile() ' Get a free file number.
> > ' Attempt to open the file and lock it.
> > Open filename For Input Lock Read As #filenum
> > Close filenum ' Close the file.
> > errnum = Err ' Save the error number that occurred.
> > On Error GoTo 0 ' Turn error checking back on.
> >
> > ' Check to see which error occurred.
> > Select Case errnum
> >
> > ' No error occurred.
> > ' File is NOT already open by another user.
> > Case 0
> > IsFileOpen = False
> >
> > ' Error number for "Permission Denied."
> > ' File is already opened by another user.
> > Case 70
> > IsFileOpen = True
> >
> > ' Another error occurred.
> > Case Else
> > Error errnum
> > End Select
> > End Function
> > Cette solution est vraiment très bien mais ne fonctionne pas sur Excel 2007.
> > En effet, si le fichier est ouvert en lecture seule, on peut l'ouvrir pour y
> > faire des modifications sauf sur 2007. Le code considère le fichier déjà
> > ouvert, certes oui mais en lecture seule...
> > Si vous avez une idée je vous en remercie par avance
> >
> >
>