Accueil > > > [VBA] OBTENIR L'HANDLE DE LA LISTE DÉROULANTE D'UN COMBOBOX D'UNE FEUILLE EXCEL
[VBA] OBTENIR L'HANDLE DE LA LISTE DÉROULANTE D'UN COMBOBOX D'UNE FEUILLE EXCEL
Information sur la source
Description
Obtenir l'handle de la liste déroulante d'un combobox posé sur une feuille excel. Un combobox est composé d'une zone de texte et d'une liste (déroulante). Placé sur une feuille excel, il n'est pas facile d'identifier le handle de la liste déroulante. J'ai utilisé Spy++ pour déterminer les class names de la liste déroulante. Après, un simple coup d'API permet d'obtenir le handle de la liste déroulante d'un combobox placé sur une feuille. C'est un module facilement réutilisable pour vos documents excel.
Source
- '-------------------------
- ' Dans une feuille excel :
- '
- Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
- If hWndDropListCombo = 0 Then
- hWndDropListCombo = GetHandleDropListFromCombo
- ' ajoutez ici votre code pour utiliser cet handle
- ' ...
- End If
- End Sub
- Private Sub ComboBox1_LostFocus()
- hWndDropListCombo = 0
- End Sub
-
-
- '-----------------
- ' Dans un module :
- '
- Public hWndDropListCombo As Long
- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
- Public Function GetHandleDropListFromCombo() As Long
- Dim hWndExcel As Long
- Dim hWndPopup As Long
- Dim hWndList As Long
- Const VBA_POPUP_CLASSNAME = "F3 MdcPopup 60000000"
- Const VBA_LIST_CLASSNAME = "F3 Server 60000000"
- ' retourne l'handle d'excel
- hWndExcel = FindWindow("XLMAIN", vbNullString)
- 'trouve celui du popup
- hWndPopup = FindWindowEx(hWndExcel, 0&, VBA_POPUP_CLASSNAME, vbNullString)
- If hWndPopup = 0 Then
- hWndPopup = FindWindow(VBA_POPUP_CLASSNAME, vbNullString)
- End If
- 'trouve celui de la liste dans le popup
- hWndList = FindWindowEx(hWndPopup, 0&, VBA_LIST_CLASSNAME, vbNullString)
- GetHandleDropListFromCombo = hWndList
- End Function
'-------------------------
' Dans une feuille excel :
'
Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If hWndDropListCombo = 0 Then
hWndDropListCombo = GetHandleDropListFromCombo
' ajoutez ici votre code pour utiliser cet handle
' ...
End If
End Sub
Private Sub ComboBox1_LostFocus()
hWndDropListCombo = 0
End Sub
'-----------------
' Dans un module :
'
Public hWndDropListCombo As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Public Function GetHandleDropListFromCombo() As Long
Dim hWndExcel As Long
Dim hWndPopup As Long
Dim hWndList As Long
Const VBA_POPUP_CLASSNAME = "F3 MdcPopup 60000000"
Const VBA_LIST_CLASSNAME = "F3 Server 60000000"
' retourne l'handle d'excel
hWndExcel = FindWindow("XLMAIN", vbNullString)
'trouve celui du popup
hWndPopup = FindWindowEx(hWndExcel, 0&, VBA_POPUP_CLASSNAME, vbNullString)
If hWndPopup = 0 Then
hWndPopup = FindWindow(VBA_POPUP_CLASSNAME, vbNullString)
End If
'trouve celui de la liste dans le popup
hWndList = FindWindowEx(hWndPopup, 0&, VBA_LIST_CLASSNAME, vbNullString)
GetHandleDropListFromCombo = hWndList
End Function
Conclusion
La fonction GetHandleDropListFromCombo doit-être appelée lorsque la liste déroulante est déjà affiché. Si elle est appelée avant son affichage, alors son handle ne sera pas trouvée. C'est pour ça qu'elle est placée dans l'évènement mouseup du combo.
Historique
- 30 mai 2012 16:23:30 :
- Const
- 31 mai 2012 15:12:53 :
- Ajout de la prise en charge pour une UserForm
- 31 mai 2012 17:39:55 :
- Optimisation du code
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
liste déroulante - combobox [ par pifi ]
Bonjour,J'ai créer une connection sur une base ACCESS.Dans une table, j'ai un champ "A".Je souhaiterai récupérer le contenu de ce champs "A" dans une
combobox avec un listview pour liste déroulante [ par papaye976 ]
Je cherche à faire un combobox avec un listview pour liste déroulante. J'ai créé un activeX avec un textbox et un bouton pour faire dérouler une list
combobox avec un listview pour liste déroulante [ par papaye976 ]
Je cherche à faire un combobox avec un listview pour liste déroulante. J'ai créé un activeX avec un textbox et un bouton pour faire dérouler une list
Doublons dans liste (combobox) [ par yafee ]
Bonjour,J'ai une liste déroulante (cmbIntitule) qui quand je clique dessus ajoute l'élément choisi dans une liste simple (liste1).Maintenant j'aimerai
[déplacé VB.NET -> VBA] liste déroulante dans un combobox [ par Jomsoft ]
Bonjour, Voici ma question? Une requête trie les données d'une table, lorsque j'ouvre l'état, j'aimerais choisir dans une liste déroulante du combobox
Animation sur un ComboBox [ par essenge11 ]
Bonjour ,je travaille sur VisualBasicExpress 2008 et j’ai un ComboBox ayant une liste de 30 équipes sur sa liste déroulante,je trouve le programme u
[VBA]combobox [ par ricouth ]
Bonjour Je ne vois pas e categorie VBa pour excel2007 dans la liste déroulante, voila pourquoi je pose ma question ici ( merci de m'indiquer ou pose
Combobox : bug quand une seule valeur [ par lucky78 ]
Bonjour à tous, Voila je me tourne vers vous parce que j'ai un problème en VBA avec une combobox remplie depuis une liste Excel à l'ouverture d'un us
Formulaire Word 2003 [ par Andreanne421 ]
Bonjour, Je suis présentement au travail et j'ai un petit problème pour imprimer mon formulaire. Disons que je peux l'imprimer, mais ce que je veux c
Choix d'une liste déroulante [ par maxxx08 ]
Bonjour, J'utilise Access 2003. Mon problème est le suivant, lorsque je choisis une valeur parmi une liste déroulante celle-ci s'affiche correctemen
|
Derniers Blogs
VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES !VOTEZ POUR LE TOP 10 DES INFLUENCEURS SHAREPOINT FRANCOPHONES ! par Patrick Guimonet
Si ce n'est déjà fait (comme plus de 600 personnes déjà), il est encore temps de voter pour le concours TOP 10 des influenceurs SharePoint francophones ! Il est organisé par harmon.ie et accessible ici : http://harmon.ie/top-...
Cliquez pour lire la suite de l'article par Patrick Guimonet [CONF'SHAREPOINT] DERNIER RAPPEL ! :-)[CONF'SHAREPOINT] DERNIER RAPPEL ! :-) par Patrick Guimonet
La Conf'SharePoint en chiffres c'est : 3 jours de SharePoint ! 4 parcours et 60 sessions 17 partenaires représentant toutes les fac...
Cliquez pour lire la suite de l'article par Patrick Guimonet [ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS.[ #SHAREPOINT 2013 ] LES MODèLES DE SITES STANDARDS. par Patrick Guimonet
C'est un point peu mis en avant mais SharePoint 2013 a été l'occasion de remettre de l'ordre dans les modèles de sites. Tout d'abord, un certain nombre de modèles ont été tout simplement rendus obsolètes (cf. Fonctionnalités déco...
Cliquez pour lire la suite de l'article par Patrick Guimonet 10 ERREURS DE COMPRéHENSION CONCERNANT SHAREPOINT.10 ERREURS DE COMPRéHENSION CONCERNANT SHAREPOINT. par Patrick Guimonet
Une excellente infographie (qui a sa source ici :http://www.evokeit.com/sharepoint-blog/misconceptions-of-microsoft-sharepoint) que j'ai traduite et commentée sur le blog d'Abalon : http://abalon.fr/blog/10-erreurs-de-comprhension-...
Cliquez pour lire la suite de l'article par Patrick Guimonet
Forum
ACCESS / VB.NETACCESS / VB.NET par pedrobigg
Cliquez pour lire la suite par pedrobigg
Logiciels
Nego Facturation (1.84)NEGO FACTURATION (1.84)Nego Facturation est un logiciel complet qui permet de gérer vos factures et devis très simplemen... Cliquez pour télécharger Nego Facturation Revealer Keylogger Free (2.07)REVEALER KEYLOGGER FREE (2.07)Keylogger invisible et gratuit pour Windows 8, 7, Vista ou XP. Revealer Keylogger Free vous perme... Cliquez pour télécharger Revealer Keylogger Free Devis-Factures PHMSD (2.1.0.1)DEVIS-FACTURES PHMSD (2.1.0.1)Configuration minimale
Nécessite Windows™ 2000, XP, Windows 7, 8, Vista (Service Pack à... Cliquez pour télécharger Devis-Factures PHMSD Ludoprêt (3.2)LUDOPRêT (3.2)Logiciel gratuit de gestion de ludothèque.
Gestion des jeux et des adhérents.
Gestion des for... Cliquez pour télécharger Ludoprêt 974 Application Server (13.2.1.3)974 APPLICATION SERVER (13.2.1.3)Ecommerce, Blogueur, Vitrine, Newsletter, Java IDE, ..., in the cloud et sous haute dispo. Facile... Cliquez pour télécharger 974 Application Server
|