Un évènement pour plusieurs TextBox (Résolu)

gam

XLDnaute Junior
Bonjour

Dans un UserForm j'ai 38 TextBox, afin d'éviter de coller 38 fois le code ci-dessous, j'aimerai savoir si il est possible d'affilier le même évènement "MouseMove" sur toutes les TextBox ?
Je vous remercie pour toutes réponses à venir.
Code:
Private Sub TextBox1_MouseMove()
If Oméga10.TextBox1.Value = "" Then Exit Sub
Oméga10.TextBox1.ControlTipText = Evaluate(TextBox1.Text)
End sub
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Un évènement pour plusieurs TextBox

Bonjour gam,

Voici un exemple typique d'utilisation des modules de classe.

Attention, ce n'est pas forcément évident à comprendre. Aussi, je te suggère de recopier ce code dans ton application, et dans les modules adéquats. N'oublies pas de créer un module de classe et de le renommer comme dans cet exemple. Si tu préfères lui donner un autre nom, il faudra alors le changer dans le code sans en oublier.

Bien sûr, la macro MouseDown peut faire toute autre chose que celle que je lui ai affectée.

Cordialement.
 

Pièces jointes

  • Demo gam.xls
    32.5 KB · Affichages: 114

Papou-net

XLDnaute Barbatruc
Re : Un évènement pour plusieurs TextBox

RE :

Pour essayer de te faciliter la tâche, voici un exemple qui reprend ta configuration (j'avais zappé ton code).

J'ai limité le nombre de TextBox à 10, mais tu peux ajouter les 28 manquants sans avoir à modifier le code.

Cordialement.
 

Pièces jointes

  • Demo gam 01.xls
    36.5 KB · Affichages: 131

gam

XLDnaute Junior
Re : Un évènement pour plusieurs TextBox

Bonjour Papou-net et merci pour l'attention que tu apportes à mon topic.

Il est vrai que c'est loin d'être évident à comprendre.
Peut être que je devrais commencer par un exemple plus simple afin que je comprenne comment tout ça marche.
Ça donnerait quoi avec ce code :
Code:
Private Sub CheckBox1_Click()
TextBox1.SetFocus
End Sub
Désolé d'abuser de ta patience, mais j'aime comprendre les choses plutôt que de les copier bêtement !
Merci
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Un évènement pour plusieurs TextBox

RE : Jérôme,

Je ne comprends pas bien ta dernière question, mais pour revenir à ta demande initiale, c'est la meilleure solution pour traiter de nombreux contrôles.
Je ne connais pas ton niveau en VBA, mais si tu comprends les modules de classe, tu vas faire un grand pas en avant.
Je vais donc essayer de t'expliquer le plus clairement possible la conception de cette méthode particulière :

Pour commencer, bien sûr, tu crées normalement tes contrôles sur ton formulaire.

Ensuite, tu insères un module de classe et tu lui donnes un nom explicite. Dans mon exemple, je l'ai nommé clTextBox ce qui pour moi signifie : classeTextBox. Dans la rubrique Général du module de classe, tu crées un groupe (GrpTB) auquel tu affecteras les événements disponibles pour ce type dans la liste déroulante de droite après l'avoir sélectionné dans celle de gauche.

Puis, dans le module de code du formulaire, tu commences par déclarer un tableau dynamique qui contiendra la liste de tous les TextBox que tu voudras y affecter. Dans cet exemple c'est simple car c'est l'ensemble qu'on va y enregistrer. Il serait possible de n'en affecter qu'une partie mais ne compliquons pas les choses pour le moment. Donc tu écris dans la rubrique Général du module Omega10 la déclaration suivante : Dim TBox() As New clTextBox. Le tableau TBox sera donc utilisé par le module de classe pour gérer les contrôles qu'il contient.

Ensuite, tu enregistres les contrôles TextBox dans ce tableau, au moyen d'une boucle. La particularité de cette boucle est qu'elle balaie la totalité des contrôles du formulaire et si le type (TypeOf) est un TextBox elle l'ajoute en lui affectant l'indice i. C'est cet indice qui sera utilisé par VBA pour déterminer le contrôle actif dans le code du module de classe.

Enfin, tu reviens dans le module de classe, et après avoir sélectionné GrpTB dans la liste déroulante de gauche tu lui affectes l'événement MouseMove que tu trouveras dans celle de droite. Et là, tu lui fait faire ce que tu veux comme dans un module de code objet classique.

Si tu essaies, par la suite d'ajouter d'autres contrôles TextBox, tu n'auras rien d'autre à faire. Sauf si, bien sûr, tu désires dissocier ces nouveaux contrôles mais c'est une autre histoire et à chaque jour suffit sa peine. L'essentiel, pour le moment, est que tu assimiles bien ces notions de base.

Je t'avoue que moi-même il m'a fallu un peu de temps pour comprendre, la principale difficulté est de discerner les objets et les variables. Même s'ils ne sont pas toujours très clairs, tu trouveras quelques tutos sur ce sujet sur la toile.

Espérant avoir été clair et ne pas t'avoir rasé avec ces explications. Et t'avoir donné le goût de persévérer.

Cordialement.
 

gam

XLDnaute Junior
Re : Un évènement pour plusieurs TextBox

Et ben ...:D
Je ne sais pas comment te remercier pour toutes tes explications si précieuses pour moi , alors je pense que la meilleur des reconnaissances serait que je ne lâche pas l'affaire t'en que je n'ai pas tout compris.
Mon cerveau va sûrement chauffer durant quelques heures le temps que J'assimile tout ça, mais je finirais par comprendre.

Je regarde tout ça et je te tiens au courant.
Milles merci Papou-net c'est vraiment très généreux de ta part.
 

gam

XLDnaute Junior
Re : Un évènement pour plusieurs TextBox

Bonjour tout le monde.
J'ai pu comprendre et appliquer les précieuses explications que tu m'as donné, Papou-net et je t'en remercie une nouvelle fois.
Ton code marche très bien pour toutes mes UserForms "dynamiques" (Longueur de l'UserForm et Le nombre de TextBox varient en fonction d'un tableau d'une feuille excel). Nickel
Par contre, ne voulant pas passer à côté de quelque chose, j'aimerai comprendre en quoi les "modules de classe" peuvent me faire un grand pas en avant.
A vrai dire je ne voie pas vraiment où je pourrai les utiliser autrement que dans ce cas là !?
Quel sont leurs but/Intérêt ?
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Un évènement pour plusieurs TextBox (Résolu)

Bonsoir.
L'intérêt essentiel des modules de classe est de permettre de confiner des structures de données complexes ainsi que les processus qui les gèrent dans des sortes de boîtes noires dont ne voit de l'extérieur qu'une partie émergée d'aspect simple: les propriétés et les méthodes. Ici l'intérêt est différent: juste de contourner une impossibilité syntaxique d'écrire des procédures évènements d'objets éléments de tableaux. On écrit donc un module de classe contenant en tant que propriété un seul objet déclaré With Events avec sa procédure qui gère un évènement commun souhaité, et on utilise un tableau d'objets de cette classe au lieu du tableau d'objets gérés.
À +
 

Misange

XLDnaute Barbatruc
Re : Un évènement pour plusieurs TextBox (Résolu)

Bonjour
En complément de l'excellent résumé de Papou que je salue, voici quelques pages qui t'aideront peut être à mieux saisir l'intérêt et les particularités des modules de classe
Ce lien n'existe plus
Ce lien n'existe plus
et pour sourire
Ce lien n'existe plus
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 489
Messages
2 088 854
Membres
103 975
dernier inscrit
denry