Textbox, Combobox gérer les focus
Bonjour le forum,
Je fais appel à vous suite à une interrogation dont je ne trouve réponse.
J'ai créer plusieurs userform dans lequels sont inséré des textbox et des combobox.
Actuellement sur mon userform2 composé de 6 textbox et 5 combobox, je cherche à faire passer le focus de ma textbox1 à ma textbox4 (qui est en réalité normalement la 2 mais les textbox ne sont pas numéroté dans l'ordre ...)
J'ai réussis sans problème à faire passer le focus dans la textbox1 à l'ouverture du userform et à empêcher la sortie avec les codes suivants :
Private Sub UserForm_Initialize()
TextBox1.SetFocus 'Envoie le focus dans la textbox1 à l'ouverture
With Me
.StartUpPosition = 3
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With
TextBox4 = Date
With TextBox4
.SelStart = 0
.SelLength = 10
End With
TextBox5 = Date
With TextBox5
.SelStart = 0
.SelLength = 10
End With
Me.ComboBox2.RowSource = "VDISPO"
Me.ComboBox4.RowSource = "PCOND"
Me.ComboBox3.RowSource = "CHOIX"
Me.ComboBox5.RowSource = "PCOND"
Me.ComboBox6.RowSource = "PCOND"
End Sub
'----------------------
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1.Value = "" Then
Cancel = True
Exit Sub
Else
End If
Application.ScreenUpdating = False
If TextBox1.Value <> "" Then
If IsNumeric(Me.TextBox1.Value) Then 'SI CONDITION VRAIE
Else 'SI CONDITION FAUSSE
'Boîte de dialogue : avertissement
MsgBox "La valeur : " & Me.TextBox1.Value & " n'est pas valide ! Merci de saisir une valeur numérique pour votre billet collectif !"
'Suppression du contenu de la textbox
TextBox1.Value = ""
Cancel = True
Exit Sub
End If
Else
End If
Sheets("TBL B").Activate
[C4] = TextBox1
Range("A1").Select 'Copie les deux valeurs, les multiplies entre elles puis les recolle en C4 = Multiplier par 1 pour numérique
Selection.Copy
Range("C4").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
If Range("Q2").Value = "OK" Then
Else
MsgBox "Le billet collectif : " & Range("C4") & " existe déjà ! Merci de saisir une nouvelle valeur !"
'Suppression du contenu de la cellule C4
Range("C4").ClearContents
TextBox1.Value = ""
Cancel = True
Exit Sub
End If
Sheets("Acceuil").Select
TextBox1.Enabled = False 'empêche la modification de la textbox 1
Application.ScreenUpdating = True
TextBox4.SetFocus 'Envoyer le focus sur la textbox4
End SubPour la première textbox pas de soucis, il a bien le focus au lancement et le garde si aucune donnée rentré mais à l'envoie du focus dans la textbox 4 qui est du type "Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)" il plante.
Il me met l'erreur suivante : "Le focus ne peut être déplacer sur le contrôle car celui ci est invisible, non activé, ou d'un type n'acceptant pas les focus." Erreur d'exécution 2110
Il me surligne la ligne : textbox4.setfocus
Qu'est ce que cela veut dire ? Comment puis je gérer correctement les focus d'une textbox à une autre et également vers des combobox puis finir par un bouton de commande ?
Je joint le fichier pour plus de compréhension
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Votre problème vient du fait que votre procédure évènementielle est exécutée 2 fois et que donc votre TextBox4 est désactivée (dernière instruction de votre procédure)
Si vous remettez le focus sur TextBox4, il est alors logique de remettre à blanc son contenu et là plus de problème.
Sheets("Acceuil").Select
TextBox1.Enabled = False
Application.ScreenUpdating = True
TextBox4.Value = ""
TextBox4.SetFocus
End SubPar ailleurs, il ne serait pas inutile de rectifier "Acceuil" en "Accueil".
Comme quoi défois c'est pas grand chose
ça marche parfaitement bien maintenant, merci !!
Oups bien vu la feuille je vais modifié de suite
J'ai une nouvelle question maintenant que ceci fonctionne,
Est il possible de faire en parallèle de la gestion des focus dans les textbox, l'autorisation du clic sur les bouton car avec le focus sur les textbox il sont verrouillé et j'aimerais pouvoir cliquer sur retour qui me renvoie dans le premier userform sans avoir besoin d'écrire toutes les données
Bonne journée !
Et par contre cette solution ne marche pas avec les combobox, il semblerait qu'on ne puisse pas faire :
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Que doit je mettre à la place ?