petit problème du jour (et d'avance merci pour vos pistes et réponses )
Soit un usf avec seulement 1 TextBox1...
Comment boucler sur cette TextBox1 ?
Je n'ai pas trouvé le moyen de le faire, sauf en passant par un autre contrôle qui reçoit le focus et qui renvoi immédiatement sur la TextBox1
Code:
Option Explicit
Dim CHERCHE
Private Sub UserForm_Initialize()
With TextBox1
.SetFocus
End With
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With Sheets("Feuil1").ListObjects("Tableau1")
Set CHERCHE = Range("Tableau1[Numéro]").Find(What:=TextBox1.Value, LookAt:=1)
If Not CHERCHE Is Nothing Then
TextBox1.Value = TextBox1.Value & " - N° trouvé"
'actions
Else
TextBox1.Value = TextBox1.Value & " - N° inconnu"
'actions
End If
End With
End Sub
Private Sub OptionButton1_Enter()
'astuce pour boucler sur la TextBox1
'mais c'est pas terrible... Je ne peux plus utiliser ce control
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
End Sub
Re : USF minimaliste : Boucler sur 1 seule TextBox
Salut a toi oh "helper du vendredi soir
En fait, c'est pour faire une saisie continue depuis la TexBox1
Là dans le classeur, si tu lances l'USF, tu saisis 1 et tu valides par la touche ENTREE... tout de suite le traitement est effectué et, hop, j'ai de nouveau le focus sur ma TexBox1, prêt a saisir une autre valeur
Au final, cela me permet d'exploiter une "douchette" lecteur code-barre... Je scan en continu et hop, j'ai toujours le focus sur ma TextBox1 pour le prochain Scan.
Re : USF minimaliste : Boucler sur 1 seule TextBox
Bonsoir a tous... N'ayant pas encore trouvé ZE code miracle j'en profite pour faire un petit up et demander une petite précision...
Dans le code, ce qui me permet de revenir sur la TextBox1 dès qu'une saisie est validée, c'est cette petite partie
Code:
Private Sub OptionButton1_Enter()
'astuce pour boucler sur la TextBox1
'mais c'est pas terrible... Je ne peux plus utiliser ce control
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
End Sub
étant toujours dépendant de ces lignes, je me suis dis que je pourrais peut-être les placer dans un module plutôt que dans l'USF... Aussitôt dit aussitôt fait...
Avec, derrière, l'idée de pourvoir m'en servir pour d'autres USF de mon classeur
Donc, au niveau de l'USF, j'ai
Code:
Private Sub OptionButton1_Enter()
Call USF_ActionNewScan
End Sub
Et au niveau du module...
Code:
Sub USF_ActionNewScan()
With UserForm1.TextBox1 'Prêt a recevoir le nouveau Scan
.SetFocus
.SelStart = 0
.SelLength = Len(UserForm1.TextBox1.Text)
End With
End Sub
ça marche.... Mais, pour aller encore plus loin, en admettant que j'ai 2 USF... comment faire pour que cette procédure soit appelable par les 2 USF...
Par une variable ??? Echec total... Je voulais faire
Code:
Option Explicit
Public USF As String
'=======================
Sub USF1_Show()
USF = "UserForm1"
UserForm1.Show
End Sub
'=======================
Sub USF_ActionNewScan()
With USF.TextBox1 'Prêt a recevoir le nouveau Scan
.SetFocus
.SelStart = 0
.SelLength = Len(UserForm1.TextBox1.Text)
End With
End Sub
Erreur de compilation : Qualificateur incorect
D'où ma question... Comment peut-on "écrire" UserForm1 ou UserForm2.Textbox2 avec une variable...
Re : USF minimaliste : Boucler sur 1 seule TextBox
Bonsoir.
Suggestion. Regardez dans les listes qui surmontent la fenêtre de code ce dont vous disposer comme procédures évènements (liste de droite) pour votre objet TextBox (liste de gauche).
Il y a quand même KeyDown et KeyPress qui devrait vous permettre de détecter un appui sur Entrée et prendre les mesures appropriées.
Cordialement.
Re : USF minimaliste : Boucler sur 1 seule TextBox
Re
Oui je pense aussi que c'est bien tordu et compliqué, il faut voir tous les évèmenents proposés pour une TextBox comme le propose Dranreb.
Si je me souviens dans le Firmware du scan à main, on pouvait avoir des Options pour simuler à la fin de l'envoie de la lecture du Code à Barres une touche Enter, ou un CarriageReturn ou autres, évidemment ca doit faire 10 ans je ne sais plus quelle marque c'était, mais on y était arrivé sans se prendre la tête avec des macros dans tous les sens, juste un petit USF
Re : USF minimaliste : Boucler sur 1 seule TextBox
TTF... t'es trop fort
Je coince encore un peu... une fois que la variable objet est ajoutée (Add) pour pouvoir la réutiliser
mais je crois que je tiens le bon bout... je vais pouvoir me piotter en rêvant a ces DEUX pistes
Sinon, oui, pour la douchette, chaque Scan renvoi bien une simulation de la touche Enter ou Tab en fonction de sa programmation.
Là, elle est avec Enter à l'issue de la lecture
Re : USF minimaliste : Boucler sur 1 seule TextBox
Et pour vaguement répondre au reste en donnant quelques idées:
1: Il ne faut jamais noter les noms de choses par des affectations à des String: il faut toujours carrément noter les chose elles mêmes par des Set à des variables objets de leur type (As UserForm ici)
2: Les procédures peuvent supporter des paramètres, il ne faut pas l'oublier. Éviter donc d'aller pêcher quelque chose dans un contrôle d'un userform dans une procédure appelée par celui ci: veillez à ce que l'userform le fournisse en paramètre lors de l'appel.
3: Les userform supportent des Public Sub. Comme dans tout module d'un autre type qu'un module ordinaire ce n'est plus une procédure dont le nom doit être unique dans tout le projet VBA: ça devient du coup une méthode. Il faut donc la qualifier du nom du userform suivi d'un point. Il en va de même de variables déclarées dedans Public qui en deviennent alors des propriétés en lecture écriture.
Re : USF minimaliste : Boucler sur 1 seule TextBox
Je sais pas comment vous remercier tous les deux...
Des vrais lumi_res en pleine nuit LOL
Alors voilà... j'ai laissé tombé la formule alambiquée... et j'ai remplacé par...
Code:
Option Explicit
Dim CHERCHE
Private Sub UserForm_Initialize()
With TextBox1
.SetFocus
End With
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'LE SCAN ALIMENTE LA TextBox1
'à l'issue du SCAN, la touche ENTER est simulée
If KeyCode = 13 Then
'RECHERCHE DE LA VALEUR SCANNEE
With Sheets("Feuil1").ListObjects("Tableau1")
Set CHERCHE = Range("Tableau1[Numéro]").Find(What:=TextBox1.Value, LookAt:=1)
If Not CHERCHE Is Nothing Then
TextBox1.Value = TextBox1.Value & " - N° trouvé"
'actions
Else
TextBox1.Value = TextBox1.Value & " - N° inconnu"
'actions
End If
End With
'PREPARATION DE LA TextBox1 pour prochain SCAN
With TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(TextBox1.Text)
End With
End If
End Sub
Avec ça, un petit coup de Show avec le passage du nom des USF via
Code:
X = "UserForm1"
VBA.UserForms.Add(X).Show
Alors là... celle là... je n'arrête pas de me l'exécuter en boucle
PS : @dranreb... là, je crois que j'ai pas tout compris, mais, promis, je vais décrypter demain