1 pièce(s) jointe(s)
Détection erronée de classeurs Excel ouverts via Access
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:
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:
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:
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 :
Pièce jointe 659543
Si quelqu’un a une piste...