Bonjour à tous, pensée particulière pour Job75.
Je reviens vers vous une fois encore afin de m'aider à solutionner une difficulté que je rencontre.
Je voudrais que dès la sortie( par Tabulation) de la combobox, le focus soit mis sur le premier TextBox vide de la Frame de mon Usf.
Actuellement dès la sortie par Tab ou Entrer, le focus est mis sur le premier TextBox de la Frame.
Ci-joint un fichier minimaliste de mon fichier de base. Le but est de donner plus de fluidité à la saisie.
Par avance merci de votre sollicitude.
Bonjour,
Il manque le module de classe dans le classeur.
Sinon, une petite correction à tester :
Enrichi (BBcode):
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim ctrl As Control
For Each ctrl In Modifier.Frame1.Controls
If TypeName(ctrl) = "TextBox" Then
If Len(ctrl.Value) = 0 Then 'si le controle est vide
ctrl.SetFocus
End If
End If
Next ctrl
End Sub
re
bonjour @fanch55 non il n'y a pas de module classe les ctrl sont classés dans le userform
et met le setfocus sur la frame en premier sinon ca ne fonctionne pas
Bonjour fanch55
Merci infiniment d'avoir répondu à mon appel.
J'avais déjà tenté ces lignes de codes, mais j'ai un beug "Appel inattendu à un accès méthode ou propriété "sur la la ligne "ctrl.SetFocus".
J'ai aussi tenté ce qui suit:
VB:
For Each ctrl In Array(TextBox2, TextBox3, TextBox4, TextBox5, _
TextBox6, TextBox7, TextBox8, TextBox9, TextBox10, TextBox11, TextBox12, TextBox13)
If ctrl = "" Then
ctrl.SetFocus
End If
Next ctrl
J'ai le même Beug!
malgré maintes recherches, je ne comprends pas ce que cela signifie!
Merci encore
re
bonjour @fanch55 non il n'y a pas de module classe les ctrl sont classés dans le userform
et met le setfocus sur la frame en premier sinon ca ne fonctionne pas
Private Sub ComboBox1_Change()
Dim Ligne&, i As Byte
SelectedIndex = Me.ComboBox1.ListIndex
If Me.ComboBox1.ListIndex = -1 Then
For i = 1 To 13
Me.Controls("TextBox" & i) = ""
Next i
Else
Ligne = Me.ComboBox1.ListIndex + 2
Textbox1 = Ws.Cells(Ligne, "B")
For i = 1 To 14
With Me.Controls("TextBox" & i)
.BackColor = &H808000
If Ws.Cells(Ligne, i + 1) <> Empty Then
.Value = Format(Ws.Cells(Ligne, i + 1), fmt1)
Else
.SetFocus
.BackColor = &HC0FFC0
Exit For
End If
End With
Next i
End If
End Sub
pas de procédure exit du Combobox1
Jean marie
Edit: avec ajout coloration du TextBox Cible
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim ctrl As Control
For Each ctrl In Modifier.Frame1.Controls
If TypeName(ctrl) = "TextBox" Then
If Len(ctrl.Value) = 0 Then 'si le controle est vide
ctrl.SetFocus
Exit Sub
End If
End If
Next ctrl
End Sub
j'avais le même message :
Appel inattendu à un accès méthode ou propriété "sur la la ligne "ctrl.SetFocus".
je reconnais cependant que ca ne fonctionne pas a tout les coup et des fois même c'est le 1er qui prends le focus
deja il faut enlever le select de la ligne dans la feuille
forcement le userform perd le focus
ensuite il y a l'event TxtB_Change(tiens ca me rappelle quelque chose ça)
comme il travail sur les textbox et change leur valeur et que l'event est declenché c'est comme si ils avaient le focus
conclusion ton textbox n'a le focus qu'un millionnième de seconde LOL
Jean-Marie,
J'ai regardé ton fichier, mais il y a un problème:
Le focus est bien sur le premier textBox vide, mais il se positionne immédiatement dès la saisie du premier chiffre dans la comboBox et iscrit la suite des chiffres saisie directemnt dans le texbox. Du coup les calculs se font avec les chiffres saisis.
Ce que je souhaiterais c'est le focus dans le premier TextBox vide après être sorti de la comboBox par Tabulation ou Entrer
Merci à toi.