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 Sub

Pour 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

https://www.cjoint.com/c/GJqic5rln41

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 Sub

Par 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 ?

Rechercher des sujets similaires à "textbox combobox gerer focus"