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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Dans le module ThisWorkbook :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Sub OuvrirCeClasseur() Workbooks.Open ThisWorkbook.FullName End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub Workbook_Open() MsgBox "execution de Workbook_Open" End Sub
Vous pouvez voir que les deux lignes :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Application.OnTime Now + TimeSerial(0, 0, 3), "OuvrirCeClasseur" ThisWorkbook.Close (False)
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 ?
Partager