Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/11/2011, 21h32   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 46
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 46
Points : 8
Points : 8
Par défaut Le même évènement pour plusieurs Contoles

Bonsoir,

Je souhaite appliquer le même évènement pour plusieurs Textbox et donc j'ai pensé passer par un module de classe. Cependant j'ai un problème. Voici ce que j'ai fait :

Grâce à cette discussion http://www.developpez.net/forums/d96...s/#post5426791 j'ai écrit ceci :

Dans le module de Classe :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
Option Explicit
 
' Objet Textbox source des événements
Public WithEvents TextBoxEvent As MSForms.TextBox
 
' Sur changement de la TextBox
Private Sub TextBoxEvent_Change()
' Notifie l'événement au formulaire parent de la textbox
TextBoxEvent.Parent.TextBoxVerifNum_Change TextBoxEvent
End Sub
Dans l'Userform :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
Option Explicit
 
' Collection contenant les instances de classe 
Private TextBoxCollection As Collection
 
Private Sub UserForm_Initialize()
 
'Dim loCtl As Control
Dim Ctrl As Control
Dim TextBoxInstance As TextBoxClasse
 
' Initialise la collection
Set TextBoxCollection = New Collection
 
' Boucle sur les contrôles
For Each Ctrl In Me.Controls
 
    If TypeName(Ctrl) = "TextBox" Then
 
        ' Nouvelle instance de classe
        Set TextBoxInstance = New TextBoxClasse
 
        ' Initialise la TextBox dans l'instance de classe
        Set TextBoxInstance.TextBoxEvent = Ctrl
 
        ' Ajoute l'instance de classe à la collection
        ' Etape importante pour qu'elle ne soit pas détruit ensuite
        TextBoxCollection.Add TextBoxInstance
 
    End If
 
Next
 
 
End Sub
 
' Méthode publique recevant les notifications de modifications de textbox
'    en provenance des instances 
 
Public Sub TextBoxVerifNum_Change(KeyAscii As MSForms.ReturnInteger)
 
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or groupebouton.SelStart > 0 And Chr(KeyAscii) = "-" _
    Or InStr(groupebouton.Value, ",") <> 0 And Chr(KeyAscii) = "," Then
    KeyAscii = 0: Beep
End If
 
End Sub
Cependant, j'ai le message d'erreur
Citation:
Incompatibilité de type
Je ne sais comment empêcher cette erreur. Auriez vous une poste SVP ?

Dans mon exemple, mon but est de vérifier le type de saisie numérique de l'ensemble des TextBox de mon Userform.
Jerome_Hej est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 22h41   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Citation:
Dans mon exemple, mon but est de vérifier le type de saisie numérique de l'ensemble des TextBox de mon Userform.
1. Dans ton module de classe TextBoxClasse
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
' Objet Textbox source des événements
Public WithEvents TextBoxEvent As MSForms.TextBox
 
' Sur écriture dans la TextBox
Private Sub TextBoxEvent_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
 
If InStr("1234567890,-", Chr(KeyAscii)) = 0 Or TextBoxEvent.SelStart > 0 And _
   Chr(KeyAscii) = "-" Or InStr(TextBoxEvent.Value, ",") <> 0 And Chr(KeyAscii) = _
   "," Then
    KeyAscii = 0
    Beep
End If
End Sub
2. Dans le module de ton Userform
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Option Explicit
 
' Collection contenant les instances de classe
Private TextBoxCollection As Collection
 
Private Sub UserForm_Initialize()
Dim Ctrl As Control
Dim TextBoxInstance As TextBoxClasse
 
' Initialise la collection
Set TextBoxCollection = New Collection
' Boucle sur les contrôles
For Each Ctrl In Me.Controls
    If TypeName(Ctrl) = "TextBox" Then
        ' Nouvelle instance de classe
        Set TextBoxInstance = New TextBoxClasse
        ' Initialise la TextBox dans l'instance de classe
        Set TextBoxInstance.TextBoxEvent = Ctrl
        ' Ajoute l'instance de classe à la collection
        ' Etape importante pour qu'elle ne soit pas détruit ensuite
        TextBoxCollection.Add TextBoxInstance
    End If
Next Ctrl
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h49.


 
 
 
 
Partenaires

Hébergement Web