begin process at 2013 05 21 15:08:28
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > [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

Note :
Aucune note
Catégorie :API Classé sous :handle, combobox, liste, déroulante, API Niveau :Initié Date de création :29/05/2012 Date de mise à jour :31/05/2012 17:39:50 Vu / téléchargé :1 955 / 133

Auteur : Philippe734

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  • Get hWnd droplist from combo.xlsTélécharger ce fichier [Réservé aux membres club]33 792 octets

Télécharger le zip


 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

Source avec Zip Source avec une capture [VBA] MOLETTE SOURIS COMBOBOX ET LISTEBOX DANS FEUILLE EXCEL...
Source avec Zip [VBA POWERPOINT] PAGINATION AVEC TOTAL DE DIAPO
Source avec Zip [VBA POWERPOINT] CRÉER UN SOMMAIRE AUTOMATIQUE
Source avec Zip Source avec une capture [VB6 BASE DE DONNÉE] DÉMO SQL SUR TABLEAU EXCEL + DATAGRID A...
Source avec Zip Source avec une capture CLSWIDGET = UNE CLASS POUR FAIRE UN WIDGET AVEC INFOBULLE E...

 Sources de la même categorie

Source avec une capture Source .NET (Dotnet) CLASSE D'UTILISATION DU SERVICE DE TRADUCTION MICROSOFT BING par blq
Source avec Zip APPLICATIONS DE SUIVI DE LA GLYCÉMIE POUR LES DIABÉTIQUES par jacques-antoine
Source avec Zip GESTION ECOLAGE par lerave
Source avec Zip RÉDUCTION DE LA TAILLE D'UNE IMAGE par jacques-antoine
Source avec Zip UN RÉPERTOIRE TÉLÉPHONIQUE PERSONNEL, PUISSANT ET INTUITIF par jacques-antoine

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CHANGEDESKTOP: CHANGEMENT DE L'APPARENCE DE LA LISTVIEW DU B... par zesamoth
Source avec Zip Source avec une capture Source .NET (Dotnet) ENREGISTRER UNE NOUVELLE SAISIE DANS UN COMBOBOX. par Gwendal3
Source avec Zip Source avec une capture CONTROLE PERMETTANT LA SELECTION A PARTIR D'UNE LISTE PLUS I... par asimengo
Source avec Zip Source avec une capture HANDLE , API ET MANIPULATION DE FENÊTRE S par zavier666
Source avec Zip Source avec une capture UTILISATION DE L'API SENDMESSAGE AVEC UNE LISTBOX OU UN COMB... par PROGRAMMIX

Commentaires et avis

Commentaire de Alain Proviste le 29/05/2012 19:36:35 administrateur CS

pour pinailler, une petite constante ferait bien du bien. Voire un petit paramètre à ta fonction, histoire d'être rexploitable pour d'autre types de composants. que quelqu'un puisse plus facilement utiliser ton code ;)

Commentaire de mimiZanzan le 04/06/2012 15:10:07

Bonjour Philippe 734,

Ton code serait intéressant, mais il donne toujours comme handle la valeur 0...(avec Excel 2003, 2007, et 2010).
Donc inutilisable.

Cdt

Commentaire de MPi le 04/06/2012 17:00:03

Personnellement, sous 2007, ça me retourne bien une valeur, mais celle-ci change à chaque fois que je reclique sur le combobox.

Il me semble que le handle devrait toujours être le même durant une même session, non ?

Commentaire de Philippe734 le 14/06/2012 09:21:48

La valeur du handle change en effet à chaque fois. C'est à dire qu'à chaque fois que la liste est déroulé, son handle est bien différent.
à mimizanzan : je serait curieux de savoir la raison pour laquelle le code ne fonctionne pas chez toi. Reviens nous le dire lorsque tu aura trouvé.

Commentaire de mimiZanzan le 14/06/2012 17:15:47


Bonjour  Philippe 734,

Quand je clique dans la combobox, j'obtiens toujours le message:

"L'handle de la liste déroulante du combobox a été capturé = 0"

Je ne sais pas pourquoi...

Cdt


 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 4,930 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales