VBA, Comment éviter qu'une macro accède a un fichier déjà ouvert

Le
Emile63
Bonjour à tous,
J'ai un modèle de classeur de type formulaire(xltm), qui au moment de sa =
fermeture (BeforeClose), enregistre un certain nombre de données contenue=
s dans ces cellules dans un autre classeur sous forme de base de données =
afin de garder un historique.
Malheureusement, travaillant à plusieurs personnes sur ce modèle, il ar=
rive que l'on accède simultanément au classeur d'historique, du coup le=
s données du dernier qui essaie d'y accéder ne son pas enregistrées c=
ar déjà ouvert.
Je souhaiterais donc ajouter un petit controle qui diffère l'ouverture de=
quelques secondes (5) par un timer le cas échéant, ou si le classeur e=
st toujours inaccessible après ce délai, un message qui indique un prob=
lème d'accès et la fermeture de la proc. en cours.

Ci dessous la partie en question de ma procédure:

' Procédure
Set Wk = Workbooks.Open(Répertoire & "" & Fichier)

'
' Ici, je souhaiterais mettre un contrôle au cas ou le classeur en questi=
on soit déjà ouvert
' par un timer de 5 secondes, et si toujours ouvert, un message d'alerte en=
fin de la procédure.
'

MonLien = CStr(Tableau_Données(18))
With Wk
With .Worksheets(Feuille)
DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & DerLig) = CDate(Tableau_Données(13)) 'Date
.Range("B" & DerLig) = CStr(Tableau_Données(9)) ' Test
.Range("C" & DerLig) = CStr(Tableau_Données(10)) ' Essai
.Hyperlinks.Add Anchor:=ActiveSheet.Range("R" & DerLig), Addr=
ess:=MonLien, TextToDisplay:=MonLien, ScreenTip:="Ouvrir fichier"
End With

'. Suite de la proc.

En vous remerciant d'avance pour votre aide et conseils,
Cordialement
Emile
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26390641
Bonjour,

Une procédure qui parut sur ce site il y a for longtemps!


----------Début de copie----------

Moi j'ai un eu problème similaire en réseau NT avec Excel 2000.
Suite à l'aide de plusieurs sur ce forum (encore merci à El-Joker, Frédéric
Sigonneau et Thierry Rural, voir ficelle "Macro Workbooks.Open sur fichier
déjà en cours de lecture" du 10/12/2001 11:54) j'ai fini par réussir à faire
çà...

Pour ce genre de fichiers qui sont souvent ouverts (pas longtemps) par
d'autres utilisateurs, j'ai créé une interface d'ouverture (en fait un
personnal.xls dans le startup).
Cette interface (non hiden) contient les boutons d'ouverture directe des
fichiers en question.
Dans l'exemple le bouton d'ouverture de "Demand.xls" lance la macro
"CallDemands"

C'est radical! si le fichier est ouvert = Message (et il s'ouvre pas) sinon
il s'ouvre.

Voici le code : (à mettre dans un module standard du personnal.xls)
'--------------------------------------------------------
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
Error errnum
End Select
End Function
'--------------------------------------------------------
Sub CallDemands()
Dim Msg, Style, Title
If IsFileOpen("P:DevelopmentsDemand.xls") Then
MsgBox "File Already in use" & Chr(13) & "Please Try Latter"
Else
Workbooks.Open "P:DevelopmentsDemand.xls"
End If
End Sub
'--------------------------------------------------------
Patrick
Le #26390862
Archiviste en plus :)

Super de garder ces anciens codes :)

P.

Le 24-02-16 14:19, MichD a écrit :

Bonjour,

Une procédure qui parut sur ce site il y a for longtemps!


----------Début de copie----------

Moi j'ai un eu problème similaire en réseau NT avec Excel 2000.
Suite à l'aide de plusieurs sur ce forum (encore merci à El-Joker, Frédéric
Sigonneau et Thierry Rural, voir ficelle "Macro Workbooks.Open sur fichier
déjà en cours de lecture" du 10/12/2001 11:54) j'ai fini par réussir à
faire
çà...

Pour ce genre de fichiers qui sont souvent ouverts (pas longtemps) par
d'autres utilisateurs, j'ai créé une interface d'ouverture (en fait un
personnal.xls dans le startup).
Cette interface (non hiden) contient les boutons d'ouverture directe des
fichiers en question.
Dans l'exemple le bouton d'ouverture de "Demand.xls" lance la macro
"CallDemands"

C'est radical! si le fichier est ouvert = Message (et il s'ouvre pas) sinon
il s'ouvre.

Voici le code : (à mettre dans un module standard du personnal.xls)
'--------------------------------------------------------
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
Error errnum
End Select
End Function
'--------------------------------------------------------
Sub CallDemands()
Dim Msg, Style, Title
If IsFileOpen("P:DevelopmentsDemand.xls") Then
MsgBox "File Already in use" & Chr(13) & "Please Try Latter"
Else
Workbooks.Open "P:DevelopmentsDemand.xls"
End If
End Sub
'--------------------------------------------------------
Patrick
Le #26390861
Archiviste en plus :)

Super de garder ces anciens codes :)

P.


Le 24-02-16 14:19, MichD a écrit :

Bonjour,

Une procédure qui parut sur ce site il y a for longtemps!


----------Début de copie----------

Moi j'ai un eu problème similaire en réseau NT avec Excel 2000.
Suite à l'aide de plusieurs sur ce forum (encore merci à El-Joker, Frédéric
Sigonneau et Thierry Rural, voir ficelle "Macro Workbooks.Open sur fichier
déjà en cours de lecture" du 10/12/2001 11:54) j'ai fini par réussir à
faire
çà...
Publicité
Poster une réponse
Anonyme