Bonjour,
À partir d'un formulaire, j'aimerais savoir si des classeurs Excel spécifiques sont ouverts.
Lorsqu'un ou plusieurs de ceux-ci ont été ouverts via Excel ou via l'explorateur Windows, ou si un des classeurs seulement a été ouvert via Access, tout fonctionne parfaitement, mais si plusieurs classeurs ont été ouverts via Access, la détection est erronée. La détection est également correcte, lorsqu'aucun des classeurs n'est ouvert.
Voici la procédure pour ouvrir les classeurs :
Voici la procédure pour vérifier si des classeurs spécifiques sont ouverts :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Function OuvrirFichierXLS(Fichier As String) Dim xl As Object 'Excel Application Dim wb As Object 'Excel Workbook Set xl = CreateObject("Excel.Application") Set wb = xl.Workbooks.Open(Fichier) xl.Visible = True Set wb = Nothing Set xl = Nothing End Function
Dans un module :
Dans une procédure:
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
19
20
21
22
23 Function IsExcelWorkbookOpen(wbName As String) As Boolean Dim xlApp As Object Dim xlWorkbook As Object On Error Resume Next Set xlApp = GetObject(, "Excel.Application") On Error GoTo 0 If Not xlApp Is Nothing Then For Each xlWorkbook In xlApp.Workbooks If xlWorkbook.Name = wbName Then IsExcelWorkbookOpen = True Exit Function End If Next xlWorkbook End If IsExcelWorkbookOpen = False Set xlApp = Nothing Set xlWorkbook = Nothing End Function
Voici le résultat d'une série de tests effectué. En vert la détection est correcte :
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
19 Private Sub cmdCheckWorkbookOpen_Click() Dim WorkbookName As String Dim OpenWorkbook As Boolean Dim i As Integer Dim FileList() As Variant ' Liste des fichiers FileList = Array("Classeur1.xlsm", "Classeur2.xlsm", "Classeur3.xlsm") For i = LBound(params) To UBound(params) WorkbookName = FileList(i) If IsExcelWorkbookOpen(WorkbookName) Then OpenWorkbook = True MsgBox "Le classeur : " & WorkbookName & " est ouvert." Else MsgBox "Le classeur : " & WorkbookName & " est fermé." End If Next i End Sub
Si quelqu’un a une piste...
Partager