Reduire le même code de plusieurs Controls

laurent45

XLDnaute Occasionnel
Bonjour le Forum,

J'ai le code suivant, et je souhaiterai savoir, s'il y avait une possibilité de le reduire.

Précision : Chaque Control est de type TextBox

Code:
Private Sub CARestauMidiBox_AfterUpdate()
     CARestauMidiBox = Format(CDbl(CARestauMidiBox), '# ##0.00')
End Sub

Private Sub CARestauMidiBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Private Sub CARestauSoirBox_AfterUpdate()
     CARestauSoirBox = Format(CDbl(CARestauSoirBox), '# ##0.00')
End Sub

Private Sub CARestauSoirBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Private Sub CAVAE196MidiBox_AfterUpdate()
     CAVAE196MidiBox = Format(CDbl(CAVAE196MidiBox), '# ##0.00')
End Sub

Private Sub CAVAE196MidiBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Private Sub CAVAE196SoirBox_AfterUpdate()
     CAVAE196SoirBox = Format(CDbl(CAVAE196SoirBox), '# ##0.00')
End Sub

Private Sub CAVAE196SoirBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Private Sub CAVAE55MidiBox_AfterUpdate()
     CAVAE55MidiBox = Format(CDbl(CAVAE55MidiBox), '# ##0.00')
End Sub

Private Sub CAVAE55MidiBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Private Sub CAVAE55SoirBox_AfterUpdate()
     CAVAE55SoirBox = Format(CDbl(CAVAE55SoirBox), '# ##0.00')
End Sub

Private Sub CAVAE55SoirBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
     If KeyAscii = 46 Then KeyAscii = 44
End Sub

Merci

Laurent
 

excalibur

XLDnaute Impliqué
bonjour laurent , le forum pour reduire ton code peut etre passer par des modules de classe ex: empecher toutes caracteres different de 0 1 2 ect..dans mes textboxs une cinquantaine Public WithEvents essai As MSForms.TextBox
Private Sub essai_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = Asc('1') Or KeyAscii = Asc('2') Or KeyAscii = Asc('0') Or KeyAscii = Asc('3') Or KeyAscii = Asc('4') Or KeyAscii = Asc('5') Or KeyAscii = Asc('6') Or KeyAscii = Asc('7') Or KeyAscii = Asc('8') Or KeyAscii = Asc('9') Or KeyAscii = Asc('.') Then
Exit Sub
Else
On Error Resume Next
MsgBox 'attention !! frappe sur un touche differente de ==> 0123456789 pour eviter les erreurs remplacement de la touche par .
KeyAscii = Asc('.')
End If
End Sub dans un module standard Sub test(Optional X As String)
Dim TxtBoxClasses(1 To 50) As txtboxclasse
Dim i As Integer
For i = 1 To 50
Set TxtBoxClasses(i) = New txtboxclasse
Set TxtBoxClasses(i).koh = koh.Controls('TextBox' & i)
Next i
essai.Show
End Sub' salutations
 

laurent45

XLDnaute Occasionnel
[Réglé]Reduire le même code de plusieurs Controls

Bonsoir MyDearFriend!, Excalibur, le Forum,

Merci pour ta formule MDF!, je vais déjà gagner un peu de place et d'octets.

Désolé Excalibur, mais je trouve ton code un peu top complexe pour juste une dizaine de TextBox. Mais je vais me pencher dessus.

A bientôt

Laurent

Message édité par: Laurent45, à: 07/09/2005 22:12
 

myDearFriend!

XLDnaute Barbatruc
Re:[Réglé]Reduire le même code de plusieurs Controls

re laurent45,
Bonsoir excalibur,

Pour excalibur, en terme de gain de poids, l'utilisation d'un module de classe peut-être une solution effectivement, mais à mon avis seulement si il y a un nombre important de contrôles à gérer... Je pense qu'il convient de privilégier les choses simples quand on peut...
Par ailleurs, sauf erreur de ma part, les évènements AfterUpdate() et BeforeUpdate() (tout comme Exit et Enter) ne seront pas disponibles pour les TextBox dans le module de classe.

Laurent45, si tu veux encore gagner un peu de place (un tout petit peu ici), tu pourrais également essayer avec une fonction unique qui renverra la valeur formatée pour chacun des TextBox. Quelque chose comme ça :
Private Sub Textbox1_AfterUpdate()
        TextBox1 = MAJform(TextBox1)
End Sub

Private Sub Textbox2_AfterUpdate()
        TextBox2 = MAJform(TextBox2)
End Sub

'Même chose pour les autres...

Private Function MAJform(T As String) As String
      MAJform = Format(CDbl(Replace(T, '.', ',')), '# ##0.00')
End Function
Cordialement,
 

laurent45

XLDnaute Occasionnel
Re:[Réglé]Reduire le même code de plusieurs Contro

Re Didier MDF!, Excalibur,

Ton idée de Function, m'a donnée des idées...

Par contre la function pourrait marcher comment pour une addition de TextBox ?
Code:
TextBox3.Value = MAJForm((TextBox1.Value) + (TextBox2.Value))
Problème de type !! :eek:

J'ai vraiement un souci avec cette bète là (les types). Pour d'autres, j'ai adapté au type Range et ça marche, mais là !! :ermm:

Faut que je trouve des info pour gérer correctement mes types.
Pourtant l'encadrement de personnel, ça me connais lol !!!

Laurent
 

myDearFriend!

XLDnaute Barbatruc
Re:[Réglé]Reduire le même code de plusieurs Contro

Re,

Tu peux peut-être essayer comme ça :
      TextBox3.Value = CDbl(MAJform(TextBox1.Value)) + CDbl(MAJform(TextBox2.Value))
Il faut convertir les valeurs des TextBox en numérique avant de procéder à l'addition. CDbl() exige que le séparateur soit une virgule (tandis que Val() demande un point !).

Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
312 590
Messages
2 090 040
Membres
104 354
dernier inscrit
Chass