Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tester si fichier Excel ouvert ou pas ?

2 réponses
Avatar
Jacques
Bonjour,

J'utilise le code de l'aide Powerpoint pour ouvrir un classeur Excel mais
comment savoir si le fichier Excel était déjà ouvert?

Merci



' Déclare les routines d'API nécessaires:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object ' Variable devant contenir la
' référence à Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Indicateur de libération finale.

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next ' Retarde la récupération d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une instance de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Efface l'objet Err si une erreur s'est produite.

' Vérifie si Microsoft Excel est en exécution.
' Dans ce cas, l'ajoute à la table Running Object.
DetectExcel

' Définit la variable objet faisant référence au fichier à ouvrir.
Set MyXL = Getobject("c:\vb5\MONTEST.XLS")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre
' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
' Effectue des opérations sur votre
' fichier ici.
' ...
' Si cette copie de Microsoft Excel n'était pas en cours
' d'exécution lorsque vous avez commencé, fermez-la
' à l'aide de la méthode Quit de la propriété
' Application.
' Notez que si vous tentez de quitter Microsoft Excel,
' la barre de titre clignote et un message s'affiche
' vous demandant si vous souhaitez enregistrer les
' fichiers chargés.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing ' Libère la référence à l'application
' et à la feuille de calcul.
End Sub

Sub DetectExcel()
' La procédure détecte une instance d'Excel en
' exécution et l'inscrit.
Const WM_USER = 1024
Dim hWnd As Long
' Si Excel est en exécution, cet appel d'API renvoie
' son descripteur.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 signifie qu'Excel n'était
' pas en exécution.
Exit Sub
Else
' Excel est en exécution, donc utilise la fonction
' d'API SendMessage pour l'entrer dans la table
' Running Object.
SendMessage hWnd, WM_USER + 18, 0, 0
End If

2 réponses

Avatar
JB
Bonjour

Function EstOuvert(f)
témoin = False
For Each i In Workbooks 'on parcourt la collection des classeurs
If UCase(i.Name) = UCase(f) Then témoin = True
Next i
EstOuvert = témoin
End Function

Sub essai()
If EstOuvert("x.xls") Then
MsgBox "ouvert"
Else
MsgBox "pas ouv"
End If
End Sub

JB

On 23 mar, 17:44, "Jacques" <none> wrote:
Bonjour,

J'utilise le code de l'aide Powerpoint pour ouvrir un classeur Excel mais
comment savoir si le fichier Excel était déjà ouvert?

Merci

' Déclare les routines d'API nécessaires:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
                    ByVal lpWindowName As Long) As Lon g

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
                    ByVal wParam as Long, _
                    ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object    ' Variable devant contenir la
                            ' référence à Microsoft Excel.
Dim ExcelWasNotRunning As Boolean    ' Indicateur de libération fina le.

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next    ' Retarde la récupération d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une instance de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear     ' Efface l'objet Err si une erreur s'est produite.

' Vérifie si Microsoft Excel est en exécution.
' Dans ce cas, l'ajoute à la table Running Object.
DetectExcel

' Définit la variable objet faisant référence au fichier à ouvrir.
Set MyXL = Getobject("c:vb5MONTEST.XLS")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre
' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
    ' Effectue des opérations sur votre
     ' fichier ici.
    ' ...
' Si cette copie de Microsoft Excel n'était pas en cours
' d'exécution lorsque vous avez commencé, fermez-la
' à l'aide de la méthode Quit de la propriété
' Application.
' Notez que si vous tentez de quitter Microsoft Excel,
' la barre de titre clignote et un message s'affiche
' vous demandant si vous souhaitez enregistrer les
' fichiers chargés.
If ExcelWasNotRunning = True Then
    MyXL.Application.Quit
End IF

Set MyXL = Nothing  ' Libère la référence à l'application
                          ' et à la feuille de calcul.
End Sub

Sub DetectExcel()
' La procédure détecte une instance d'Excel en
' exécution et l'inscrit.
    Const WM_USER = 1024
    Dim hWnd As Long
' Si Excel est en exécution, cet appel d'API renvoie
' son descripteur.
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then    ' 0 signifie qu'Excel n'était
                            ' pas en exécuti on.
        Exit Sub
    Else
    ' Excel est en exécution, donc utilise la fonction
    ' d'API SendMessage pour l'entrer dans la table
    ' Running Object.
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If


Avatar
Jacques
merci

"JB" a écrit dans le message de groupe de
discussion :

Bonjour

Function EstOuvert(f)
témoin = False
For Each i In Workbooks 'on parcourt la collection des classeurs
If UCase(i.Name) = UCase(f) Then témoin = True
Next i
EstOuvert = témoin
End Function

Sub essai()
If EstOuvert("x.xls") Then
MsgBox "ouvert"
Else
MsgBox "pas ouv"
End If
End Sub

JB

On 23 mar, 17:44, "Jacques" <none> wrote:
Bonjour,

J'utilise le code de l'aide Powerpoint pour ouvrir un classeur Excel mais
comment savoir si le fichier Excel était déjà ouvert?

Merci

' Déclare les routines d'API nécessaires:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long

Sub GetExcel()
Dim MyXL As Object ' Variable devant contenir la
' référence à Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Indicateur de libération finale.

' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next ' Retarde la récupération d'erreur.
' La fonction Getobject appelée sans le premier
' argument renvoie une référence à une instance de
' l'application. Si l'application n'est pas en
' exécution, une erreur se produit.
Set MyXL = Getobject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Efface l'objet Err si une erreur s'est produite.

' Vérifie si Microsoft Excel est en exécution.
' Dans ce cas, l'ajoute à la table Running Object.
DetectExcel

' Définit la variable objet faisant référence au fichier à ouvrir.
Set MyXL = Getobject("c:vb5MONTEST.XLS")

' Affiche Microsoft Excel par l'intermédiaire de sa
' propriété Application. Affiche ensuite la fenêtre
' contenant le fichier à l'aide de la collection
' Windows de la référence à l'objet MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
' Effectue des opérations sur votre
' fichier ici.
' ...
' Si cette copie de Microsoft Excel n'était pas en cours
' d'exécution lorsque vous avez commencé, fermez-la
' à l'aide de la méthode Quit de la propriété
' Application.
' Notez que si vous tentez de quitter Microsoft Excel,
' la barre de titre clignote et un message s'affiche
' vous demandant si vous souhaitez enregistrer les
' fichiers chargés.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF

Set MyXL = Nothing ' Libère la référence à l'application
' et à la feuille de calcul.
End Sub

Sub DetectExcel()
' La procédure détecte une instance d'Excel en
' exécution et l'inscrit.
Const WM_USER = 1024
Dim hWnd As Long
' Si Excel est en exécution, cet appel d'API renvoie
' son descripteur.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 signifie qu'Excel n'était
' pas en exécution.
Exit Sub
Else
' Excel est en exécution, donc utilise la fonction
' d'API SendMessage pour l'entrer dans la table
' Running Object.
SendMessage hWnd, WM_USER + 18, 0, 0
End If