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 :
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
Voici la procédure pour vérifier si des classeurs spécifiques sont ouverts :
Dans un module :

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
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
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
Voici le résultat d'une série de tests effectué. En vert la détection est correcte :

Nom : Détection classeurs ouverts.jpg
Affichages : 110
Taille : 253,6 Ko

Si quelqu’un a une piste...