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

Gestion de l'erreur avec textbox

7 réponses
Avatar
Arnaud LECLEMENT
Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais pas
tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud

7 réponses

Avatar
Daniel
Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le message
de news: %
Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud



Avatar
Arnaud LECLEMENT
Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%
Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %
Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud







Avatar
Daniel
Ca dépend de ton appli; mais en laissant seul visible le premier textbox,
puis, après saisie, le second etc.
Daniel
"Arnaud LECLEMENT" a écrit dans le message
de news:

Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%
Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %
Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud











Avatar
Arnaud LECLEMENT
Ok !
Merci beaucoup
Arnaud


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

Ca dépend de ton appli; mais en laissant seul visible le premier textbox,
puis, après saisie, le second etc.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news:

Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%
Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %
Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud















Avatar
anonymousA
En supposant que tu n'as bien que 30 textboxes sur ton UF,

Faire un module de classe nommé Class1 dans lequel tu écris

Public WithEvents txt As MSForms.TextBox

Private Sub txt_Change()

If IsNumeric(Right(txt.Name, 2)) Then

Select Case Right(txt.Name, 2)

Case 10 To 27

For I = 1 To Right(txt.Name, 2) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 2) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 28

For I = 1 To Right(txt.Name, 2)

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select

Else

Select Case Right(txt.Name, 1)

Case 1

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 2 To 9

For I = 1 To Right(txt.Name, 1) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select

End If

End Sub

Dans ton userform, tu écris

Dim txtarr(1 To 30) As New Classe1

Private Sub UserForm_Initialize()

For I = 1 To 30
Set txtarr(I).txt = Me.Controls("TextBox" & I)
Next

End Sub

Ce faisant, tous les textbox auront le même comportement vis-à-vis de
l'evenement Change et feront ce que tu demandes.
Il te faudra gérer le fait que l'utilisateur puisse s'être trompé de
textbox et puisse revenir en arrière.


A+

Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%

Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %

Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud











Avatar
anonymousA
erratum

Dim txtarr(1 To 30) As New Class1

A+

En supposant que tu n'as bien que 30 textboxes sur ton UF,

Faire un module de classe nommé Class1 dans lequel tu écris

Public WithEvents txt As MSForms.TextBox

Private Sub txt_Change()

If IsNumeric(Right(txt.Name, 2)) Then

Select Case Right(txt.Name, 2)

Case 10 To 27

For I = 1 To Right(txt.Name, 2) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 2) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 28

For I = 1 To Right(txt.Name, 2)

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select

Else

Select Case Right(txt.Name, 1)

Case 1

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 2 To 9

For I = 1 To Right(txt.Name, 1) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select

End If

End Sub

Dans ton userform, tu écris

Dim txtarr(1 To 30) As New Classe1

Private Sub UserForm_Initialize()

For I = 1 To 30
Set txtarr(I).txt = Me.Controls("TextBox" & I)
Next

End Sub

Ce faisant, tous les textbox auront le même comportement vis-à-vis de
l'evenement Change et feront ce que tu demandes.
Il te faudra gérer le fait que l'utilisateur puisse s'être trompé de
textbox et puisse revenir en arrière.


A+


Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%

Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %

Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox,
mais pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit
textbox1, textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud













Avatar
anonymousA
Décidément, ce soir, ca patine.

ON recommence tout

Dans un module standard , tu déclares
Public bused as boolean

Dans le module de classe nommé Classe1 tu écris

Public WithEvents txt As MSForms.TextBox

Private Sub txt_Change()

If bused = True Then Exit Sub

If IsNumeric(Right(txt.Name, 2)) Then

Select Case Right(txt.Name, 2)

Case 10 To 27

For I = 1 To Right(txt.Name, 2) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 2) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 28

For I = 1 To Right(txt.Name, 2)

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case >28

For I = 1 27

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select




Else

Select Case Right(txt.Name, 1)

Case 1

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

Case 2 To 9

For I = 1 To Right(txt.Name, 1) - 1

UserForm1.Controls("Textbox" & I).Visible = False

Next

For I = Right(txt.Name, 1) + 3 To 30

UserForm1.Controls("Textbox" & I).Visible = False

Next

End Select

End If

bused = True

End Sub

Dans le module du Userform appelé ici userform1, tu écris
Au passage, il est utile d'avoir n commandbutton pour réafficher les
textboxes et remettre la variable publique bused à false

Dim txtarr(1 To 30) As New Classe1

Private Sub CommandButton1_Click()

For Each ctrl In Me.Controls
If TypeOf ctrl Is MSForms.TextBox Then
With ctrl
.Visible = True
.Text = ""
End With
End If
Next

bused = False

End Sub


Private Sub UserForm_Initialize()

For I = 1 To 30
Set txtarr(I).txt = Me.Controls("TextBox" & I)
Next

End Sub

Ce coup-ci, j'espère que c'est le bon.
Ce que font ces procs, c'est que quelque soit le textbox que tu choisis,
seuls les 2 textboxes suivants sont visibles sauf dans le cas où
l'utilisateur choisit un textbox de 29 à 30 auqel cas on laisse affiché
les textboxes 28 à 30.

A+

Ca dépend de ton appli; mais en laissant seul visible le premier textbox,
puis, après saisie, le second etc.
Daniel
"Arnaud LECLEMENT" a écrit dans le message
de news:

Bonsoir Daniel
Comment verrais-tu la chose ?
Merci

"Daniel" a écrit dans le message de news:
%

Bonsoir.
En cachant les textboxes ?
Cordialement.
Daniel
"Arnaud LECLEMENT" a écrit dans le
message de news: %

Bonsoir
J'ai sur un userform 30 textbox
textbox1 à textbox30
je souhaite que l'utilisateur saisissent dans l'ordre les textbox, mais
pas tous forcément
En fait, s'il doit saisir dans 3 textbox, il faut que ce soit textbox1,
textbox2, textbox3 et non le 2 le 4 ...
dans l'ordre en fait !
Je vous remercie.
Arnaud