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

patricktoulon

XLDnaute Barbatruc
Tiens, j'ai une question d'un utilisateur justement...
Est-ce que tu sais rendre l'affichage d'un UserForm permanent, c'est à dire qu'il reste affiché quand on change de fenêtre Excel ?
ben bien sur
encore une fois setwindowpos


mais en ce qui concerne le dernier fichier
ce que j'ai essayé de te faire comprendre c'est que tout ca ça ne sert a rien

j'explique
quand tu minimise et que tu replace le userform réduit au milieu ou a droite ou ou tu veux tu lui redonne le statut qu'il avait quand il était affiché
conclusion tu me vire tout ses api puisque tu fait ca avec des boutons et tu le fait simplement
c'est de ça que je parlais quand je disais bricolage

si encore tu n'avais pas de bouton dans le userformet que tu utilisais les bouton supplementaires avec api et que tu utilisais le layout ou le resize en cliquant sur les boutons de caption je dirais pas mais làavec des commandbutton dans le userform c'est complément inutile
d'ailleurs il me semble t'avoir donné un exemple utilisant ce principe avec les deux bouton supp

je dis ça je viens de tester ton fichier

réduire le userform en bas a gauche ou milieu ou droite de l'application tu n'a besoins d’aucune api pour ca
car le le redis il n'est pas réduit mais seulement resizé

j'explique
apartir du moment ou tu le déplace il reprend automatiquement son ancien getwindowlong et heureusement d'ailleurs

conclusion tout ton moulin avec les api ne sert a rien
 

Dudu2

XLDnaute Barbatruc
réduire le userform en bas a gauche ou milieu ou droite de l'application tu n'a besoins d’aucune api pour ca
conclusion tout ton moulin avec les api ne sert a rien
1664092124425.gif
oui je sais que pour le positionnement tel que je l'ai revu, les API sont inutiles.
Mais, si le UserForm a été défini pour être placé en TaskBar, ces API sont indispensables.

Or, au moment du Minimize, je ne sais pas (et toi non plus tu ne sais pas le déterminer) si le UserForm est en TaskBar ou pas.
Conclusion ta remarque s'applique à un cas particulier et ne prend pas en considération la question d'ensemble.
 

patricktoulon

XLDnaute Barbatruc
pour le premier plan
VB:
SetWindowPos hwnd, -1, Left, Top, Width, Height, SWP_NOSIZE Or SWP_NOMOVE
toujours -1 pour le premier plan
et si tu ne veux pas modifier la position ou les dimensions
pour le left , top , width , height c'est 0&
VB:
SetWindowPos hwnd, -1, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
setwindowpos ne changera que sa position dans la hiérachie mais pas ses dimansion ou position d'affichage
 

patricktoulon

XLDnaute Barbatruc
re
Or, au moment du Minimize, je ne sais pas (et toi non plus tu ne sais pas le déterminer) si le UserForm est en TaskBar ou pas.

bien sur que si !!! tu peux et de différente manière en plus
ne serait ce déjà en testant le RECT de la taskbar et du userform
ou tout simplement son getwindowlong après réduction
et bien d'autre encore
par exemple
entre autre
getwindowpos dont le nom et plus qu'explicite ;)
getwindowrect pareil le nom est suffisament explicit pour en comprendre la fonction
etc..etc...
 

Dudu2

XLDnaute Barbatruc
1664095814340.gif
Non car il faut, AVANT le Minimize, savoir si préalablement le UserForm a été placé en TaskList.

Si c'est APRÈS, ça ne sert à rien car on a déjà appelé l'API de Minimize dont tu ne veux pas voir la trace dans le positionnement ("ton moulin avec les api ne sert a rien").

Or AVANT le Minimize, que le UserForm ait préalablement été placé en TaskList ou pas on récupère toujours &H94CF0080.
Il faut que tu trouves autre chose, sinon je laisse les APIs
1664095825028.gif
 

Dudu2

XLDnaute Barbatruc
ton moulin avec les api ne sert a rien
J'ajoute que de toutes façons, l'API du Minimize est indispensable même dans le cas où le UserForm n'est pas dans la Task List.

Tout simplement parce que pour réduire le UserForm à son Header c'est bien l'API qui permet de le faire même si ou pourrait le bidouiller par le code. De plus sans l'API Minimize, on ne pourrait pas Restorer.

Et pour ajouter à la chose, il faut absolument que le code agisse comme les boutons ! Bidouille à exclure !

Donc oui mon moulin avec les api est bien indispensable.
 

patricktoulon

XLDnaute Barbatruc
re
allez kado
regarde si on ne peut pas détecter quand c'est minimisé
et je réitère c'est bien (-16) et non (-20)
pour le coup j'ai refait un petit userform avec 3 option button
selon ce que tu choisi ben quand tu réduit avec le bouton de la caption ben il va ou tu veux

alors on peut détecter ou pas ??
 

Pièces jointes

  • reduire un userform dans la barre de statuts .xlsm
    40.6 KB · Affichages: 1

patricktoulon

XLDnaute Barbatruc
ma fois si tu le dis

pour info quand on reprends une de mes astuces il faut la suivre jusqu'au bout 🤣
ca c'est pas bon
change le zoom de ta feuille pour voir hein !!!
VB:
With ActiveWindow.ActivePane
        PointToPixel = (.PointsToScreenPixelsX(1000) - .PointsToScreenPixelsX(0)) / 1000
        PixelToPoint = 1 / PointToPixel
    End With
je te laisse deviner tes deux erreurs après je reviens si tu trouve pas
en tout cas toi qui disais que tu voulais pas que ca devienne lourdingue
ben là on est servi et on a même du rab 🤣
 

patricktoulon

XLDnaute Barbatruc
en attendant je résume
le projet
réduire le userform dans la barre de status d'excel avec un left optionnel ou la barre de taches
on en est a
  • 9 api
  • 1 conversion point to pixel ???????
  • une myriade(comme a ton habitude) de sub et fonctions interdépendantes ou une chatte ne retrouvera pas ses petits
  • et autres etc....
et peut être même que tu ne gère pas toutes les situations encore

je suis assez d'accords avec toi il faut pas que ça devienne lourdingue 🤣
 

Discussions similaires

Statistiques des forums

Discussions
315 126
Messages
2 116 484
Membres
112 761
dernier inscrit
delaveau