un seul code pour 14 textbox

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
 

Nairolf

XLDnaute Accro
Re : un seul code pour 14 textbox

Salut dindin, salut le forum,

Essaye avec ça :

Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim moncontrole As Control

For Each moncontrole In Controls

If TypeName(moncontrole) = "TextBox" Then

moncontrole.Value = Format(moncontrole.Text, "# ###.00 €")

End If

Next

End Sub
 

Dranreb

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Bonjour.
Vous n'avez pas d'autre choix que d'écrire la procédure dans un module de classes ne comportant qu'une seule variable déclarée Public WithEvents TBx As TextBox
Dans l'userform vous déclarez un tableau de 14 élément As New Classe1 et vous faite un Set de chacun des vrais TextBox à la propriété TBx de chaque élément.
P.S. Heu… la procédure TBx_Exit devient du coup plus simple, elle par contre, vous travaillez simplement avec l'unique TBx
À +
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Clic droit dans le projet, Insertion, Module de classe.
Faites comme on vous a dit, si vous n'arrivez pas à le mettre au point, soumettez nous le fichier joint.
Ou alors renoncer à vos 14 TextBox. Pour moi c'est une aberration. J'en mettrais qu'un, ou 2 (* 7 ?), et j'empilerais plusieurs saisies dans une ListBox ou une ListView.
À +
 

Dranreb

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Bonjour Papou-net.
Effectivement, bien vu, j'avais oublié, mais déjà constaté qu'aucune méthode ou évènement lié de près ou de loin au focus ne peut être utilisé dans ce contexte. Il faut le faire dans une procédure Change.

P.S. Hé hé ! J'ai du nouveau à creuser: en examinant les objets de la bibliothèque MSForms, je m'aperçois que c'est parce que ces membres (méthodes et évènements) n'appartiennent pas à l'objet TextBox (ni ComboBox ni autres), mais à l'objet général qu'il encapsule, et qui est Control. Donc en déclarant Dim WithEvents TBx As Control ça devrait passer…
Cordialement.
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Bonjour Papou-net,

Pas bien compris mais pour une TextBox (ActiveX bien sûr) :

- dans un UserForm => événement Exit

- dans une feuille de calcul => événement LostFocus.

A+

RE : job75,

Je veux dire que dans la déclaration Public WithEvents... du module de classe, l'événement Exit n'apparaît pas dans la liste déroulante. Je parlais bien de contrôles dans un UserForm.

Dans le module de classe de l'exemple ci-joint, si je sélectionne groupetextbox dans la liste déroulante de gauche puis si je déroule celle de droite, pas de choix pour Exit.

Cordialement.

Edit : j'ai oublié de te préciser que je n'ai que 64 ans (mais je suis tout près de passer le cap fatidique)
 

Pièces jointes

  • Modules de classe.xls
    39.5 KB · Affichages: 81
  • Modules de classe.xls
    39.5 KB · Affichages: 77
  • Modules de classe.xls
    39.5 KB · Affichages: 83
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Bonjour Papou-net.
Effectivement, bien vu, j'avais oublié, mais déjà constaté qu'aucune méthode ou évènement lié de près ou de loin au focus ne peut être utilisé dans ce contexte. Il faut le faire dans une procédure Change.
Cordialement.

Re Bernard,

C'est effectivement ce que j'ai tenté de faire, mais il y a redondance et il s'avère impossible de formater le TextBox avant d'avoir terminé la saisie, puisque sa valeur change à chaque appui de touche. Seul un événement Exit me semble exploitable. J'ai bien essayé de passer par une variable intermédiaire, mais ne suis pas arrivé au terme de cet essai.

Cordialement.
 

laetitia90

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

bonjour tous tu peus deja "ruser" avec KeyDown

exemple
Code:
Private Sub txt_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If (KeyCode = 13 Or KeyCode = 9 Or KeyCode = 40) And txt <> "" Then _
txt = Replace(Format(txt, "0.00 €"), ".", ",")
End Sub

j'ai fais un exemple avec LostFocus la tu deplace seulement la souris cela marche

attention c'est du brut j'ai repris un exemple que j'avais fait il y a longtemps
 

Pièces jointes

  • calclass focus1.xls
    68.5 KB · Affichages: 71
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : un seul code pour 14 textbox

Bonjour Laetitia,

J'ai également tenté de passer par KeyDown, mais pris par l'heure du déjeûner, j'ai arrêté avant de conclure. Ca marche effectivement, mais la mise e, forme ne se fait pas dans le contrôle en cours comme le demandait notre ami dindin (c'est du moins ce que j'ai compris). Je ne comprends pas pourquoi MS n'a pas jugé bon de prévoir ce cas de figure, ce qui est bien dommage..

Il me semble toutefois avoir lu, dans mes recherches sur les modules de classe, qu'il était possible de créer des événements mais je crains que cela dépasse mes compétences dans ce domaine.



Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 688
Messages
2 090 963
Membres
104 714
dernier inscrit
GARGAMEL