XL 2016 Executer une procédure pour chaque textbox

dodineau

XLDnaute Occasionnel
Bonjour,
J'ai 38 textbox dans mon userform et je voudrais qu'a chaque fois que je change une valeur dans un des textbox une procédure unique s'exécute pour ce textbox.
Y a-t-il une formule pour cela ?
Merci pour votre aide.
A+
 

job75

XLDnaute Barbatruc
Bonjour dodineau,

Il faut une macro pour chaque TextBox comme celle-ci (adapter le nom de chaque TextBox) :
VB:
Private Sub TextBox1_Change()
MaProcedure 'lance la macro
End Sub
Si l'on veut éviter d'écrire les 38 macros il faut utiliser un Module de classe, faites une recherche sur ces mots.

A+
 

Lolote83

XLDnaute Barbatruc
Salut Dodineau, Job75,
Effectivement la possibilité d'écrire 38 fois la même chose est faisable.
Comme le dit à juste titre notre ami Job75, l'utilisation d'un module de classe est faisable.
C'est chose faite ici pour info
Voir fichier joint
@+ Lolote83
 

Pièces jointes

  • Copie de DODINEAU - TextBox et module de classe.xlsm
    35.3 KB · Affichages: 23

dodineau

XLDnaute Occasionnel
Merci Lolotte 83, ça fonctionne comme ça.
Par contre en fait j'ai 2 fois 38 textbox et je dois lancer 2 procédures différentes.
Hauteur_1 à Hauteur_38 qui lancent une procédure unique.
Longueur_1 à Longueur_38 qui lancent une autre procédure unique.
Je n'arrive pas à transformer ton exemple.
A+
 

job75

XLDnaute Barbatruc
Bonjour dodineau, Lolote83,

Le code du Module de classe :
VB:
Public WithEvents TB As MSForms.TextBox

Private Sub TB_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
If TB.Name Like "Hauteur*" Then Procedure1
If TB.Name Like "Longueur*" Then Procedure2
End Sub
Le code de l'UserForm :
VB:
Dim TB() As New Classe1

Private Sub UserForm_Initialize()
Dim c As Control, n
    For Each c In UserForm1.Controls
        If TypeName(c) = "TextBox" Then
            ReDim Preserve TB(n)
            Set TB(n).TB = c
            n = n + 1
        End If
    Next
End Sub
A+
 

dodineau

XLDnaute Occasionnel
Merci à vous 2 :)
Par contre je ne veux pas un événement sur DBLclic mais sur Exit ou sur KeyPress. Il y a bien l'événement KeyPress mais bizarrement je ne trouve pas de procédure sur exit ou sur beforeUpdate dans le module de classe, c'es normal ?
 

Lolote83

XLDnaute Barbatruc
Re salut,
Je pense que c'est normal.
Les seuls évènements possibles pour les TextBox sont ceux là (du moins chez moi) mais je pense que c'est général à tout le monde
1033099

@+ Lolote83
 

Lolote83

XLDnaute Barbatruc
Re,
Oui, mais là on est dans un module de classe et non pas directement dans le formulaire.
C'est la aussi une différence. A toi de voir si tu veux faire (2 x 38 = 76) procedures pour simplement avoir accès à un Exit ou autre qui n'existe pas dans le module de classe ....
@+ Lolote83
 

Lolote83

XLDnaute Barbatruc
Salut DODINEAU,
Si tu effectues l'opération doucement, tu comprendras mieux pourquoi il y a ce phénomène
Exemple :
Lors du 1er double-clic, un message t'informe que l'on execute une procédure UNIQUE
De là, tu es obligé de cliquer sur le bouton OK du MessageBox
Un nouveau clic sur un nouveau TextBox en fait donne le focus au formulaire (puisque celui-ci a été "mis de coté" à cause du message box)
Puis de nouveau le double-clic pour afficher de nouveau le MessageBox. Cela fait donc 4 clic
- 1) MessageBox
- 2) Pour revenir au formulaire
- 3 et 4) Nouveau double-clic
En espérant que cette explication est suffisamment claire (fait tout doucement et tu comprendras) mais si la procédure lancée ne nécessite pas de MessageBox, tu ne devrais pas avoir ce phénomène. Enfin je pense

Sinon, tu peux essayer avec la propriété MouseDown comme dans l'exemple suivant mais avant d'utiliser cette nouvelle propriété, teste avec l'ancien formulaire ce qui est expliqué ci-dessus.

@+ Lolote83
 

Pièces jointes

  • Copie de DODINEAU - TextBox et module de classe.xlsm
    36.5 KB · Affichages: 8

Discussions similaires

Réponses
15
Affichages
425