Excel VBA IDE / menu insertion/composants: ou est-il?????
maddav
Messages postés3Date d'inscriptionjeudi 17 mai 2007StatutMembreDernière intervention18 mai 2007
-
17 mai 2007 à 17:57
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 2018
-
18 mai 2007 à 03:17
Bonjour,
Mon idée était de faire un formulaire (userform) excel avec dedans une sorte de feuille excel. Après quelques minutes sur google j'ai trouvé un message préconisant d'ajouter un composant ole en allant dans le menu insertion, sous-menu composants. Effectivement d'aprè l'aide VBA il existe bien un tel menu mais pas dans toutes les versions de l'éditeur VBA. Et malheureusement pas dans la mienne, ni dans celle des gens que je connais. Je viens de passer 4 heures sur google et amazon à chercher des infos là dessus et n'ai strictement rien trouvé. Votre aide sera grandement appréciée!!!
maddav
Messages postés3Date d'inscriptionjeudi 17 mai 2007StatutMembreDernière intervention18 mai 2007 18 mai 2007 à 00:01
Ok, ok... merci!
mais je supposais que si c'était dans l'aide de l'éditeur excel VBA c'était dans VBA et pas dans VB.
Je suis sous office 2007, parfois 2003.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 18 mai 2007 à 00:34
Peut-être que le contrôle OLE existe sur des versions que je n'ai pas essayées... (?)
Mais je ne le trouve pas sur 2000 et je ne pense pas qu'il était sur 97 ou 95, de mémoire...
De toutes façons, ce contrôle n'est vraiment pas à conseiller ...
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 mai 2007 à 00:43
Bonjour MPI,
Tu veux dire que VBA Excell ne sait pas faire ce que savait faire même Word Basic (c'est vieux, çà) ... ?
Es-tu bien certain ?
A moins que l'insertion de tels objets ne soit possible que sur la feuille de calcul elle-même... (ce serait alors une "régression"...)
Bon...
Ce qu'on peut alors tenter de faire, mais à condition que le fichier à insérer dans sa UserForm soit un exécutable :
Lancer ce fichier dans une fenêtre elle-même incluse dans sa userForm.
Est-ce un executable (ou encore un document sépendant d'un exécutable ) ???
Cà, on sait faire... et il aurait alors son "truc" sur sa Userform.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 18 mai 2007 à 01:01
Voilà comment in ferait alors (à adapter un peu à VBA... qui a UserForm et pas Form, je crois)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Putfocus Lib "user32" Alias "SetFocus" (ByVal hwnd As Long) As Long
Const GW_HWNDNEXT = 2
Dim mWnd As Long
Private Sub Form_Activate() ' <<<<==== surement à modifier là pour VBA)
Dim Pid As Long
LockWindowUpdate GetDesktopWindow
Pid = Shell("c:\winnt\notepad.exe d:\monoutil\repete.txt", vbNormalFocus) 'ici son exécutable ou assimilé
If Pid = 0 Then MsgBox "Erreur / démarrage de l'application"
mWnd = InstanceToWnd(Pid)
SetParent mWnd, Me.hwnd ' <<<Modifier ici aussi pour VBA qui ne va pas reconnaître Me.hwnd (solution dans CS)
Putfocus mWnd
LockWindowUpdate False
End Sub
Function InstanceToWnd(ByVal target_pid As Long) As Long
Dim test_hwnd As Long, test_pid As Long, test_thread_id As Long
test_hwnd = FindWindow(ByVal 0&, ByVal 0&)
Do While test_hwnd <> 0
If GetParent(test_hwnd) = 0 Then
test_thread_id = GetWindowThreadProcessId(test_hwnd, test_pid)
If test_pid = target_pid Then
InstanceToWnd = test_hwnd
Exit Do
End If
End If
test_hwnd = GetWindow(test_hwnd, GW_HWNDNEXT)
Loop
End Function
Private Sub Form_Unload(Cancel As Integer)
DestroyWindow mWnd
End Sub
Attention : je n'ai pas "placé" la fenêtre ouverte pour notepad et elle peut être trop basse sur la Form pour y être vue sans agrandir la Form.. Si pas visible : aggrandir la Form ...pour la voir (elle est déplaçable)
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 18 mai 2007 à 03:17
Salut JMF,
Je vais regarder au bureau demain sur version 2003 si je peux retracer un contrôle OLE, mais j'en doute. Ici, sur 2000, je ne trouve rien....
Mais peut-être que je me trompe concernant les versions antérieures. Peut-être était-il présent sous 97 ou 95, mais ça fait un bail que je ne les ai pas utilisés...
Pour ce qui est de ton code, il semble intéressant... Je tenterai de regarder ça après une bonne nuit de sommeil.
Et pour ce qui est du problème de maddav d'insérer une feuille Excel dans un UserForm Excel, s'il possède la version 2000 et plus (je pense), il y a le contrôle Microsoft Office Spreadsheet qui est disponible. Du moins, je le retrouve ici, sous 2000. Je ne l'ai jamais utilisé, par contre...