XL 2016 Gérer un évènement sur un grand nombre de contrôles de même type d'un UserForm

Dudu2

XLDnaute Barbatruc
Bonjour,

J'ai 100 TextBoxes dans un UserForm.
Je voudrais gérer soit le _Enter soit le _DblClick sur tous ces contrôles pour y faire quelque chose de commun.
Pour éviter de déclarer 100 fois dans le code du UserForm le même évènement sur chacune des TextBoxes j'aimerais savoir s'il y a un autre possibilité, genre une classe dédiée.
Mais je ne suis pas très expert dans ce domaine et serais reconnaissant pour toute aide apportée sur la méthode.

Ci-joint un fichier avec 1 userForm de 3 TextBoxes comme base pour proposer un code qui ferait un simple MsgBox "Hello" sur un double-clic dans toutes les TextBoxes.
Merci par avance.
 

Pièces jointes

  • Classeur1.xlsm
    21.7 KB · Affichages: 6

Dudu2

XLDnaute Barbatruc
dranreb , Rollan M et moi avons chacun travaillé sur une version différente pour le pixeltopoints et vice et versa pour les userform et on a bien galérer avec pointstoscreenpixels
Ah mais c'est sûr que ton code simplifié pour le PixelToPoint c'est concis et efficace. Nul doute, je l'ai déjà adopté (avec la correction du Zoom) ;)
 

patricktoulon

XLDnaute Barbatruc
re
je dois certainement avoir ca dans mes vieux disque durs
le genre de sautises que l'on peut s'amuser a faire avec cette librairie
perso je trouve que cet userform exagère sur les bord des bornes des limite(maurice a dit)
qui n'a jamais révé d'avoir autant de boutons dans la barre de titre
LOL
mais je viens de tester visiblement le sysmenu de excel >2007 bloque la modif
demo.gif
 

patricktoulon

XLDnaute Barbatruc
Qu'entends-tu par status de WindowLong du au boutons ?
re
ben je te l'ai expliqué déja

je recommence:
l'userform à l'origine -->&H94C80080 que le bouton fermé
on ajoute le fullmenusytem-->&H94CF8080 tout les boutons, le resize,l'aerao snake,etc....

a chaque fois que qu'un des 3 boutons de la barre de titre va être cliqué
après son nouveau statut(nouvelle position(minimiser ou agrandi))
le getwindowlonA de premier niveau (-16) va te donner le new long

c'est pour ça que j'ai choisi de simuler le click sur ces boutons comme ca on bénéficie toujours du fullmenusytem

si tu réduit avec showwindow hwnd,2 par exemple tu n'a pas ça car la commande est externe au menusytem d'ou toute tes myriades de procédures pour détecter le changement

alors que dans le resize du userform le getwindowlongA te donne le changement

est ce que tu comprends mieux comme ça ?
 

Dudu2

XLDnaute Barbatruc
Oui merci je comprends mieux.... que tu as gardé la même approche que précédemment.
Tu as choisi de tout mettre dans le code du UserForm. Donc chaque UserForm candidat doit intégrer les déclarations API, le code du Resize, les petites manips de mémorisation, ...

Mon approche est différente et consiste à externaliser le maximum de déclarations et de code dans un module spécialisé, de sorte que dans le UserForm ou dans une module utilisateur, il suffit d'appeler les fonctions dédiées à l'action souhaitée (ce que tu appelles "tes myriades de procédures"). Il y a juste une variable Public à placer en UserForm pour la conservation de son Handle, et encore j'aurais pu m'en passer en le recherchant à chaque fois par son Caption.

Voili voilou, chacun sa méthode.
Quand la ressource sera publiée j'en indiquerai l'adresse ici pour clôturer l'affaire.

Edit: tiens, elle vient de l'être:
 

patricktoulon

XLDnaute Barbatruc
Bonjour @Dudu2 le fait de tout mettre dans un userform n'est pas très important( je même faire une classe )
ce qui est important à retenir c'est que je n'utilise aucune api pour réduire ou agrandir je met seulement les boutons manquant parti de là le userform est réductible

je me sert de qu'une seule api pour piloter les bouton de la barre de titre pour réduire agrandir avec des boutons persos

par expérience
tout les code que j'ai pu faire avec les apis qui utilisait des (passerelle et autre fonctions imbriquées) se sont toujours révélés bancales
tu peux me croire ça fait longtemps que je fait joujou avec la user32
mais depuis que je fait du .net je m'en rends bien compte avec mes form que (ce qui marche à peu près)en vba est loin d’être stable

mais bon c'est en forgeant que l'on devient forgeron ;)
 

Discussions similaires