Bonjour à tous !
Tous d'abord, je précise que j'ai déjà effectué des recherche sur google et sur le forum et que j'ai essayé plusieurs fois d'adapter les codes proposés pour résoudre mon problème... mais ça ne marche toujours pas.
Situation :
- j'ai un fichier XL qui contient plusieurs textbox dans lesquel il faut remplacer les . en ,
- j'ai écrit une macro (pas propre propre mais qui marche) pour le faire sur une Textbox automatiquement lorsque celle-ci est modifiée
- j'aimerais que lorsque quelqu'un modifie une textbox, cette macro soit automatiquement lancée afin d'éviter de la recopier pour chaque textbox (c'est lourd)
Je suis donc parti sur la création de Classes.
J'ai trouvé un code sur le net et j'ai essayé de l'adapter
Voici la création de la classe
Dans un module classe appelé "Classe1" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 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 For i = 2 To Len(TextBoxGroup.Value) - 1 If Mid(TextBoxGroup.Value, i, 1) = "." Then TextBoxGroup.Value = Left(TextBoxGroup.Value, i - 1) & "," & Right(TextBoxGroup.Value, Len(TextBoxGroup.Value) - i) End If Next i End Sub
Ensuite, dans le userform initialize :
Ce qui se passe :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 Private Sub UserForm_Initialize() Dim maCollection As 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. Dim Obj As MSForms.Control 'un petit tiroir pour mettre mes objets un à un Dim maClasse As Classe1 'un petit tiroir pour mettre mes objets un à un 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 Me.Controls 'On verifie s'il s'agit d'une Textbox If TypeOf Obj Is MSForms.TextBox Then Set maClasse = New Classe1 Set maClasse.TextBoxGroup = Obj maCollection.Add maClasse End If Next Obj End Sub
- D'après le pas à pas la partie dans initialize marche bien, la collection se crée et les textbox du userform y sont bien ajoutées
- Mais quand je change une textbox, ma macro de remplacement du point par virgule ne s'exécute pas (j'ai mis un point d'arrêt au début de la macro et le pas à pas n'y va jamais)
Quelqu'un sait-il pourquoi ?
Merci beaucoup et bonne journée !
Marc
Partager