Microsoft 365 Garder le focus tant que vide

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 !

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,
Voici mon problème : Dans un formulaire Vba, j'ai une TextBox qui a le focus à l'activation. Je souhaiterais savoir comment faire pour empêcher de quitter le focus tant que la TextBox est vide ? L'utilisateur ne peut rien rien tant que rien n'est saisie.
Merci par avance pour votre aide
 
Bonjour le forum
Bonjour à toutes & à tous
Bonjour NONO14, bonjour Dranreb

Une solution s'il s'agit d'un TextBox de Userform :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Value = "" Then Cancel = True
End Sub
==> s'il s'agit du TextBox1.

Bonne journée à toutes & à tous.
Eric c
 
Bonjour à toutes et tous,
J'étais dans la même optique que @Eric C :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Trim(Me.TextBox1.Value) = "" Then
        MsgBox "Veuillez saisir une valeur.", vbExclamation
        Cancel = True          ' empêche la sortie du focus
        Me.TextBox1.SetFocus   ' force le retour du focus
    End If
End Sub

Nicolas
 
Bonjour le forum
Bonjour à toutes & à tous
Bonjour NONO14, bonjour Dranreb

Une solution s'il s'agit d'un TextBox de Userform :
VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1.Value = "" Then Cancel = True
End Sub
==> s'il s'agit du TextBox1.

Bonne journée à toutes & à tous.
Eric c
Bonjour à tous,
Désolé d'avoir tardé à vous répondre. J'ai essayé vos proposition mais ça ne fonctionne pas. Alors j'ai tenté cette approche qui fonctionne mais pas tout à fait. J'ai bien le message qui s'affiche, mais je peux passer au contrôle suivant.
VB:
Private Sub TxtIntitulé_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim Cancel As Boolean
    ' Interdire de quitter si vide
    If Trim(Me.TxtIntitulé.Text) = "" Then
        MsgBox "Veuillez saisir un intitulé."
    End If
    Cancel = True
End Sub
 
Si, sauf erreur grossière, ça fonctionne toujours ! Le problème que ça pose ce serait plutôt en général qu'après le demandeur se plaint de ne plus pouvoir fermer l'UserForm. En effet, ça entraine l'évènement Exit de la TextBox alors qu'il n'y a dès lors plus de raison de la renseigner !
 
Si, sauf erreur grossière, ça fonctionne toujours ! Le problème que ça pose ce serait plutôt en général qu'après le demandeur se plaint de ne plus pouvoir fermer l'UserForm. En effet, ça entraine l'évènement Exit de la TextBox alors qu'il n'y a dès lors plus de raison de la renseigner !
Bonjour Danreb,
Oui j'ai remarqué ça. J'ai abandonné conservé le KeyDown mais je suis toujours à la recherche d'une solution pour bloquer la saisie tant que la TextBox est vide. J'ai également essayé avec BeforeUpdate, mais sans succès.
 
Dernière édition:
Re le fil,

Une autre possibilité :
VB:
Private Sub TxtIntitulé_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(TxtIntitulé.Value) Or (TxtIntitulé.Text = "") Then
    MsgBox "Saisie obligatoire dans la textbox"
    Cancel = True
End If
End Sub
@+ Eric c
 
Re le fil,

Une autre possibilité :
VB:
Private Sub TxtIntitulé_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If IsNull(TxtIntitulé.Value) Or (TxtIntitulé.Text = "") Then
    MsgBox "Saisie obligatoire dans la textbox"
    Cancel = True
End If
End Sub
@+ Eric c
Bonjour Eric C,
Merci pour ton code. Ce qui est bizarre, c'est que le message apparaît à la fermeture de l'Uf pas quand je veux changer de contrôle avec Tab du clavier.
 
Bonjour Eric C,
Merci pour ton code. Ce qui est bizarre, c'est que le message apparaît à la fermeture de l'Uf pas quand je veux changer de contrôle avec Tab du clavier.
Voici la solution après maints essais. Merci à tous pour votre apport.
VB:
Private Sub TxtIntitulé_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    ' Touche Tab ?
    If KeyCode = vbKeyTab Then
        If Trim(Me.TxtIntitulé.Text) = "" Then
            MsgBox "Veuillez saisir un intitulé.", vbExclamation
            KeyCode = 0          ' annule la tabulation
            Me.TxtIntitulé.SetFocus
        End If
    End If
End Sub
 
Re,

Sur le fichier joint (tu n'as pas joint de fichier pour étude...), tu ne peux te rendre sur le TextBox2 ni sur le CommandButton1 tat qu'une valeur n'est pas rentrée. Si tu clique sur la croix de fermeture du USF alors oui il y a un MSG qui s'affiche.
@+ Eric c
 

Pièces jointes

Re,

Sur le fichier joint (tu n'as pas joint de fichier pour étude...), tu ne peux te rendre sur le TextBox2 ni sur le CommandButton1 tat qu'une valeur n'est pas rentrée. Si tu clique sur la croix de fermeture du USF alors oui il y a un MSG qui s'affiche.
@+ Eric c
Oui effectivement ça fonctionne. J'avais essayé ton code sur un Uf simple, comme celui tu viens de joindre et ça fonctionnait, mais dans mon application, ça ne fonctionne plus. Est-ce le fait de travailler avec un MultiPage avec des frames, je ne sais pas...
 
Re,

Peut-être mais seul les grands vont pouvoir t'aider. De plus avec ton code que je viens de tester, tu bloque la touche "Tab" mais si tu te rends directement sur le TxtBox2, le curseur s'y rend de même que si tu appuies sur la touche "Enter".
A voir - Les autres forumeurs te dirons la même chose : sans fichier à traiter, nous ne sommes pas devin.
@+ Eric
 
- 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
10
Affichages
542
  • Question Question
Microsoft 365 Contrôle sur date
Réponses
8
Affichages
356
Réponses
12
Affichages
273
Retour