Multiplication de code

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 !

gildas lechat

XLDnaute Occasionnel
Bonjour le forum,

juste une question que je me pose: 😕
j'ai le code ci dessous que je doit répéter sur une trentaine de textbox ..
Est qu'il faut répéter le code sur chaque textbox ou peut on globaliser un code identique applicable sur plusieurs textbox?
Si c'est possible, qu'elle est la fonction?


Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 46 'Change le point en virgule
KeyAscii = 44
Case 44, 48 To 57 'Autorise les touches 0 à 9
Case Else
KeyAscii = 0
End Select
End Sub

Merci de votre aide

Gildas
 
Re : Multiplication de code

Re, bonjour Kjin

essaye ainsi, dans le module de l'USF :

Code:
Option Explicit
Private mestb() As New Classe1
Private Sub UserForm_Initialize()
Dim ctrl As Control, i As Byte
For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
        ReDim Preserve mestb(0 To i)
        Set mestb(i).montb = ctrl
        i = i + 1
    End If
Next ctrl
End Sub

dans le module de classe :

Code:
Option Explicit
Public WithEvents montb As MSForms.TextBox
Private Sub montb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789,", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

bon après midi.
@+
 
Re : Multiplication de code

Bonjour le forum,


Je me permet de reprendre le fil de discussion sur le module de forme ci joint.

Pour l'insérer dans ma macro, 2 points d'amélioration sont nécessaire:

- Comment limiter le champ d'application sur le nombre de texbox?
Exemple : sur le dossier joint, limiter l'application du module de forme sur les textbox de 1 à 5 ( sans prendre en compte le texbox 6)

- les caratères de 1 à 9 sont autorisés, ainsi que le point. J'amerai pouvoir transformer le point en virgule ( en gardant le clavier numérique pour une facilité de saisi)

Merci d'avance pour votre aide
Gildas
 

Pièces jointes

Re : Multiplication de code

Re

A noter, si c'est le cas comme dans ton exemple tu peux modifier l'initialisation ainsi :

Code:
Option Explicit
Private mestb() As New Classe1
Private Sub UserForm_Initialize()
Dim ctrl As Control, i As Byte
For Each ctrl In Me.Controls
    If TypeName(ctrl) = "TextBox" Then
        If ctrl.Name <> "TextBox6" Then
            ReDim Preserve mestb(0 To i)
            Set mestb(i).montb = ctrl
        End If
        i = i + 1
    End If
Next ctrl
End Sub

pour ton problème de point :

Code:
Option Explicit
Public WithEvents montb As MSForms.TextBox
Private Sub montb_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If InStr("0123456789,.", Chr(KeyAscii)) = 0 Then KeyAscii = 0
    If KeyAscii = 46 Then KeyAscii = 44
End Sub

@+
 
Re : Multiplication de code

Bonjour le forum,
Bonjour Pierrot93

Je reviens sur le module de forme. Celui ci fonctionne parfaitement, mais entre en conflits avec une instruction déjas présente dans la macro.
Ci dessous le point dure rencontré:

- Comment obliger, dans l'exemple joint, le textbox6 en saisi majuscule?
Le code suivant fonctionne, mais difficile à intégrer avec le module de forme
TextBox6 = UCase(TextBox6)


😀Dernier point, facultatif mais interessant pour la personne qui saisie pour éviter les erreurs de frappe, la macro suivante permet de mettre en vert ou en rouge le textbox si la saisi est entre 2 valeur ou pas.

-Comment intégrer le code suivant adapté au textbox1 dans le module de forme pour qu'il soit applicable sur les textbox de 1 a 5 ?:

'Private Sub TextBox1_Change()
'change de couleur selon valeur de saisie
'Dim tolp As Single
'Dim tolm As Single

'If TextBox1.Value = "" Then TextBox1.BackColor = &H80000005: Exit Sub
'tolp = Val(Label1.Caption) + Val(Label2.Caption)
'tolm = Val(Label1.Caption) - Val(Label3.Caption)
'Select Case CDbl(TextBox1.Value)
'Case tolm To tolp
'TextBox1.BackColor = vbGreen
'Case Not numeric
'TextBox1.BackColor = vbRed
'Case Is < tolm, Is > tolp
' TextBox1.BackColor = vbRed
'End Select
'End Sub

Cerise sur le gateau, et si le point ci dessus est réglé,

Le code ci dessus est à multiplier sur les textbox 7 à 11
avec les variables suivantes

'tolp1 = Val(Label4.Caption) + Val(Label5.Caption)
'tolm2 = Val(Label4.Caption) - Val(Label6.Caption)

(Dans la mocro original le code est mutiplier 17 fois avec des variables différente à chaque fois)
Existe t'il des solutions plus simple que de multiplier le code par 17?

Merci d'avance pour votre aide
Gildas
 

Pièces jointes

Re : Multiplication de code

Bonjour,

comprends pas trop ton problème avec le "textbox6", celui ci étant écarté de la classe comme tu le demandais dans ton post d'hier à 12h52.... ce qui a donné ce controle :
Code:
If ctrl.Name <> "TextBox6" Then
 
Re : Multiplication de code

Re,

pour ton 2ème point, à placer dans le module de classe :

Code:
Private Sub montb_Change()
Dim tolp As Single, tolm As Single
If montb.Value = "" Then montb.BackColor = &H80000005: Exit Sub
tolp = Val(UserForm1.Label1.Caption) + Val(UserForm1.Label2.Caption)
tolm = Val(UserForm1.Label1.Caption) - Val(UserForm1.Label3.Caption)
Select Case CDbl(montb.Value)
Case tolm To tolp
montb.BackColor = vbGreen
Case Not IsNumeric(montb.Value)
montb.BackColor = vbRed
Case Is < tolm, Is > tolp
montb.BackColor = vbRed
End Select
End Sub
 
- 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

  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
358
Retour