Evénement exit control dynamique d'une textbox

Bonjour,

Je souhaite créer un événement Exit de manière dynamique. Voici un code qui fonctionne avec l’événement Change :

Dans ma userform

'Dans l'initialisation de ma userform
Dim Cl As Classe1
Dim nouvelleTextBox As Control 'instanciation d'une variable de type Control
Set Collect = New Collection
'Création des TextBox heure début
For num_objet = 300 To 300 + TOTAL_PERSONNE_DPS + 8
    Set nouvelleTextBox = Me.Frame14.Controls.Add("Forms.TextBox.1") ' ajout d'une nouvelle TextBox dans le UserForm
    With nouvelleTextBox 'propriétés de la nouvelle ComboBox
        .Name = "TextBox" & num_objet 'nom de la forme : TextBox x
        .Left = 162 'positionnement sur l'axe des abscisses
        .Top = (num_objet - 300) * 24 + 6 'positionnement sur l'axe des ordonnées (seule caractéristique variable dans l'exemple)
        .Width = 72 'largeur
        .Height = 18 'hauteur
    End With

    'ajout de l'objet dans la classe
    Set Cl = New Classe1
    Set Cl.Txtbx = nouvelleTextBox
    Collect.Add Cl
Next

Dans un Module standard

'--------------------------------------
'Dans un module standard
Option Explicit

Public Collect As Collection
'--------------------------------------

Dans le module Classe1

'--------------------------------------
'Dans un module de classe nommé "Classe1"
'
Option Explicit

Public WithEvents Txtbx As MSForms.TextBox

'Evenement de type Change
Private Sub TxtBx_Change()
    'cet exemple affiche le nom et la valeur de l'objet cliqué
    MsgBox Txtbx.Name & ": " & Txtbx.Value
End Sub
'--------------------------------------

Le problème est que si je remplace

Private Sub TxtBx_Change()

Par

Private Sub TxtBx_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Celui-ci ne répond pas au moment du changement de textbox. Il n'y a même pas de message d'erreur.

J'espère que c'est assez clair et merci d'avance pour votre aide.

Leuleu90

Bonsoir,

En me mettant dans la même situation (cela aurait plus simple d'avoir directement le fichier Excel ...), je n'ai pas l'événement "Exit" pour le contrôle TxtBx

Public WithEvents Txtbx As MSForms.TextBox

Je n'ai pas l'impression que ce soit une "vraie" TextBox :

En te positionnant sur ta sub

Private Sub TxtBx_Change()

, tu retrouves un nombre limité d'événements associés au contrôle "TxtBx" (cf PJ)

Solution de contournement, à moitié satisfaisante : gérer l'événement "_KeyUp", disponible. Et prendre en compte les touches "Tabulation" (chr(9) et "Entrer " (chr(13)).

Private Sub Txtbx_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 9 Or KeyCode = 13 Then
        MsgBox "Changement de zone :"
    End If
End Sub

Etonnant

Bonne soirée

Bouben

apercu

Bonjour,

Merci beaucoup pour votre réponse, cela me confirme que l’événement Exit n'existe pas pour ce type de variable. Par contre, j'ai l'impression que ma demande n'est pas complète c'est pourquoi je tiens à préciser plusieurs éléments importants.

Mon but final est de créer des TextBox de Façon dynamique et de faire un contrôle de saisie dès que l'utilisateur quitte la textBox en question. Le format contenu devra être sous la forme "hh:mm". Si l'utilisateur n'a pas fait une saisie correct, il devra recevoir un message d'erreur. Un fois quittancé, la TextBox sera effacée et le curseur devra rester dans cette TextBox.

Je vous mets en annexes un fichier contenant une macro pour vous montrer un peu mon idée. Ce fichier génère des événements, le problème est qu'il les génère à chaque changement de caractère, ce qui n'est évidemment pas souhaité.

Meilleures salutations et merci pour votre aide

Bonjour à tous,

Si tu remplaces ceci :

Public WithEvents Txtbx As MSForms.TextBox

par cela

Public WithEvents Txtbx As MSForms.Control

tu disposes bien de l'événement Exit

Mais il faut peut-être revoir l'ensemble de ta procédure.

Difficile d'aller plus loin, je ne suis pas assez calé en Module de Classe

Autre remarque, je vois qu'il y a un frame, il faudrait peut-être utiliser l'événement Exit du Frame pour le dernier TextBox

Klin89

ReBonjour,

J'ai suivi les instructions que vous m'avez conseillé et en voici les conclusion :

1) La solution de Bouben fonctionne, mais elle ne prend pas en compte les clics de souris, ce qui est vraiment regrettable.

2) La solution proposée par Clin 89 ne fonctionne malheureusement pas dans mon cas.

Auriez-vous d'autres propositions qui permettraient de réaliser un controle de saisie "hh:mm" après avoir créer des TextBox de façon dynamique?

Bonne fin journée à tous

Bonjour,

Ci-joint une solution à tester.

Ce sujet me taraude depuis plus d'un an, enfin une solution trouvée après de nombreuses recherches, adaptée pour être générique au maximum.

Merci à un certain SilkyRoad.

Bouben

Salut,

Un grand merci pour ton aide Bouben, ton fichier marche parfaitement, il me reste plus qu'à l’adapter à mon code.

Meilleures Salutations

Kévin Loetscher

Rechercher des sujets similaires à "evenement exit control dynamique textbox"