[Résolu] USF minimaliste : Boucler sur 1 seule TextBox

peper_eliot

XLDnaute Junior
Bonjour à tous :D

petit problème du jour (et d'avance merci pour vos pistes et réponses :rolleyes:)

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

En PJ mon USF minimaliste :rolleyes:
Fichier supprimé... Voir le fichier a jour dans le commentaire https://www.excel-downloads.com/threads/resolu-usf-minimaliste-boucler-sur-1-seule-textbox.203752/
 
Dernière édition:

peper_eliot

XLDnaute Junior
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.
 
Dernière édition:

peper_eliot

XLDnaute Junior
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...
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
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.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
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

Bonne courage et continuation
@+Thierry
 

peper_eliot

XLDnaute Junior
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
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
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.
 

peper_eliot

XLDnaute Junior
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 ;)
 
Dernière édition:

peper_eliot

XLDnaute Junior
Re : USF minimaliste : Boucler sur 1 seule TextBox

Bon, ben, voilà... le code est nettoyé du mieux que je pouvais... J'espère que ça ne va pas vous faire dresser les cheveux sur la tête ;)

L'userform1 est celui qui a été soumis à la création de ce fil
L'userform2 est celui qui fait suite aux bons conseils postés


Encore merci à tous pour vos réponses et à la prochaine ;)
 

Pièces jointes

  • Classeur1.xlsm
    32.6 KB · Affichages: 57
  • Classeur1.xlsm
    32.6 KB · Affichages: 57
  • Classeur1.xlsm
    32.6 KB · Affichages: 63

Discussions similaires