Impossible de faire un focus sur une combobox
Moon
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Après plusieurs jours de recherche, je n'arrive pas à faire un focus sur une combobox après la sortie d'une Sud.
Je m'explique, j'utilise une combobox pour récupérer une valeur scanner avec une douchette Opticon qui execute la touche enter a la fin.
Je test le code scanner et j'affiche un message lorsque le code est pas bon mais ensuite je voudrais que le focus retourne sur la combo pour un nouveau scan mais le focus ce fait sur le bouton suivant (TabIndex suivant).
Voici un peut de mon code
*****************
Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Call Test_CodeBarre
'Selection le texte du combobox1 et positione le curseur au debut
With ComboBox1
.SelStart = 0
.SelLength = Len(ComboBox1.Text)
.SetFocus
End With
End Sub
----------------
Un des test de Test_CodeBarre
----------------
'Récupération du nom du salarie correspondant à L'ID de la société
Salarie = Sheets("BASE").Range(ColNom & ligVerif).Value
'Récupération des deux 1er lettre du nom
SalarieVerif1 = Left(Salarie, 2)
If SalarieVerif1 <> ComboVerif1 Then
MsgBox "Le code Barre n'est pas valide", vbExclamation
Saisie.ComboBox1.Value = "---- Selectionnez une entreprise pour choisir un nom ----"
Saisie.TextBox1.Value = ""
Saisie.TextBox2.Value = ""
Saisie.TextBox3.Value = ""
Exit Sub
End If
*******************
Merci de votre aide
Après plusieurs jours de recherche, je n'arrive pas à faire un focus sur une combobox après la sortie d'une Sud.
Je m'explique, j'utilise une combobox pour récupérer une valeur scanner avec une douchette Opticon qui execute la touche enter a la fin.
Je test le code scanner et j'affiche un message lorsque le code est pas bon mais ensuite je voudrais que le focus retourne sur la combo pour un nouveau scan mais le focus ce fait sur le bouton suivant (TabIndex suivant).
Voici un peut de mon code
*****************
Private Sub ComboBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Call Test_CodeBarre
'Selection le texte du combobox1 et positione le curseur au debut
With ComboBox1
.SelStart = 0
.SelLength = Len(ComboBox1.Text)
.SetFocus
End With
End Sub
----------------
Un des test de Test_CodeBarre
----------------
'Récupération du nom du salarie correspondant à L'ID de la société
Salarie = Sheets("BASE").Range(ColNom & ligVerif).Value
'Récupération des deux 1er lettre du nom
SalarieVerif1 = Left(Salarie, 2)
If SalarieVerif1 <> ComboVerif1 Then
MsgBox "Le code Barre n'est pas valide", vbExclamation
Saisie.ComboBox1.Value = "---- Selectionnez une entreprise pour choisir un nom ----"
Saisie.TextBox1.Value = ""
Saisie.TextBox2.Value = ""
Saisie.TextBox3.Value = ""
Exit Sub
End If
*******************
Merci de votre aide
A voir également:
- Impossible de faire un focus sur une combobox
- Helicon focus - Télécharger - Photo & Graphisme
- Focus writer - Télécharger - Traitement de texte
- Focus magic - Télécharger - Photo & Graphisme
- Firefox focus mac - Télécharger - Navigateurs
- Firefox focus - Télécharger - Navigateurs
4 réponses
Bonsoir,
en attendant mieux :
SendKeys "{ESC}{TAB}"
SendKeys fait en plus une bascule Verr num, ne me demande pas pourquoi...
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
en attendant mieux :
SendKeys "{ESC}{TAB}"
SendKeys fait en plus une bascule Verr num, ne me demande pas pourquoi...
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Re,
sûrement toujours parce que la combobox n'a pas fini son boulot et ne lâche pas la main.
et peut-être la fin de ton calvaire, les évènements getfocus et lostfocus sur un userform :
https://excel.developpez.com/sources/?page=UserForm#GetFocusTextBox
eric
PS: n'oublie pas de regarder (et d'emmener dans ton classeur) le module de classe
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
sûrement toujours parce que la combobox n'a pas fini son boulot et ne lâche pas la main.
et peut-être la fin de ton calvaire, les évènements getfocus et lostfocus sur un userform :
https://excel.developpez.com/sources/?page=UserForm#GetFocusTextBox
eric
PS: n'oublie pas de regarder (et d'emmener dans ton classeur) le module de classe
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Hello, merci pour le lien, après un premier essais, le focus reviens bien sur le Combo, mais malheureusement ce code dans mon projet bloque tout autre action sur la userform. Je vais encore chercher pour voir ou peut ce trouver le problème et je te tien au courant. En tout cas je pense que je suis sur la bonne voix grâce à toi encore merci.
Moon
Moon
Bonjour,
eriiic grâce a ton lien j'ai enfin réussi à faire mon focus sur le combo.
Le problème que j'ai rencontré au dela du fait que je devais utilisé le module de classe pour LostFocus et GetFocus c'est que j'utilisais le sub Combobox1_BeForUpdate alors que celui ci bouclait sur certaine action de mon code (en fait des que j'essayais de modifier un autre objet).
Donc voici ce que j'ai utilisé :
'---- dans un module de classe nommé Classe1 module repris du lien
Option Explicit
Public Event GetFocus()
Public Event LostFocus(ByVal Txtbx As String)
Public nomObjActif As String
'Vérifie quel TextBox a le focus
Public Sub cibleFocus(USF As MSForms.UserForm)
With USF
If TypeName(.ActiveControl) = "ComboBox" Then
nomObjActif = .ActiveControl.Name
On Error GoTo errorHandler
Do
DoEvents
If .ActiveControl.Name <> nomObjActif Then
If TypeName(.ActiveControl) = "ComboBox" Then
RaiseEvent LostFocus(nomObjActif)
nomObjActif = .ActiveControl.Name
RaiseEvent GetFocus
End If
End If
Loop
End If
End With
errorHandler:
Exit Sub
End Sub
'----- Puis dans mon code
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Definition du module de Classe à utilisé
Set USF = New Classe1
If KeyCode = 13 Then
Call Test_CodeBarre
'Appel de la fonction
USF.cibleFocus Me
End If
End Sub
Pour expliquer j'ai mis un contrôle sur la touche entrée qui est généré par la douchette ce qui permet de ne pas boucler indéfiniment dans le Module de Classe. Ensuite je lance le test puis je vérifie si le Combo à toujours le focus sinon le module redonne le focus au Combobox.
Voilou, en tout cas un grand merci à toi eriiic car sinon je pense que j'aurais encore passé quelques jours voir semaine avant de trouvé une solution.
Moon
eriiic grâce a ton lien j'ai enfin réussi à faire mon focus sur le combo.
Le problème que j'ai rencontré au dela du fait que je devais utilisé le module de classe pour LostFocus et GetFocus c'est que j'utilisais le sub Combobox1_BeForUpdate alors que celui ci bouclait sur certaine action de mon code (en fait des que j'essayais de modifier un autre objet).
Donc voici ce que j'ai utilisé :
'---- dans un module de classe nommé Classe1 module repris du lien
Option Explicit
Public Event GetFocus()
Public Event LostFocus(ByVal Txtbx As String)
Public nomObjActif As String
'Vérifie quel TextBox a le focus
Public Sub cibleFocus(USF As MSForms.UserForm)
With USF
If TypeName(.ActiveControl) = "ComboBox" Then
nomObjActif = .ActiveControl.Name
On Error GoTo errorHandler
Do
DoEvents
If .ActiveControl.Name <> nomObjActif Then
If TypeName(.ActiveControl) = "ComboBox" Then
RaiseEvent LostFocus(nomObjActif)
nomObjActif = .ActiveControl.Name
RaiseEvent GetFocus
End If
End If
Loop
End If
End With
errorHandler:
Exit Sub
End Sub
'----- Puis dans mon code
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Definition du module de Classe à utilisé
Set USF = New Classe1
If KeyCode = 13 Then
Call Test_CodeBarre
'Appel de la fonction
USF.cibleFocus Me
End If
End Sub
Pour expliquer j'ai mis un contrôle sur la touche entrée qui est généré par la douchette ce qui permet de ne pas boucler indéfiniment dans le Module de Classe. Ensuite je lance le test puis je vérifie si le Combo à toujours le focus sinon le module redonne le focus au Combobox.
Voilou, en tout cas un grand merci à toi eriiic car sinon je pense que j'aurais encore passé quelques jours voir semaine avant de trouvé une solution.
Moon
Private Sub ComboBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
le focus ce fait toujours sur les bouton et en plus j'ai l'impression que la valeur de TabIndex ne ce réinitialise jamais car à chaque scan le focus change de bouton !!!
Là je doit dire que je comprend plus grand chose.
Merci
sur mon fichier de test ça marche bien : https://www.cjoint.com/?BJdiasHvfLO
eric
PS: j'ai l'impression qu'on va tourner en rond car j'ai l'impression que la combobox a toujours le focus tant que tout n'est pas fini. Et aucun objet n'a un évènement style gotfocus.
J'ai essayé en activant un autre userform et en envoyant setfocus a son activation mais échec aussi.
Une idée mais à voir si tu peux l'intégrer facilement dans ton programme : fermer et rouvrir le formulaire
eric
J'ai essayé en refermant la Userform et en l'ouvrant mais là j'ai des problèmes car excel plante ?
et sur mon fichier de test, ça fonctionne chez toi ?
car excel plante ?
C'est vague...
C'est toujours difficile de modifier après coup la structure et le fonctionnement d'un programme sans faire de bourdes.
eric
Oui avec ton fichier cela fonctionne, mais lorsque j'intègre les même lignes dans mon code, cela ne fait pas planté excel, mais ne fait pas le focus sur le combo. Par contre la méthode de ferme la Userform et de la ré-ouvrir plante complétement excel, la userform reste ouverte et office ouvre une boite de dialogue pour me demandé ce que je veux faire en grisant l'ensemble d'excel
.