Ouverture fichier excel réseau

cs_seblomb Messages postés 36 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 avril 2003 - 27 mai 2002 à 10:20
cs_seblomb Messages postés 36 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 avril 2003 - 10 sept. 2003 à 10:03
Bonjour,

J'ai fait une petite application qui ouvre un fichier excel qui se trouve sur réseau et lance macro de ce fichier, avec un code du type:

On error Resume Next
Dim Obj As Object
Set Obj=createobject("Excel.Application")
Obj.Workbooks.Open ("\\lechemin\doc.xls")
Obj.Application.Run "Macro1!doc.xls"
End Sub

ça marche, mais lorsque ce fichier est utilisé par une autre personne, il est ouvert en lecture seule mais sans laisser le choix de quand même l'ouvrir, ou recevoir une notification, ou annuler l'ouverture...
Y a-t-il un moyen d'éviter d'ouvrir le classeur excel s'il est déjà ouvert, et d'envoyer une notification dès qu'il est disponible?

J'espère que j'ai été clair...

Seblomb

2 réponses

Willo06 Messages postés 3 Date d'inscription mercredi 3 septembre 2003 Statut Membre Dernière intervention 24 septembre 2003
9 sept. 2003 à 22:09
Salut !
J'ai peut etre trouve sur un site web une solution pour ton probleme :

Tout d'abord dans un module standart colle les declarations suivantes :

'ici c'est le debut
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
'ici c'est la fin

Puis cree ta macro qui va te permettre d'ouvrir le fichier si celui ci est disponible ou de faire appelle a une autre macro
qui va faire patienter l'utilisateur 10 secondes et apres la macro1 va reessayer.

'ici c'est le debut
Sub Mac1()
If IsFileOpen("C:\Mes Documents\Start.xls") Then Call Mac2 Else Workbooks.Open "C:\Mes Documents\Start.xls"
End Sub
'ici c'est la fin

'ici c'est le debut
Sub Mac2()
NewHour = Hour(Now())
NewMinute = Minute(Now())
NewSecond = Second(Now()) + 10
WaitingTime = TimeSerial(NewHour,NewMinute,NewSecond)
Application.Wait WaitingTime
Call Mac1
End Sub
'ici c'est la fin

En esperant que cela va t'aider meme si je viens de m'apercevoir que ton message date un peu.... :o)

Willo06
0
cs_seblomb Messages postés 36 Date d'inscription dimanche 22 octobre 2000 Statut Membre Dernière intervention 4 avril 2003
10 sept. 2003 à 10:03
Merci de ta réponse. Effectivement ça date un peu (c'était pour mon stage de fin d'étude y a un an). Et depuis je travaille plus sur VB, mais ça fait plaisir de savoir comment on fait.

Et puis ta réponse servira surement à quelqu'un d'autre. Tu n'as pas fait ça pour rien.

Cordialement,
Sébastien.
0
Rejoignez-nous