Fonction FindWindows en VBA
Résolu
lecrol
Messages postés
214
Statut
Membre
-
lecrol Messages postés 214 Statut Membre -
lecrol Messages postés 214 Statut Membre -
Bonjour,
J'ai une appli développée depuis pas mal d'années déjà (et dont je ne reconnais plus très bien le code !).
Depuis un formulaire Access, je veux aller sur une feuille Excel, et dans une cellule bien précise, en correspondance avec mon champ Access sur le formulaire de départ
Pour cela, je déroule une macro Demarre_excel() qui cherche d'abord si Excel est déjà ouvert, une instance en mémoire, ou si c'est le premier appel
d'Excel.
Jusque là tout fonctionnait bien. Mais j'ai à présent une erreur sur la fonction FindWindows ( "Sub ou fonction non définie" )
Je n'en vois pas du tout l'explication. Entre temps, j'ai certainement réinstallé Microsoft office depuis mon Cd. Est-ce une piste ?
Si je ne trouve pas, je vais devoir réécrire le truc d'une toute autre manière.
Qui peut m'aider ?
A toutes fins utiles je vous mets ci-dessous le code employé
Merci d'avance
Roland
-----------------------
Sub DetectExcel()
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("XLMAIN", 0) C'est là que ça plante !!!!!
If hWnd = 0 Then
Exit Sub
Else
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
--------------------------------------------
Cette sub est appelée par:
-----
Sub Demarre_Excel()
Dim MyXL As Object
Dim ExcelWasNotRunning As Boolean
Dim fichouv As Boolean
fichouv = 0
' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
ExcelWasNotRunning = True
Call DetectExcel
' Définit la variable objet faisant référence au fichier à ouvrir.
Set MyXL = GetObject("C:\Mythologie\Organigramme_mytho.XLS")
fichouv = 1
'DoCmd.Close acForm, "Personnages", acSaveYes
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
GoTo Suite
End If
'DoCmd.Close acForm, "Personnages", acSaveYes
MyXL.Application.WindowState = vbMaximizedFocus
MyXL.Visible = True
MyXL.Parent.Windows(1).Visible = True
Suite:
If fichouv = 0 Then
MyXL.Run "Organigramme"
End If
Set MyXL = Nothing ' Libère la référence à l'application
' et à la feuille de calcul.
End Sub
-------------------------------------------------------------------------------
elle même appelée, depuis le formulaire, par
Private Sub Commande33_click()On Error GoTo Err_Commande33_Click
Nomp = Forms!Personnages!Repertoire!Page.Value & [Nom]
'
SaveSetting "Mytho", "Lien_excel", "Nom", Nomp
Call Demarre_Excel
Exit_Commande33_Click:
Exit Sub
Err_Commande33_Click:
MsgBox Err.Description
Resume Exit_Commande33_Click
End Sub
----------------------------------------------------------------
J'ai une appli développée depuis pas mal d'années déjà (et dont je ne reconnais plus très bien le code !).
Depuis un formulaire Access, je veux aller sur une feuille Excel, et dans une cellule bien précise, en correspondance avec mon champ Access sur le formulaire de départ
Pour cela, je déroule une macro Demarre_excel() qui cherche d'abord si Excel est déjà ouvert, une instance en mémoire, ou si c'est le premier appel
d'Excel.
Jusque là tout fonctionnait bien. Mais j'ai à présent une erreur sur la fonction FindWindows ( "Sub ou fonction non définie" )
Je n'en vois pas du tout l'explication. Entre temps, j'ai certainement réinstallé Microsoft office depuis mon Cd. Est-ce une piste ?
Si je ne trouve pas, je vais devoir réécrire le truc d'une toute autre manière.
Qui peut m'aider ?
A toutes fins utiles je vous mets ci-dessous le code employé
Merci d'avance
Roland
-----------------------
Sub DetectExcel()
Const WM_USER = 1024
Dim hWnd As Long
hWnd = FindWindow("XLMAIN", 0) C'est là que ça plante !!!!!
If hWnd = 0 Then
Exit Sub
Else
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub
--------------------------------------------
Cette sub est appelée par:
-----
Sub Demarre_Excel()
Dim MyXL As Object
Dim ExcelWasNotRunning As Boolean
Dim fichouv As Boolean
fichouv = 0
' Test pour déterminer si une copie de Microsoft Excel
' est déjà en exécution.
On Error Resume Next
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
ExcelWasNotRunning = True
Call DetectExcel
' Définit la variable objet faisant référence au fichier à ouvrir.
Set MyXL = GetObject("C:\Mythologie\Organigramme_mytho.XLS")
fichouv = 1
'DoCmd.Close acForm, "Personnages", acSaveYes
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
GoTo Suite
End If
'DoCmd.Close acForm, "Personnages", acSaveYes
MyXL.Application.WindowState = vbMaximizedFocus
MyXL.Visible = True
MyXL.Parent.Windows(1).Visible = True
Suite:
If fichouv = 0 Then
MyXL.Run "Organigramme"
End If
Set MyXL = Nothing ' Libère la référence à l'application
' et à la feuille de calcul.
End Sub
-------------------------------------------------------------------------------
elle même appelée, depuis le formulaire, par
Private Sub Commande33_click()On Error GoTo Err_Commande33_Click
Nomp = Forms!Personnages!Repertoire!Page.Value & [Nom]
'
SaveSetting "Mytho", "Lien_excel", "Nom", Nomp
Call Demarre_Excel
Exit_Commande33_Click:
Exit Sub
Err_Commande33_Click:
MsgBox Err.Description
Resume Exit_Commande33_Click
End Sub
----------------------------------------------------------------
2 réponses
Bonjour,
FindWindow est une fonction API, il faut peut être voir du coté de sa déclaration.
https://support.microsoft.com/fr-fr/help/465928
eric
FindWindow est une fonction API, il faut peut être voir du coté de sa déclaration.
https://support.microsoft.com/fr-fr/help/465928
eric