Workbook ne s'exécute pas après un Workbooks.Open
Bonjour à tous,
J'ai dans un classeur un bouton qui n'apparait que si ThisWorkbook.ReadOnly est vrai.
Dans un module standard :
- Une fonction qui test si le fichier ouvert est disponible ou non :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Function IsFileOpen(filename As String)
Dim Filenum%, Errnum%
On Error Resume Next
Filenum = FreeFile()
'Test d'ouverture du fichier.
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 |
- Une procédure sur le bouton qui va test la disponibilité du fichier et afficher un message pouvant proposer l'ouverture de celui-ci s'il est disponible :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| Sub TesterLectureSeule()
Dim Message$, Titre$
Titre = " Lecture Seule"
If IsFileOpen(ThisWorkbook.FullName) Then
Message = "Le classeur est toujours réservé par un autre utilisateur."
MsgBox Message, vbInformation, Titre
Else
Message = "Le classeur est maintenant disponible." & vbNewLine & vbNewLine & _
"Voulez-vous l'ouvrir en lecture / écriture ?"
Select Case MsgBox(Message, vbInformation + vbYesNo, Titre)
Case vbNo
'rien
Case vbYes
Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur"
ThisWorkbook.Close (False)
End Select
End If
End Sub |
- Une procédure pour s'auto-ouvrir :
Code:
1 2 3
| Sub OuvrirCeClasseur()
Workbooks.Open ThisWorkbook.FullName
End Sub |
Dans le module ThisWorkbook :
Code:
1 2 3
| Private Sub Workbook_Open()
MsgBox "execution de Workbook_Open"
End Sub |
Vous pouvez voir que les deux lignes :
Code:
1 2
| Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur"
ThisWorkbook.Close (False) |
programment l'ouverture du fichier dans 3 secondes et le ferme. L'instance Excel restant ouvert, la procédure OuvrirCeClasseur va bien s'exécuter.
Mon problème est que le fichier se rouvre bien en lecture / écriture mais l'évènement Workbook_Open ne s'exécute pas.
Savez-vous pourquoi ? Et auriez-vous des pistes à explorer pour régler le problème ?