Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Module de classe pour Contrôle TextBox

3 réponses
Avatar
Pounet95
Bonjour à toutes et tous
XL2000 Windows XP

Afin de contrôler la validité des caractères entrés dans un Texbox je pense
utiliser l'évènement KeyPress.
Mon problème c'est que ce contrôle doit porter sur une quinzaine de Textbox
( Textbo1 .... Textbox15 ).
Pour éviter d'écrire 15 fois la même chose au numéro près, j'ai fait un
petit tour sur Excelabo et,
si j'ai bien lu, avec le code ci-dessous de Laurent Longres, je devrais m'en
sortir ?
En fait, non et je ne comprends pas pourquoi.

A l'initialisation du USerform, j'ai le message :

<< Erreur de compilation : Membre de méthode ou de données introuvable >>

et ce au niveau des 2 instructions

Cellule(i).Text = ""
Cellule(i).MaxLength = 8

Les propriétés TextBox ne sont pas héritées ?
Je suis totalement novice dans l'utilisation des modules de classe, alors si
vous pouviez éclairer ma lanterne,
ce serait super.
Merci d'avance



'Module de classe nommé TxtBoxClasse

Public WithEvents TxtBox As MSForms.TextBox

Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 49 To 57
'OK
Case Else
MsgBox "Seuls les chiffres de 1 à 9 sont autorisés !"
KeyAscii = Asc(Chr(8))
End Select
End Sub


'Module Standard

Option Explicit
Public Cellule(1 To 15) As TxtBoxClasse

Function Initialise_Cellules()
Dim i As Integer
For i = 1 To 15
Set Cellule(i) = New TxtBoxClasse
Set Cellule(i).TxtBox = UserForm1.Controls("Textbox" & i)
Next i
End Function


'Userform
Private Sub UserForm_Initialize()
'Initialise la grille
Initialise_Cellules
For i = 1 To 15
Cellule(i).Text = ""
Cellule(i).MaxLength = 8
Next i

Show
End Sub

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

3 réponses

Avatar
anonymousA
bonjour,

les cellules étant initialisées ,elles exposent la classe
Textboxclass

Private Sub UserForm_Initialize()
'Initialise la grille
Initialise_Cellules
For i = 1 To 15
Cellule(i).TxtBox.Text = ""
Cellule(i).TxtBox.MaxLength = 8
Next i

End Sub

par ailleurs je n'ai pas compris ce qui vient faire l'instructin Show
dans la procédure Initialize

A+
Avatar
Michel Pierron
Bonjour Pounet95;
Simplifie le tout, vire tout cequi est inutile dansle module standard et
dans le module Userform:

Private Cellule(1 To 15) As New TxtBoxClasse

Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 15
Set Cellule(i).TxtBox = Me.Controls("Textbox" & i)
Cellule(i).TxtBox.Text = ""
Cellule(i).TxtBox.MaxLength = 8
' Ou directement
'Me.Controls("Textbox" & i).Text = ""
'Me.Controls("Textbox" & i).MaxLength = 8
Next i
End Sub

MP

"Pounet95" a écrit dans le message de news:

Bonjour à toutes et tous
XL2000 Windows XP

Afin de contrôler la validité des caractères entrés dans un Texbox je
pense

utiliser l'évènement KeyPress.
Mon problème c'est que ce contrôle doit porter sur une quinzaine de
Textbox

( Textbo1 .... Textbox15 ).
Pour éviter d'écrire 15 fois la même chose au numéro près, j'ai fait un
petit tour sur Excelabo et,
si j'ai bien lu, avec le code ci-dessous de Laurent Longres, je devrais
m'en

sortir ?
En fait, non et je ne comprends pas pourquoi.

A l'initialisation du USerform, j'ai le message :

<< Erreur de compilation : Membre de méthode ou de données introuvable >>

et ce au niveau des 2 instructions

Cellule(i).Text = ""
Cellule(i).MaxLength = 8

Les propriétés TextBox ne sont pas héritées ?
Je suis totalement novice dans l'utilisation des modules de classe, alors
si

vous pouviez éclairer ma lanterne,
ce serait super.
Merci d'avance



'Module de classe nommé TxtBoxClasse

Public WithEvents TxtBox As MSForms.TextBox

Private Sub TxtBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 49 To 57
'OK
Case Else
MsgBox "Seuls les chiffres de 1 à 9 sont autorisés !"
KeyAscii = Asc(Chr(8))
End Select
End Sub


'Module Standard

Option Explicit
Public Cellule(1 To 15) As TxtBoxClasse

Function Initialise_Cellules()
Dim i As Integer
For i = 1 To 15
Set Cellule(i) = New TxtBoxClasse
Set Cellule(i).TxtBox = UserForm1.Controls("Textbox" & i)
Next i
End Function


'Userform
Private Sub UserForm_Initialize()
'Initialise la grille
Initialise_Cellules
For i = 1 To 15
Cellule(i).Text = ""
Cellule(i).MaxLength = 8
Next i

Show
End Sub

--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)



Avatar
Pounet95
Bonjour et merci pour la réponse.

Ca fonctionne comme je le veux.
Quant à la présence de l'instruction Show dans la procédure, c'est pour
afficher le USF
car son éxécution est lancée à partir d'un bouton dans un onglet
Sans cette instruction, il n'y a pas d'affichage ou alors il faut charger
autrement
en remplaçant Load Userform1 par Userform1.Show
Juste une histoire d'habitude, bonne ou mauvaise ????

Private Sub CommandButton1_Click()
On Error Resume Next
Load UserForm1
If Err <> 0 Then MsgBox Err & vbCrLf & Err.Description
Unload UserForm1
End Sub


--
Pounet95
on trouve tout ( ou presque ) http://www.excelabo.net/
Conseillé :
http://dj.joss.free.fr/netiquet.htm
(charte, nétiquette, conseils, abréviations, souriettes...)
http://www.excelabo.net/mpfe/connexion.php
(connexion, conseils...)

"anonymousA" a écrit dans le message de news:

bonjour,

les cellules étant initialisées ,elles exposent la classe
Textboxclass

Private Sub UserForm_Initialize()
'Initialise la grille
Initialise_Cellules
For i = 1 To 15
Cellule(i).TxtBox.Text = ""
Cellule(i).TxtBox.MaxLength = 8
Next i

End Sub

par ailleurs je n'ai pas compris ce qui vient faire l'instructin Show
dans la procédure Initialize

A+