Partage Classeur excel utilisant des macros

  • Initiateur de la discussion Chris
  • Date de début
C

Chris

Guest
Bonjour,

Je sais que le message a déjà été abordé mais je n'ai pu trouver réponse à mes questions.

Voici mon problème :

J'ai un fichier excel utilisant des macros et je veux qu'il soit modifiable par d'autres utilisateurs.
La fonction partage d'excel ne marche pas dans mon cas donc j'ai deux fichiers, un qui va sur chaque bureau de chaque utilisateur et l'autre sur le disque dur réseau accessible à tous.

En gros, mon principe est simple :
Quand un utilisateur accède au fichier qui est sur le disque dur réseau et bien, il l'ouvre écris dedans .. et pendant ce temps là, ce fichier est bloqué pour les autres utilisateurs, un message s'affiche : 'Le classeur demandé est en cours d'utilisation' et une fois que l'utilisateur a terminé, il ferme le fichier et il devient à nouveau accessible.

Voilà, cette méthode aurait été très bien, seulement voilà le problème :

L'utilisateur ouvre le fichier (qui est sur le réseau) écris dedans et au moment ou il sauvegarde (juste avant de le fermer) avec 'ActiveWorkbook.Save' et bien à ce moment là, un autre utilisateur peut ouvrir ce meme fichier et je ne veux pas !

Moi je veux que le fichier qui est sur le disque dur réseau soit vérouillé et qu'on ne puisse pas l'ouvrir tant que l'utilisateur qui travail dessus n'a pas finis, c'est à dire tant que l'utilisateur n'a pas fermé le fichier.

j'ai utilisé cette fonction là :

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

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
On Error Resume Next
Error errnum
End Select
End Function

Elle marche très bien, si le fichier est ouvert, ça bloque l'accès mais si quelqu'un est en train de sauvegarder alors le fichier peut etre ouvert et ca me pose des problèmes !

Merci de votre aide,

Si vous voulez m'écrire, je suis joignable à cette adresse : windglide@gmail.com

Merci.
Chris.
 
C

Chris

Guest
Je ne connais pas trop son utilité mais je vais testé :)

Sinon pour information voici en résumé le code que j'ai :

J'ai ma fonction pour savoir si un fichier est ouvert ou non :

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

On Error Resume Next
filenum = FreeFile()
Open filename For Input Lock Read As #filenum
Close filenum
errnum = Err
On Error GoTo 0
Select Case errnum
Case 0
IsFileOpen = False
Case 70
IsFileOpen = True
Case Else
On Error Resume Next
Error errnum
End Select
End Function

Et la macro :

Dim Msg, Style, Title
If IsFileOpen('I:\\Classeur_Données.xls') Then
reponse = MsgBox('Le classeur demandé est en cours d'utilisation', , 'Prélude')
End
Else
Workbooks.Open 'I:\\Classeur_Données.xls'
End If

' Là j'ai mon code ou je mémorise des informations d'un autre classeur (celui qui n'est pas sur le disque dur réseau) pour les réecrire dans ce classeur données (celui qui est sur le disque dur réseau).

' Ensuite je sauvegarde les changements :

Workbooks('Classeur_Données.xls').Save

' Et je ferme

Workbooks('Classeur_Données.xls').Close


Normalement, pendant toute l'exécution de cette macro, le fichier en devrait etre accessible par aucun des utilisateurs, un message devrait apparaitre 'Le classeur demandé est en cours d'utilisation' parcque quelqu'un l'utilise déjà, il est déjà ouvert !
Mais si cette personne qui est en train de l'utiliser arrive à l'instruction 'Workbooks('Classeur_Données.xls').Save' donc en train de sauvegarder le classeur données et bien si à ce meme moment quelqu'un essaie d'accéder, d'ouvrir le classeur données et bien il peut ! Il arrive à l'ouvrir alors que je ne veux pas qu'il ouvre tant que l'utilisateur qui l'avait ouvert en premier ne l'a pas fermé.

J'espère etre assez clair et si quelqu'un aurait des idées à me proposer, je suis preneur.

Ca doit exister de bloquer l'accès à un fichier, je ne comprends pas pourquoi il y a une telle faille ...
 
C

Chris

Guest
Rebonjour,

Je ne vois pas trop comment utiliser la macro xlautoclose..
Il faudrait au moment de la sauvegarde que personne ne puisse y accéder. Pourquoi quand on sauvegarde, un autre utilisateur peut ouvrir ce meme fichier ? Excel ne considère plus le fichier comme 'ouvert' lorsque quelqu'un effectue un enregistrement sur ce fichier ?
 
C

Chris

Guest
Personne a de réponses à m'apporter ?

Il est facile d'empécher l'ouverture d'un classeur excel si celui ci est déjà ouvert. Ok mais un gros problème subsiste (je me répète) : lorsque quelqu'un est en train de sauvegarder le fichier et bien au meme moment si une autre personne tente d'ouvrir ce fichier, il peut !

Quand on sauvegarde un fichier celui ci n'est plus considéré comme 'ouvert' donc la fonction IsFileOpen (qui détermine si un fichier est ouvert ou non) ne marche plus pour bloquer l'accès à un fichier si celui ci est déjà ouvert.

Avez vous une idée pour y remédier ?
Faut-il changer la fonction IsFileOpen ou changer carrément de méthode ?

Je suis vraiment dans l'ombre et dans l'attente de toutes propositions.

Merci d'avance.
Chris.
 

Discussions similaires

Réponses
3
Affichages
365
Réponses
12
Affichages
247

Statistiques des forums

Discussions
312 206
Messages
2 086 222
Membres
103 159
dernier inscrit
FBallea