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 :
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
Ce qui se passe :
- 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