Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 VBA - Évènement TextBox_Enter() non géré en module de Classe

Dudu2

XLDnaute Barbatruc
Bonjour,
Alors l'évènement _Enter() n'est pas géré en Classe ? Une solution ?
 

Pièces jointes

  • Test Classe.xlsm
    40.3 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
les lignes en commentaire dans le code
normalement il y en a qu'une et tu les vois pas quand tu importe le module classe
si il n'y a pas cette ligne dans chaque pseudo event ca ne marche pas
et moi j'en met deux car si il y en avait pas de visible dans vbe quand on exporte on pert la la ligne
souvient toi c'est comme ma classe dictionnaire pour Mac

donc en commentaire si j'exporte dans le fichier cls elle y sera
il me suffit donc d'en débloquer une et enregistrer avec bloknote et ré importer dans un fichier ou j'en aurais besoins
d'ailleurs mieux vaut le garder en fichier .cls de coté et tu importe au besoins
VB:
Public Sub Entrer()
'Attribute Entrer.VB_UserMemId = -2147384830
'Attribute Entrer.VB_UserMemId = -2147384830
    If TypeOf MyCtrl Is MsForms.TextBox Then usf.ListBox1.AddItem MyCtrl.Name & " Event [Enter] "
    If MyCtrl.Name <> memoire.Oldcontrol.Name Then
        If TypeOf MyCtrl Is TextBox Then Set memoire.Oldcontrol = MyCtrl
    End If
End Sub

Public Sub Sortie(ByVal Cancel As MsForms.ReturnBoolean)
'Attribute Sortie.VB_UserMemId = -2147384829
'Attribute Sortie.VB_UserMemId = -2147384829
    'If TypeOf MyCtrl Is MsForms.TextBox Then
        ' UserForm1.Label1 = MyCtrl.Name
        If MyCtrl.Name <> memoire.Oldcontrol.Name Then
            usf.ListBox1.AddItem memoire.Oldcontrol.Name & " Event [Exit] "
        Else
            usf.ListBox1.AddItem MyCtrl.Name & " Event [Exit] "
        End If
    'End If
End Sub

Public Sub AvantUpdate(ByVal Cancel As MsForms.ReturnBoolean)
'Attribute AvantUpdate.VB_UserMemId = -2147384831
'Attribute AvantUpdate.VB_UserMemId = -2147384831
    If TypeOf MyCtrl Is MsForms.TextBox Then usf.ListBox1.AddItem MyCtrl.Name & " Event [BeforeUpdate] "
End Sub

Public Sub ApresUpdate()
'Attribute ApresUpdate.VB_UserMemId = -2147384832
'Attribute ApresUpdate.VB_UserMemId = -2147384832
    If TypeOf MyCtrl Is MsForms.TextBox Then usf.ListBox1.AddItem MyCtrl.Name & " Event [AfterUpdate] "
End Sub
 

patricktoulon

XLDnaute Barbatruc
re
d'accords il faut partir du début pour que tu comprenne

par exemple quand tu vois ceci dans ton module classe
VB:
Sub test()
MsgBox "hello Dudu2"
End Sub

en fait tu a ceci quand tu l'exporte
et que tu le lis avec bloknote
se sont des attributs par défaut

et on peut en ajouter
on peut ajouter une property get par defaut (comme dans mon dictionnaire pour Mac)

exemple
dans ma classe j'ai une

public property get truc()
truc="toto"
end property


si je met truc en attribut par defaut avec les autres ATTRIBUTS avec blocknote

dans un module standard (par exemple) au lieu de l’appeler comme ça
msgbox moninstance.truc
je pourrais faire
msgbox moninstance


et on peut ajouter plusieurs attributs comme c'est le cas ici
et la c'est l'api de connection qui s'en sert

voila voila
 

patricktoulon

XLDnaute Barbatruc
re
voila je t'ai fait un exemple
voici un classeur avec classe1 et classe2
les deux ont exactement le même code
sauf que la 2 a l'attribut"Truc" par defaut
mais VBE ne te permet pas de le voir c'est tout
classeur et les deux module classe au format text
comme ça tu vois vraiment comment ca marche
 

Pièces jointes

  • exemple classe avec attribut sup ou pas .xlsm
    15.6 KB · Affichages: 2
  • Classe1.txt
    367 bytes · Affichages: 2
  • Classe2.txt
    405 bytes · Affichages: 2

patricktoulon

XLDnaute Barbatruc
re
un truc important
il faut savoir qu'il y a deux bibles
certains te dirons qu'il faut lettre en haut de module avec les autres
ça fonctionne effectivement pour 2007
et d’autres te dirons qu'il faut le mettre dans le property get
c'est en effet le cas chez moi en haut ça ne fonctionne pas sur 2013
 

Dudu2

XLDnaute Barbatruc
Merci pour ton exemple et explications.

Je ne m'étais jusque là jamais intéressé aux Attributes dont je découvre ici une description.
Et alors y a des gens qui ajoutent des Attributes dans une classe exportée sachant qu'à l'import l'éditeur VBA ne les montre pas !
C'est un peu pervers comme approche non ?
 

patricktoulon

XLDnaute Barbatruc
re
non c'est surtout que c'est l'editeur VBE qui inhibe les lignes
il y a moulte éditeurs qui te permettent de le voir
nous ne somme pas beaucoup à l'employer mais comme on peu le constater dans le truc qu'a déniché @fanch55 c'est utilisé et on a même une démonstration du switch memberId qui est opéré 4 fois pour 4 events
 

Dudu2

XLDnaute Barbatruc
T'es sûr ?
Parce que j'ai fait un Export de ta Classe2 et je le trouve l'Attribute Truc.
VB:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
END
Attribute VB_Name = "Classe2"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Public valeur
Public Property Get Truc()
Attribute Truc.VB_UserMemId = 0
Truc = valeur
End Property

Public Property Let Truc(kèkechose)
valeur = kèkechose
End Property
 

Discussions similaires

Réponses
6
Affichages
480
Réponses
29
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…