Effectuer une action sur plusieurs textbox: evenement change
Bonjour à tous,
J'ai une petie question : voilà, j'ai un code que j'effectue sur chaque textbox (lors de textbox_change), c'est d'ailleur une personne du forum qui me l'avais donnée (encore merci).
Je l'utilise souvent et c'est bien pratique.
Comme le code est le même pour chaque textbox, ça serait utile pour la simplification de mon code de faire une boucle sur tout mes textbox (mes textbox ont pour nom "textbox1" "textbox2"..... "texbox6").
Quelqu'un sait comment faire cette boucle ?
Voilà le code
Private Sub TextBox1_Change()
On Error Resume Next
separateurDecimal = Application.International(xlDecimalSeparator)
TextBox1 = Replace(Replace(TextBox1, ",", separateurDecimal), ".", separateurDecimal)
If Not IsNumeric(Right(TextBox1, 1) & 1) And Right(TextBox1, 1) <> separateurDecimal _
And Right(TextBox1, 1) <> "" Or (Not IsNumeric(TextBox1 & 1) And Right(TextBox1, 1) <> "") Then
MsgBox "Le caractere saisi n'est pas valide"
TextBox1 = Left(TextBox1, Len(TextBox1) - 1)
End If
End Subj'ai bien essayé, mais c'est l'evement "textbox_change" qui m'a freiné, je ne sais pas vraiment comment m'y prendre.
Merci d'avance;
ElectricDandy
Bonjour Electric dandy le forum
il faut utiliser un module de classe pour traiter tous tes textboxs
sans fichier je te laisserai donc le faire
a+
papou
Salut
Je suis de bonne composition ce soir
Création d'une classe
'Dans un module de classe nommé "Classe1"
'
Option Explicit
Public WithEvents TextBoxGroup As MSForms.TextBox
'Evenement Change sur les TextBox de la feuille de calcul.
Private Sub TextBoxGroup_Change()
'Ici le code commun désiré pour nos textbox
'Pour info cet événement étant dédié à toutes les textbox
'On récupérera la textbox active par TextBoxGroup.Value
'Exemple
'Renvoie le nom et la valeur de la Textbox changée
[tab]MsgBox TextBoxGroup.Name & " : " & TextBoxGroup.Value[/tab]
end subIci la Classe est crée, une méthode _change tout ce qu'on veut quoi
On continue
'à placer dans le module objet ThisWorbook pour que la classe soit initialisée lors de l'ouverture du classeur.
Option Explicit
Private Sub Workbook_Open()
Dim Obj As OLEObject 'un petit tiroir pour mettre mes objets un à un
Dim maClasse As Classe1 'ma fameuse classe
Set maCollection = New Collection
'Un objet Collection est un jeu d'éléments indexés auxquels il peut être fait référence comme s'ils constituaient un ensemble unique.
'On boucle maintenant sur les objets de la Feuil1
For Each Obj In Worksheets("Feuil1").OLEObjects
'On verifie s'il s'agit d'une Textbox
If TypeOf Obj.Object Is MSForms.TextBox then
Set maClasse = New Classe1
Set maClasse.TextBoxGroup = Obj.Object
maCollection.Add maClasse
End If
Next Obj
End SubN'oublions pas de déclarer notre collection (option explicit oblige)
'dans un module standard
Option Explicit
Public maCollection As CollectionVoilà terminé.
Pas si compliqué à mettre en oeuvre, juste un peu de gymnastique d'ésprit pour comprendre comment cela fonctionne.
A bientôt
Bonjour,
Merci à vous deux pour m'avoir aidé.
Désolé Paritec de ne pas avoir mis mon fichier en pièce jointe, je ne savais pas si ça serait utile ou non pour ce code.
Merci mikebzh, c'est sympa de m'avoir montré le code et d'avoir mis les explications qui vont avec. J'étais pas mal perdue, et là du coup ça m'aide beaucoup, je comprend mieux comment ça fonctionne.
MERCI !
Vos deux réponses méritent d'être "accepté" par un V vert, mais comme il y a du code dans la réponse de mikebzh, je vais choisir celle ci, mais encore une fois, merci à vous deux.