Icône de la ressource

Collection module classe 2024 patricktoulon (classe controls) gérer Enter/exit TextBox 1.0 1.0

patricktoulon

XLDnaute Barbatruc
il y aurait une autre astuce (que j'utilise dans la ressource calendar) mais celle là je crois qu'elle te fait craker tellement elle est bizarre
bizarre pour celui ou celle qui maitrise mal la notion de module classe userform / object userform

si tu décortique mon calendar responsif tu va comprendre très vite
 

patricktoulon

XLDnaute Barbatruc
tiens test ça c'est rigolo
simplement dans un userform avec un bouton
VB:
Public classemère As New Classe1
Public UserForm1 As UserForm1

Private Sub tuer_classe_Click() 'le bouton
    Set UserForm1 = Nothing
End Sub

Private Sub UserForm_Activate()
    Set UserForm1 = New UserForm1
    UserForm1.classemère.init Me
End Sub

et le module classe nommé "Classe1"
VB:
Public nom As String
Public classeEnfant As New Collection

Public Function init(usf)
    Dim cl As Classe1
    Me.nom = "mère"
    Cells(Rows.Count, 1).End(xlUp).Offset(1) = "classe " & Me.nom & " démarrée"
    For i = 1 To 5
        Set cl = New Classe1
        cl.nom = "enfant " & i

        Cells(Rows.Count, 1).End(xlUp).Offset(1) = "classe " & cl.nom & " démarrée"
        classeEnfant.Add cl
    Next
End Function



Private Sub Class_Terminate()
    Cells(Rows.Count, 1).End(xlUp).Offset(1) = "classe " & Me.nom & " terminée"
End Sub


LOL!! 😁 🤪 🥳
 

Dudu2

XLDnaute Barbatruc
Je te l'avais dit que je ne lâche rien ! 🥸
En fait j'ai quasi-rien changé, SAUF dans le Terminate() de l'instance UserForm que je reconnais pas son nom spécial arbitraire, je termine les instances des Controls.
Et toujours pas de Query_Close ! 🤣
 

Pièces jointes

  • Class for UserForm Control Enter and Exit Events.xlsm
    80.3 KB · Affichages: 0
Dernière édition:

Dudu2

XLDnaute Barbatruc
Le même avec 2 UserForms...
 

Pièces jointes

  • Class for UserForm Control Enter and Exit Events - 2 UserForms.xlsm
    90.7 KB · Affichages: 0

Dudu2

XLDnaute Barbatruc
@Dudu2 j'ai compris pourquoi il est ESSENTIEL!!!! d'instancier dans le initalise

par ce que dans le activate quand tu passe d'un userform à l'autre tu ré instancie des classes et elle n'ont plus la même address(objPtr) même si elle sont fonctionnelles les précédentes se mélangent en contrôlant les address des object classe on s'en rend compte
Pour aller jusqu'au bout de cette histoire, j'ai testé l'initialisation dans le UserForm_Activate() en retour d'un UserForm de 2ème niveau.

Au retour du UserForm de 2ème niveau, on exécute bien un 2ème UserForm_Activate() du UserForm de 1er niveau (ok ça on le sait). Mais étrangement, Excel purge les instances des Controls du 1er UserForm_Activate() sans qu'on fasse rien pour ça, avant qu'elles ne soient ré-instanciées par le code de l'initialisation du 2ème UserForm_Activate().

Ça c'est très étonnant, mais ça démontre qu'on peut faire l'initialisation dans le UserForm_Activate() si on le souhaite, ce qui est mon option préférentielle.

Edit: Évidemment je n'ai pas testé avec ta méthode des instances des Controls qui référencent l'instance mère du UserForm mais je pense que ça ne se passera pas comme ça à cause de ces références croisées. Donc effectivement, tu dois absolument utiliser UserForm_Initialize() et UserForm_Query_Close().
 

Pièces jointes

  • Class for UserForm Control Enter and Exit Events - 2 UserForms Test Activate.xlsm
    78.5 KB · Affichages: 0
Dernière édition:

Statistiques des forums

Discussions
314 708
Messages
2 112 090
Membres
111 416
dernier inscrit
philipperoy83