Grouper l'action sur plusieurs TextBox

Bonjour,

Ma demande concerne l'allègement de mon code. Mon programme est muni de plusieurs UserForm contenant également plusieurs TextBox.

Les TextBox concernées possèdent un code obligeant l'entrée de valeurs numériques.

J'ai donc par exemple :

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)        
If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then     
MsgBox "Caractère non autorisé, chiffres uniquement", vbExclamation   
KeyAscii = 0                                                          
End If                                                                    
End Sub  

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)        
If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then     
MsgBox "Caractère non autorisé, chiffres uniquement", vbExclamation   
KeyAscii = 0                                                          
End If                                                                    
End Sub

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)        
If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then     
MsgBox "Caractère non autorisé, chiffres uniquement", vbExclamation   
KeyAscii = 0                                                          
End If                                                                    
End Sub

Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)        
If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then     
MsgBox "Caractère non autorisé, chiffres uniquement", vbExclamation   
KeyAscii = 0                                                          
End If                                                                    
End Sub

Je rentre le code pour chaque TextBox ce qui me parait être lourd et je pense qu'il y a possibilité d'alléger tout cela sachant que pour chaque UserForm cela concerne entre 10 et 15 TextBox.

Je vous remercie d'avance pour vos réponses !

Bonjour et bienvenue sur le forum

Un peu plus court, mais guère :

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call SsProgr
End Sub

Private Sub TextBox3_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call SsProgr
 End Sub

Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call SsProgr
End Sub

Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Call SsProgr
End Sub

Sub SsProgr()
    If InStr(1, "0123456789.,", Chr(KeyAscii)) = 0 And KeyAscii <> 8 Then
    MsgBox "Caractère non autorisé, chiffres uniquement", vbExclamation
    KeyAscii = 0
    End If
End Sub

Bye !

Hello valentinLF et gmb,

Si tu prévois d'utiliser beaucoup de Textbox qui doivent être numériques, je te conseille l'utilisation d'un module de classe!

Grâce à cela, tu pourrais personnaliser toutes tes textbox d'un seul coup, et toutes les éditer en même temps si besoin.

Bonjour,

je me permet de poser ma question ici ,

peut-on sélectionner tous les TextBox d'une même userform en même temps avec juste quelque ligne ou on est oubliger de les faire une à une ?

Merci pour vos réponses !

d3d9x tu pourrais me donner des indications pour l'utilisation d'un module de classe dans mon cas ?

Je débute en VBA et donc je ne suis pas encore au top

300valentinlf.xlsm (22.38 Ko)

Un fichier vaut mieux qu'un beau discours. Si tu débutes en VBA ce ne sera pas de ton niveau de comprendre comment ça marche de toute façon ^^

Pour l'utilisation, c'est ultra simple. Tu crée ton formulaire, et dans le "Initialize", tu rajoutes autant de fois que nécessaire

Private Sub UserForm_Initialize()
    ajouterTextbox TextBox1
    ajouterTextbox TextBox2
    ajouterTextbox TextBox3
    ajouterTextbox TextBox4
   'etc..... autant de fois que tu as de textbox à passer en numérique.
End Sub

Merci beaucoup d3d9x ça marche nickel !

J'ai quand même jeté un oeil sur le code pour essayer de comprendre. Malgré que je sois débutant, je suis en stage et j'ai pour mission de créer un petit logiciel donc je ne veux pas coder ou recopier bêtement. L'idée étant de m'améliorer plus que de finaliser le logiciel.

En tout cas merci

Je reviens du coup vers le code que tu m'a donné. Du coup il est possible de l'utiliser également pour une liste de Textbox auxquelles ont souhaite fixer un format spécifique par exemple :

Private Sub TextBox1_AfterUpdate()
TextBox1.Value = Format(TextBox1.Value, "00.00 €")
End Sub

C'est le même principe ?

Oui tu peux parfaitement faire ce genre de choses grâce aux modules de classes.

Toutes les "personnalisations" peuvent être réalisées dans ce module, et toutes les textbox qui lui sont associées auront les même "personnalisations"

Par rapport à ce que tu veux faire, j'ai cependant un problème, l'évènement "_AfterUpdate" ne semble pas être disponible dans le module de classe (et je ne sais absolument pas pourquoi!). Voilà où l'on peut voir les événements disponibles dans le module de classe.

sans titre

Il faudrait que tu trouves un autre événement qui répond à ta recherche (par exemple l’événement "change")

Si tu as besoin d'aide n'hésite pas à m'envoyer des messages privés, j'y répondrai.

PS: je n'utilise jamais la fonction "format" je ne sais donc pas si ce que tu as écrit fonctionnera ou non.

Bonjour à tous,

Je me permets juste une incise : Change intervient à chaque caractère tapé, l'évènement le plus proche de AfterUpdate serait Exit (s'il est disponible dans le module de classe.

Sur la mise en forme du texte dans le TextBox, pas de problème elle fonctionnera.

Cordialement.

Effectivement MFerrand tu as raison, "Change" intervient directement après qu'un caractère soit saisi donc quand je rentre un montant par exemple 15€, dans ma textbox, je me retrouve avec 01,00€5

Et l’événement Exit n'est pas disponible non plus

Après je peux utiliser des événement comme MouseMove mais ce n'est vraiment pas terrible..

Me doutais que les formats pourraient être problématiques.

Une proposition: utiliser le double clique. Lorsque tes données sont saisies, tu fais un double clique dans la cellule et le format s'applique. Code à copier/coller dans le module de classe

Private Sub txtboxNumerique_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
txtboxNumerique.Value = Format(txtboxNumerique.Value, "00.00 €")
End Sub

Ou astuce de contournement, programmer la mise en forme sur l'évènement Enter d'un autre contrôle qui se trouve logiquement après sur le parcours...

88valentinlf.xlsm (25.07 Ko)

La proposition de MFerrand mise en pratique avec des commandbutton et un module de classe!

Pour le coup, j'ai programmé les formats un par un dans chaque TextBox dans le UserForm. C'est un peu lourd mais sa fonctionne. Je m'y repencherais si besoin, quand je serais à la fin de mon logiciel.

Les propositions des CommandButton ou du double clique fonctionnent mais ce n'est pas vraiment l'idéal.

En tout cas je vous remercie pour avoir pris le temps de répondre à mon problème !

Rechercher des sujets similaires à "grouper action textbox"