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

Le
Emile63
Bonjour tous,
J'ai un modle de classeur de type formulaire(xltm), qui au moment de sa =
fermeture (BeforeClose), enregistre un certain nombre de donnes contenue=
s dans ces cellules dans un autre classeur sous forme de base de donnes =
afin de garder un historique.
Malheureusement, travaillant plusieurs personnes sur ce modle, il ar=
rive que l'on accde simultanment au classeur d'historique, du coup le=
s donnes du dernier qui essaie d'y accder ne son pas enregistres c=
ar dj ouvert.
Je souhaiterais donc ajouter un petit controle qui diffre l'ouverture de=
quelques secondes (5) par un timer le cas chant, ou si le classeur e=
st toujours inaccessible aprs ce dlai, un message qui indique un prob=
lme d'accs et la fermeture de la proc. en cours.

Ci dessous la partie en question de ma procdure:

' Procdure
Set Wk = Workbooks.Open(Rpertoire & "" & Fichier)

'
' Ici, je souhaiterais mettre un contrle au cas ou le classeur en questi=
on soit dj ouvert
' par un timer de 5 secondes, et si toujours ouvert, un message d'alerte en=
fin de la procdure.
'

MonLien = CStr(Tableau_Donnes(18))
With Wk
With .Worksheets(Feuille)
DerLig = .Range("A" & .Rows.Count).End(xlUp).Row + 1
.Range("A" & DerLig) = CDate(Tableau_Donnes(13)) 'Date
.Range("B" & DerLig) = CStr(Tableau_Donnes(9)) ' Test
.Range("C" & DerLig) = CStr(Tableau_Donnes(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