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

Excel 2003 - GetObject

3 réponses
Avatar
Jacques
Bonjour,

Dans un code trouvé dans l'aide en ligne de microsoft, si le fichier excel
que l'on ouvre avec GetObject n'était pas déjà ouvert, un instruction
"quit" le referme. "MyXL.Application.Quit"

Je ne comprends pas pourquoi on referme une application que l'on voulait
ouvrir. Ne peut-on laisser le fichier ouvert et le refermer plus tard
manuellement?

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
End Sub

3 réponses

Avatar
Philippe.R
Bonjour,
Après survol, il me semble qu'il s'agit de fermer l'instance d'Excel lancée
en même temps que le classeur qu'on tente d'ouvrir (histoire de ne pas se
retrouver avec plusieurs instances ouvertes sans classeur actif)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Jacques" <none> a écrit dans le message de
news:
Bonjour,

Dans un code trouvé dans l'aide en ligne de microsoft, si le fichier excel
que l'on ouvre avec GetObject n'était pas déjà ouvert, un instruction
"quit" le referme. "MyXL.Application.Quit"

Je ne comprends pas pourquoi on referme une application que l'on voulait
ouvrir. Ne peut-on laisser le fichier ouvert et le refermer plus tard
manuellement?

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
End Sub





Avatar
Jacques
mais je peux toujours fermer manuellement non?


je ne comprends quand meme pas la logique de ce code de l'aide en ligne

il referme excel si excel n'etait pas deja ouvert

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de groupe
de discussion :
Bonjour,
Après survol, il me semble qu'il s'agit de fermer l'instance d'Excel lancée
en même temps que le classeur qu'on tente d'ouvrir (histoire de ne pas se
retrouver avec plusieurs instances ouvertes sans classeur actif)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Jacques" <none> a écrit dans le message de
news:
Bonjour,

Dans un code trouvé dans l'aide en ligne de microsoft, si le fichier excel
que l'on ouvre avec GetObject n'était pas déjà ouvert, un instruction
"quit" le referme. "MyXL.Application.Quit"

Je ne comprends pas pourquoi on referme une application que l'on voulait
ouvrir. Ne peut-on laisser le fichier ouvert et le refermer plus tard
manuellement?

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
End Sub





Avatar
Philippe.R
Bonjour,
Peut être simplement parce que l'instruction
Set MyXL = Getobject(, "Excel.Application")
créé une nouvelle instance d'Excel qu'il s'agit de refermer ensuite
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Jacques" <none> a écrit dans le message de
news:
mais je peux toujours fermer manuellement non?


je ne comprends quand meme pas la logique de ce code de l'aide en ligne

il referme excel si excel n'etait pas deja ouvert

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
groupe
de discussion :
Bonjour,
Après survol, il me semble qu'il s'agit de fermer l'instance d'Excel
lancée
en même temps que le classeur qu'on tente d'ouvrir (histoire de ne pas se
retrouver avec plusieurs instances ouvertes sans classeur actif)
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
"Jacques" <none> a écrit dans le message de
news:
Bonjour,

Dans un code trouvé dans l'aide en ligne de microsoft, si le fichier
excel
que l'on ouvre avec GetObject n'était pas déjà ouvert, un instruction
"quit" le referme. "MyXL.Application.Quit"

Je ne comprends pas pourquoi on referme une application que l'on voulait
ouvrir. Ne peut-on laisser le fichier ouvert et le refermer plus tard
manuellement?

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
End Sub