Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Eric D

XLDnaute Occasionnel
Bonjour à toutes et tous,

J'ai été quelque temps absent et je reviens vous voir avec mon Pb de gestion de Textbox.
J'ai ce code, adapté du code de Luki, il me semble. mon Pb est que lorsque j'appuye sur 'Enter' et que la Textbox est vide, je change, à tord, de textbox.
Merci pour votre modification
Eric D
 

Pièces jointes

Re : Gestion textbox bis

Re à toutes et à tous,

J'ai eu un impératif urgent, c'est pourquoi j'ai fini mon précédent message à l'emporte pièce. Je m'en excuse.
Pouriez vous me donner un coup de main pour resoudre cette 'anomalie'
Merci de votre aide.
Eric D
 
Re : Gestion textbox bis

Bonjour Luki, le forum

Je te remercie Luki, pour être encore un peu plus explicite, si possible:
On oublie pour l'instant la Textbox différente des autres. Quand je click avec la souris sur une autre Textbox, je reste tjs sur la même Textbox. Par contre quand je tape 'Enter' et que la Textbox est vide, j'ai deux cas: quand je suis ds la Tbox1, je vais ds cette fameuse Textbox différente, sinon j'ai le contenu de la Tbox1 sélectionné et ansi de suite jusqu'à ce que j'arrive ds la Tbox suivante. Hors je souhaiterais que quelque soit la Tbox, si elle est vide je reste sur elle que ce soit avec 'Enter' ou avec la souris.
Merci à toi Luki et bonne journée
Eric D
 
Re : Gestion textbox bis

Bonjour Eric,

Dans ton premier Post, tu parle d'une adaptation du code. En musique, on parlerait d'une "adaptation libre" 😉

Quelques questions:
  • Ton projet est-il toujours de travailler avec environ 50 textbox?
  • Pourquoi veux-tu empêcher la saisie du textbox suivant si l'acuel est vide? Est-ce pour t'assurer que tous les textbox sont saisis ou pour une autre raison?
Essaie de nous en dire un plus sur la finalité de ton projet. Les réponses seront plus adaptées.

Si tu as un petit potager à bêcher, tu utilises une bêche. Si tu en as un grand, tu apprends à utiliser un motoculteur et si c'est un champ, tu apprends à conduire un tracteur avec une charrue.

En fonction de tes précisions, on pourra t'aider à apprendre l'un ou l'autre!
A te lire
 
Re : Gestion textbox bis

Re

Alors voici, en ajoutant un bouton Ok dans le userform.

Code:
Option Explicit

Private Sub CommandButton1_Click()
Dim MyCtl As Control
Dim BolEmpty As Boolean

    BolEmpty = False

    For Each MyCtl In Me.Controls                   'boucle sur tous les controles du Uform
        If TypeOf MyCtl Is MSForms.TextBox Then     ' s'y arrête si c'est un textbox
           If MyCtl.Value = "" Then                 ' si vide, renseigne la variable oui/non
                BolEmpty = True
                MyCtl.BackColor = &H80000003        ' change la couleur de fond si vide pour faciliter le repèrage
            Else
                MyCtl.BackColor = &H80000005        ' rétabli la couleur si saisi  ( n'apparait qu'à la tentative suivante de fermeture)
            End If
        End If
    Next MyCtl
    
    If BolEmpty Then
        MsgBox "Tous les champs doivent être renseignés!"   ' message d'alerte et fin de la macro, le Uform ne ferme pas
    Else
        MsgBox " Tous les champs sont saisis, bravo!"       ' ta procédure ici si tout va bien et
        Unload Me                                           ' fermeture du Uform
    End If

End Sub
Dis nous si ça marche
 

Pièces jointes

Re : Gestion textbox bis

Re,
Ca marche, mais ce n'est pas ce que je souhaite. Comme je me suis expliqué plus haut, quand je click avec la souris sur une autre Textbox, je dois resté tjs sur la même Textbox ainsi que si je tape 'Enter' et que la Textbox est vide, mais je ne dois pas sélectionner le contenue de la Tbox1 et ansi de suite. Hors je souhaiterais que quelque soit la Tbox, si elle est vide je reste sur elle que ce soit avec 'Enter' ou avec la souris.
Merci
Eric D
 
Re : Gestion textbox bis

Re,

Une fois oui une fois non? 😎

Re,

Dans ce cas, une solution qui s'assurerait que chaque tbox est saisi avant de quitter ou de valider le userform te conviendrait-elle? Ca sera beaucoup plus simple à mon avis.

A te lire

Re,
Oui bien sûr
Merci
Eric D

Je répète la question : pourquoi as-tu besoin de rester dans le text box s'il est vide?
As-tu besoin de saisir les valeurs dans un ordre précis ou veux tu t'assurer que tous les tbox sont remplis à un moment donné, par exemple lors du click sur un bouton ok?

Essaie d'être clair.

A te lire
 
Re : Gestion textbox bis

Bonsoir Eric, Luki

tu pourrais agir autrement :
A l'initialisation de l'USF, tous les textboxs sont masqué, hormis le textbox1.
quand tu remplis le tb1, tu appuies ensuite sur Tab (la touche Tabulation), et si la tb1 n'est pas vide, on affiche la tb2, et ainsi de suite....

Un début de code :

Private Sub UserForm_Initialize()
Dim MyCtl As Control
For Each MyCtl In Me.Controls
If TypeOf MyCtl Is MSForms.TextBox Then MyCtl.Visible = False
Next
TextBox1.Visible = True
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 And TextBox1.Value <> "" Then
TextBox2.Visible = True
TextBox2.SetFocus
End If
End Sub

Peut-être une autre piste?????
 
Re : Gestion textbox bis

Bonsoir Eric, Luki

tu pourrais agir autrement :
A l'initialisation de l'USF, tous les textboxs sont masqué, hormis le textbox1.
quand tu remplis le tb1, tu appuies ensuite sur Tab (la touche Tabulation), et si la tb1 n'est pas vide, on affiche la tb2, et ainsi de suite....

Un début de code :

Private Sub UserForm_Initialize()
Dim MyCtl As Control
For Each MyCtl In Me.Controls
If TypeOf MyCtl Is MSForms.TextBox Then MyCtl.Visible = False
Next
TextBox1.Visible = True
End Sub

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 9 And TextBox1.Value <> "" Then
TextBox2.Visible = True
TextBox2.SetFocus
End If
End Sub

Peut-être une autre piste?????


Bonsoir le forum,

Bien vu Bhbh et tu peux le faire fonctionner avec la touche ENTREE à laquelle les utilisateurs LAMBDA sont plus habituée.

Voici la correction:
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 13 And TextBox1.Value <> "" Then
TextBox2.Visible = True
TextBox2.SetFocus
End If

End Sub

'
Private Sub UserForm_Initialize()
'
Dim MyCtl As Control
For Each MyCtl In Me.Controls
If TypeOf MyCtl Is MSForms.TextBox Then MyCtl.Visible = False
Next
TextBox1.Visible = True

End Sub

Bonsoir et amicalement,
Vincent
 
Re : Gestion textbox bis

Re, le fil

Bhbh, ne pas oublier qu'il y 50 tbox... cependant l'idée est bonne. Ca vaudrait la peine de passer par une classe d'évènements dans ce cas, pour allèger et simplifier la maintenance.

Mais bon, attendons la réponse de notre ami 😉

A+

Une bosse avec Vincent. Salut Vincent!
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
200
Réponses
0
Affichages
304
Réponses
10
Affichages
779
Retour