Je suis en train de développer un formulaire sur un UserForm multipage contenant des CheckBox et des TextBox.
A l'activation de l'userform, je désactive toutes les coches existantes et cache toutes les textbox.
Je souhaite ensuite afficher une textbox en face de chaque checkbox cochée et verrouiller son contenu en format numérique.
Est-il possible de le faire sur tous les control en meme temps ou faut-il le faire sur chaque checkbox et textbox indépendamment ?
Ok pour le for each mais où ? celà doit se mettre sur un KeyPress or ça se paramètre sur chaque objet non ? je voudrai le généraliser parce que je vais avoir une grande quantité de textbox...
Private Sub Elec_0_Click()
Call TextBoxOnOff(Elec_0, Elec_T_0)
End Sub
Private Sub Elec_1_Click()
Call TextBoxOnOff(Elec_1, Elec_T_1)
End Sub
Sub TextBoxOnOff(Nom As String, Nom_T As Object)
Nom_T.Visible = False
If Nom = True Then Nom_T.Visible = True
End Sub
Je pense que c'est ok pour ce que tu veux.
il faudra donc reproduire le Call TextBoxOnOff(X, Y) pour tous les textBox
Merci pour le raccourcis. J'aurai préféré éviter de le programmer pour chaque checkbox mais je crois que c'est la seule solution.. et idem pour le formatage en nombre je présume ?
L’événement UserForm_Click ne se déclenche pas si tu es dans un MultiPage voir même sur un contrôle.
et je ne vois pas d’événement qui se déclencherai au moindre click ou keyPress partout sur le formulaire → je pense donc qu'il faut le faire individuellement.
Ceci dit, on peut simplifier de
VB:
Private Sub Elec_1_Click()
Call TextBoxOnOff(Elec_1, Elec_T_1)
End Sub
Sub TextBoxOnOff(Nom As String, Nom_T As Object)
Nom_T.Visible = False
If Nom = True Then Nom_T.Visible = True
End Sub
en
Code:
Private Sub Elec_1_Click()
Elec_T_1.Visible = False: If Elec_1 = True Then Elec_T_1.Visible = True
End Sub
L’événement UserForm_Click ne se déclenche pas si tu es dans un MultiPage voir même sur un contrôle.
et je ne vois pas d’événement qui se déclencherai au moindre click ou keyPress partout sur le formulaire → je pense donc qu'il faut le faire individuellement.
Ceci dit, on peut simplifier de
VB:
Private Sub Elec_1_Click()
Call TextBoxOnOff(Elec_1, Elec_T_1)
End Sub
Sub TextBoxOnOff(Nom As String, Nom_T As Object)
Nom_T.Visible = False
If Nom = True Then Nom_T.Visible = True
End Sub
en
Code:
Private Sub Elec_1_Click()
Elec_T_1.Visible = False: If Elec_1 = True Then Elec_T_1.Visible = True
End Sub
ouep je comprends bien... après chaque page contient ses propres box du coup je le ferai pour chaque en espérant ne pas devoir en rajouter régulièrement... Merci beaucoup pour tes réponses !
Bonjour pitufo2804
Bonjour le Fil ,le Forum
ou en passant par un module de Classe
lors de la Boucle tu mets le Nom du Control TextBox correspondant dans le .tag du CheckBox
et mettre un truc du genre
VB:
Public Sub ObjChck_Click()
Set ObjTxtB=.Controls(ObjChck.Tag)
With Me
ObjTxtB.Visible = IIf(ObjChck, True, False)
End With
End Sub
Pas trop le temps lol
mais je regarde le fil!
jean marie
Bonjour
un exemple perfectible
je n'ai laissé que deux Pages au Multipage
j'ai renommé les CheckBox et TextBox (affichage pour voir correspondance)
voir correspondance de ces Noms avec le Nom de la Page(Idx) du Multipage.
s'il devait y avoir plus de 99CheckBox et TextBox sur une page , il faudrait alors renommer les CheckBox et ChecBox en concéquence
soit format Elec_001 et Elec_T_001
n'hésite pas si besoin
jean marie
Public WithEvents txtB As MSForms.TextBox
Dim cls() As New UserForm1 'nom du userform
Private Sub txtB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not Chr(KeyAscii) Like "[1-9-.]" Then KeyAscii = 0
End Sub
Private Sub UserForm_Activate()
Dim ctrl as object ,x as long
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then x = x + 1: ReDim Preserve cls(1 To x): Set cls(x).txtB = ctrl
Next
End Sub
tout tes textboxs ou qu'il soient dans l'userform ne contiendrons désormais que des chiffres et le point en séparateur decimal
il te sera impossible de taper autre chose
Bonjour ChTi160
re
ben en fait c'est comme tu veux ,tu peux faire la même chose avec un module classe
je répète au passage ce que j'ai dis dans une autre discussion que le module userform est a part entière lui aussi un module classe
et que faineant par nature et considérant que le recyclage est une bonne chose et que la transportabilité d'un module peut être avantageuse
et que finalement dans ce cas précis ou contexte du demandeur la chose s’arrête seulement a forcer simplement les textboxs a être numeriques
je le fait donc pour toutes ces raisons dans le userform
demain j'ai besoins de cet userform dans un autre applicatif j'exporte et j’importe l'userform et c'est tout
cé bo la vie non?
voila
EDIT:
j'aurais pu même ajouter le classement en jumelage des checkboxs/textbox dont le click sur un doit faire apparaître l'autre si j'ai bien saisie la discussion dans son ensemble
comme dans cet exemple ci joint
le code en tout et pour tout
le checkbox1 et jumelé a textbox1 etc....
la visibilité du textbox = la valeur de son jumeau
VB:
Option Explicit
Public WithEvents txtB As MSForms.TextBox
Public WithEvents check As MSForms.CheckBox
Dim cls() As New UserForm1 'nom du userform
Private Sub check_Change()
txtB.Visible = check.Value
End Sub
Private Sub txtB_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not Chr(KeyAscii) Like "[1-9-.]" Then KeyAscii = 0
End Sub
Private Sub UserForm_Activate()
Dim ctrl As Object, X As Long
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox" Then
X = X + 1: ReDim Preserve cls(1 To X)
ctrl.Visible = False: Set cls(X).txtB = ctrl
Set cls(X).check = Me.Controls(Replace(ctrl.Name, "TextBox", "CheckBox"))
End If
Next
End Sub
Re
Merci
je vais regarder tout ça lol
j'avais mis le Nom du TextBox correspondant dans le Tag du Checkbox
pour Ton Edit
tu aurais rentré le Couple en même temps (mais comment ?)
merci
jean marie
j'aime le tag, il permet de boucler sur les controls facilement, en plus on peut stocker une information dedans le temps d'une procédure.
Patrick, je visionne tes messages concernant l'usf comme module de classe a part entière, très intéressant, j'avais tenté de maîtriser la bête sans grand succès, n'ayant ni la syntaxe ni de besoin, chapeau à toi