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

un seul code pour 14 textbox

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dindin

XLDnaute Occasionnel
Bonjour le forum

SVP comment faire pour appliquer ce meme code sur 14 textbox (du N° 1 au N°14 )
afin d'éviter de le repeter 14 fois.

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim i As Byte
For i = 1 To 14
With Me.Controls("TextBox" & i)
.Value = Format(.Text, "# ###.00 €")
End With
Next i
End Sub
 
Re : un seul code pour 14 textbox

C'est très facile de créer des évènements: Instruction Event pour les déclarer, RaiseEvent pour les décréter.
Mais ça ne serait d'aucune utilité ici.
Je pense qu'il faut bien utiliser l'évènement Exit de l'objet Control. Déclarer l'objet Dim WithEvents TBx As Control et non pas TextBox.
Dans les userform ça marche parce que tout TextBox installé dans la fenêtre de conception y est aussi connu en tant que Control parce que c'est géré pour ça derrière. Mais VBA ne peut pas le deviner dans un module de classe. Je le répète: Exit est un évènement de l'objet Control et non de l'objet TextBox.
P.S. Je confirme qu'en déclarant dans ton dernier classeur joint, Papou-net:
VB:
Public WithEvents groupetextbox As MSForms.Control
Les évènements Enter Exit sont proposés dans la liste.
Cordialement
 
Dernière édition:
Re : un seul code pour 14 textbox


Ca me paraît plus clair, d'un coup. Je vais tester ceci plus tard. Merci Bernard.

Cordialement.
 
Re : un seul code pour 14 textbox

Re,

Je ne savais pas que l'événement Exit ne se crée pas dans un Module de Classe, merci Papou-net.

Alors avec l'événement Change mais ce n'est vraiment pas fameux :

Code:
Private Sub groupetextbox_Change()
Dim c As Control
With groupetextbox
  If .Name <> .Parent.ActiveControl.Name Then Exit Sub
  For Each c In .Parent.Controls
    If TypeName(c) = "TextBox" And c.Name <> .Name _
      Then c = Format(c, "# ###.00 €")
  Next
End With
End Sub
Ton fichier joint.

Edit : ah mais pas rafraîchi, merci Bernard !!

A+
 

Pièces jointes

Dernière édition:
Re : un seul code pour 14 textbox

Bonjour à tous,

J'ai testé et effectivement on a accès à l'événement Exit.

bah... chez moi renvoie une erreur lors de l'initialisation (sous 2003)....

dans le module de l'usf :
Code:
Option Explicit
Private mestb As New Classe1
Private Sub UserForm_Initialize()
Set mestb.t = TextBox1
End Sub

dans le module de classe :
Code:
Option Explicit
Public WithEvents t As MSForms.Control

bien sur je passe en modifiant "Control" par "TextBox", mais pas d'événement "exit" dans ce cas....

bon après midi
@+
 
Re : un seul code pour 14 textbox

Bonjour job75,

Il ne faut pas toucher à UserForm_Initialize, tout se passe dans le module de classe.

Vois l'exemplaire modifié de ton fichier ci-joint : si tu sélectionnes "grouptextbox" dans la liste déroulante de gauche de l'éditeurVBA, celle de droite affichera quatre événements (AfterUpdate, BeforeUpdate, Enter et Exit).

On a donc bien accès à Exit en déclarant grouptextbox comme control.

Cordialement.

Edit : bonjour Pierrot, je confirme que ça marche sur XL2003 (je n'ai pas encore testé sur 2010 car je ne suis pas chez moi, mais je vérifierai dès que possible).
 

Pièces jointes

Dernière édition:
Re : un seul code pour 14 textbox

Re,

@Papou-Net🙂
chez moi sous 2003, et dans le fichier que tu viens de joindre, la ligne de code ci dessous me renvoie le message d'erreur d'exécution 459 : "l'objet ou la classe ne gère pas le jeu d'événements"
Code:
Set Textboxs(Nb).groupetextbox = Ctrl
 
Re : un seul code pour 14 textbox

RE :

Effectivement, Pierrot et job, j'ai cliqué sur le bouton et j'obtiens également l'erreur 459. Je n'avais pas été jusque là précédemment, je m'étais contenté de vérifier que l'événement Exit était bien proposé comme l'affirmait Bernard. S'il repasse par ici, il nous dira peut-être ce que nous loupons car il nous parle de "RaiseEvent pour les décréter" dans son message #16 et j'avoue ne pas comprendre.

Cordialement.
 
Re : un seul code pour 14 textbox

rebonjour tous 🙂🙂🙂🙂
concernant le pb de l'ami dindin
je vois pas trop l'intêret de mettre un format avant de remplir les textboxs??? a ce compte la autant mettre un bouton plus le code dedans
autrement on pourrait faire
Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
es
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
es
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
es
End Sub
'ect....
Sub es()
 For i = 1 To 14
 If Controls("TextBox" & i) <> "" Then _
 Controls("TextBox" & i) = Format(Controls("TextBox" & i), "# ###.00 €")
 Next i
End Sub

mais la plus de class il faut pas avoir une centaine de textboxs!!!

autrement pour contourner le pb... d'exit dans classe sans passer par lostfocus pour le format

j'avais trouver une methode acceptable en cas ou on se deplace dans les textboxs par la souris & non par Enter
ou autres qui ne valide pas le format
code assez brut a l'epoque pas pousser la reflexion plus loin🙁🙁 on pourrait reflechir a ce pb par exemple exploite evenement change variable public... retro variable pour detecter le controle avant le dernier focus ect..
 

Pièces jointes

Re : un seul code pour 14 textbox

Bonsoir tout le monde, mes hommages Laetitia 🙂,

Merci Pierrot pour le lien, très intéressant avec les événements LostFocus et GetFocus de MichelXLD.

Mais finalement c'est bien compliqué pour pas grand'chose, et comme le dit Laetitia :

a ce compte la autant mettre un bouton plus le code dedans

C'est donc ce que j'ai fait dans le fichier joint.

Nota : pour le format il faut une virgule => "#,##0.00 €"

A+
 

Pièces jointes

Dernière édition:
Re : un seul code pour 14 textbox

Bonsoir.
Je confirme.
Ce composant ne gère pas cet ensemble d'événements
Alors celle là je ne l'avais jamais vue !
J'en reviens à supposer que les problèmes de focus sont trop intimement liés à des informations propres au userform pour qu'on puisse les utiliser dans un module de classe.
Cordialement.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
264
Réponses
3
Affichages
671
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…