Excel VBA IDE / menu insertion/composants: ou est-il?????

Signaler
Messages postés
3
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
18 mai 2007
-
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
-
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!!!

8 réponses

Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
En principe :
Insertion ===>> Objet OLE ===>> et tu lis ce qui t'est proposé
Messages postés
3
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
18 mai 2007

Si on parle bien du meme menu insertion dans l'éditeur VBA d'Excel, j'ai seulement le choix entre:

procédure
userform
module
module de classe
fichier

D'après l'aide VBA il y a:

[JavaScript:hhobj_1.Click() Voir aussi]</mshelp:link>     <mshelp:link class="NoLink" id="hhobj_2" tabindex="0" keywords="vbmnuInsertMenuVBES" indexmoniker="!DefaultAssociativeIndex" errorurl="" disambiguator="menu">[JavaScript:hhobj_2.Click() Particularités]</mshelp:link>

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vbcmdprocedure.htm Procédure]

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vbcmddialoginsert.htm UserForm]

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vbcmdnewform.htm Module]

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vbcmdnewform.htm Module de classe]

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vacmdcomponentscommandinsertmenu.htm Composants]

[ms-help://MS.EXCEL.DEV.12.1036/MS.VBE.DEV.12.1036/VBE.DEV/html/vbcmdfile.htm Fichier]

Note   Certains éléments de menu ne figurent pas dans toutes les versions de Visual Basic Editor.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Les objets OLE sont disponibles en VB, pas en VBA
Il faut savoir faire la différence entre ces 2 outils de programmation distincts ...

Selon ta version, tu peux peut-être insérer un contrôle Spreadsheet. Mais je ne sais pas à partir de quelle version ce contrôle est disponible (?)

MPi
Messages postés
3
Date d'inscription
jeudi 17 mai 2007
Statut
Membre
Dernière intervention
18 mai 2007

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.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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 ...

MPi
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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.


 
Messages postés
7668
Date d'inscription
samedi 5 novembre 2005
Statut
Membre
Dernière intervention
22 août 2014
26
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)

Bonne nuit.
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
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...

MPi