Autres [Résolu]un seul evenement control gerant x controles identiques SANS MODULE CLASSE

patricktoulon

XLDnaute Barbatruc
bonjour a tous
dranreb propose un calendrier conçu dans un userform
et utilise un mappage "withevents" dans un userform
je ne comprends pas bien comment il fait sans instancier de classe avec un seul "withevents" dans le userform
si quelqu'un sait un petit exemple simplifié serait le bien venu
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Bonjour Patrick
Bonjour le Fil ,le Forum
Pas sûr d'avoir compris ta demande !mais je crois que Bernard(Dranreb) a fournit un fichier qui pourrait répondre a ta recherche.
cela concerné des Chronos (Userform) je crois , il y avait possibilité d'afficher plusieurs Chrono .
un lien vers le Fil : Chrono
jean marie
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Bonjour ChTi160
en fait je regarde son calendrier et il utilise un stratagème inutile et gourmand en terme d'uc car c'est une boucle perpétuelle qui boucle sur le controls actif alors que l'on peu classer des controls absolument de la même manière qu'un module classe moyennant 2/3 petites nuances et quoi que dans mes classe je le fait deja
je prépare un exemple et je le donne

pour commencer avant mon retour il faut savoir que le module userform est un module classe a part entiere
ca devrait mettre la puce a l'oreille deja
je vais regarder ce chrono ;)
 

patricktoulon

XLDnaute Barbatruc
re
bonjour job75
voila un exemple
VB:
Public WithEvents bout As MSForms.CommandButton 'map événement control
Private clavier(15) As New UF 'tableau d'instance de map control
Public maforme As Object 'variable pour userform

Private Sub UserForm_Activate()
For i = 1 To 15 'boucle
Set clavier(i).bout = Me.Controls("commandbutton" & i) 'instanciation des map bouton
Set clavier(i).maforme = Me 'instanciation des map parent userform dans chaques map bouton
Next
End Sub
Private Sub bout_Click(): whatcontrol bout: End Sub 'événement unique gerant les 15 boutons 

Public Sub whatcontrol(ByVal Q As Object)'sub appelée par l’événement unique



'Label1.Caption = Q.Name ' ne peux pas fonctionner label1 est inconnu dans l'instance du map du bouton cliqué

UF.Label1.Caption = Q.Name 'PRECEDER DU PARENT  label1 est identifié
'ou
maforme.Label1.Caption = Q.Name ' ma forme est connu dans l'instance du map du bouton cliqué

'dans cet evenement tout les controls qui n'auraient pas été mappé doivent etre precedé de leur parent jusqu'au userform(ex:UF.frame1.textbox2)
End Sub
bien lire lire les commentaires
si dranreb passe par la ca devrait l’intéresser pour son calendrier ;)
voila une classe sans classe :p
 

Pièces jointes

  • classe control sans module classe .xlsm
    15.4 KB · Affichages: 20
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Je ne vais quand même pas charger 31 exemplaires de tout le calendrier juste pour que chacun me traite un seul de ses boutons de jour !
Mon userForm est modal. Il n'a rien d'autre à faire que de veiller en permanence à ce que le TBnJour soit toujours le ToggleButton actif. De plus il n'empêcherait pas le traitement d'évènements système puisque la boucle contient un DoEvents. D'ailleurs il est plus que probable que VBA déroule aussi de son coté en permanence des boucles pour pouvoir traiter les évènements. C'est juste dommage qu'ils n'aient pas prévu un évènement au niveau UserForm pour détecter le changement de contrôle actif.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
C'est juste dommage qu'ils n'aient pas prévu un événement au niveau UserForm pour détecter le changement de contrôle actif.
re
je t'en fait 1 si tu veux qui demande très très peu de ressource avec une de mes astuces ;)
je l'ai ja mais testé sur un userform mais qui sait ??
et si suis je bête je m'en sert avec mon msgbox perso temporaire

dans un userform tu met tout plein de controls et un label
tu met ce code
VB:
Option Explicit
Private WithEvents Cmbrs As CommandBars    'creation de l'object commandbars events

'evenement commandbars
Private Sub Cmbrs_OnUpdate()
    Application.CommandBars.FindControl(ID:=2040).Enabled = Not Application.CommandBars.FindControl(ID:=2040).Enabled
    UserformControl_change
End Sub



Private Sub UserForm_Activate()
    Set Cmbrs = Application.CommandBars
    Cmbrs_OnUpdate
End Sub

'evenement userform
Private Sub UserformControl_change()
    Label1 = ActiveControl.Name
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Set Cmbrs = Nothing
End Sub

bien moins lourd qu'une boucle perpétuelle au graphique des performances ;)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Non, tu ne m'a rien donné de ce qui m'intéresserait. Je ne veux pas d'un CommandBar dans mon UFmCalend. Je veux être averti avant tout autre évènement quand le ActiveControl change. Je me fous de ce que ça consomme comme CPU du moment que ça n'empêche rien d'autre de tourner en même temps.
 

patricktoulon

XLDnaute Barbatruc
re
ben test avant de parler
ca n’empêche absolument rien de tourner

demonstration
l'evenement UserformControl_change te donne bien le controls actif
ca te met pas une commandbars elle existe deja
je me sert de son événement update pour boucler c'est tout
demo3.gif
 

Dranreb

XLDnaute Barbatruc
Ça n'a pas l'air de marcher chez moi. Quand j'affiche l'UserForm ça m'affiche dans le Label1 le nom du contrôle qui a le focus, mais ensuite ça ne change plus quand je clique sur d'autres.

Je ne vois pas pourquoi ça marcherait, d'ailleurs.
 
Dernière édition:

Statistiques des forums

Discussions
311 715
Messages
2 081 822
Membres
101 822
dernier inscrit
holale