Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 SetFocus sur le premier Texbox vide de la Frame

Piment

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

Pièces jointes

  • Essai4.xlsm
    50.5 KB · Affichages: 15

Piment

XLDnaute Occasionnel
Patrick,
J'avais bien pris acte de ta proposition de pouvoir inscrire dans le tableau un nouveau numéro.
J'avais bien compris que vouloir les deux ce n'était pas possible. En effet, au delà de la problématique que tu avais soulevé, le fonctionnement actuel de mon fichier ne permet pas cette proposition. Lorsque je dois ajouter un nouveau numéro, je fais appel à une autre procédure. Je dois en effet saisir un certain nombre de données qui ne se retrouve pas sur l'Usf Concerné. Cet Usf ne concerne que la saisie des consommations de chaque ligne téléphonique.
Le tableau est renseigné lors de la création de la ligne, en amont.
La proposition de Fanch55 répond, apparemment, bien, à l'objet de cette discussion.
Je regrette profondément que tu le prenne mal.
Je vous suis reconnaissant, à tous les 3, d'avoir contribué à la résolution de mon problème.
 

patricktoulon

XLDnaute Barbatruc
re
je le prends pas mal du tout
mais si je respecte le boulot de @fanch55 j'estime que en tant que plus expérimenté il est de notre devoir de faire entrevoir au demandeurs les lacunes non pas dans le code mais le raisonnement
et c'est pas @fanch55 ou @ chti60 qui vont me contredire

le raisonnement c'est 70% du code

d'autre part dans mon exemple
je t'ai montré bien d'autre choses
par exemple comment travailler avec un TS au lieu de travailler avec un range et xlup et des boucle et tout le toutim
mais non ça c'est passé à la trappe

alors pour conclure
1° quand on joue avec les focus oscillant on n'utilise pas de frames car selon la version d'excel vous allez avoir des surprises
2° quand on utilise un TS pour le remplissage d'une combo ou listbox on n'utilise pas de
range xlup row.count et touticointi pas de find etc..etc.. on en a pas besoins
3° prendre la peine de bien observer les propositions
4°et poser des questions sur le pourquoi
par exemple pourquoi j'ai viré le change du txtb
pourquoi j'ai utilisé le keydown avec un select case selon les touches
5°pourquoi j'ai séparé les remplissage et calcul du acitvate ou de l'event dans une sub séparée

mais non tout ça ça n'a succité aucunes question

je le prends pas mal mais je suis assez agassé de voir que les demandeurs ne prennent pas le temps
d'annalyser les propositions et ne posent pas de question
je te rassure tu n'es pas le seul
 

Piment

XLDnaute Occasionnel
Patrick,
Je te rassure, je n'ai pas tout compris dans les codes que tu m'as proposés, mais sache que ce n'est pas passé aux oubliettes.
Ton fichier est conservé avec précaution, car j'ai bien l'intention de m'en inspirer à l'avenir.
Mais dans le cas présent, j'avais juste besoin d'apporter une certaine souplesse dans la saisie des données dans mon fichier.
Prendre en compte tes observations et mettre en pratique tes codes revenait à reprendre dans son ensemble le fichier. Et ça, c'était juste pas possible. Je n'ai d'autre choix que de faire avec.
Pour le moment il fonctionne, et plutôt bien. J'ai les résultats que je souhaitais. Je bidouille des bouts de code ici, ou là, je demande au forum quand je n'y arrive pas, et à l'arrivée, j'ai quelque chose qui fonctionne.
Sur ce coup-ci, une fois de plus, j'arrive à obtenir le résultat escompté: je suis content. Enfin, je n'aurais plus besoin de taper 10 fois *150 lignes la touche Tab ou Entrée pour atteindre le Texbox du mois.
A vos contacts j'ai beaucoup appris, mais je suis loin de maîtriser. Grâce à vous je continu à apprendre. Merci pour cela.
Si demain ça beug, je reviendrais vers vous, une fois encore, et je n'ai aucun doute sur l'aide que je trouverais.
Encore merci à vous.
 

job75

XLDnaute Barbatruc
Bonsoir Piment et les autres,

Je n'ai pas du tout suivi ce fil mais pour répondre au problème du post #1 voici ma solution :

1) j'ai supprimé la macro ComboBox1_Exit

2) je termine la macro ComboBox1_Change par ce code :
VB:
    If ComboBox1.ListIndex <> -1 Then
        Cells(ComboBox1.ListIndex + 2, 2).Select
        Application.OnTime 1, "Select_TextBox" 'lancement différé
    End If
qui permet de lancer cette macro dans Module1 :
VB:
Sub Select_TextBox()
If UserForms.Count = 0 Then Exit Sub 'Si l'UserForm n'est pas ouvert
Dim i As Byte
For i = 2 To 13
    If Modifier.Frame1.Controls("TextBox" & i) = "" Then
        Modifier.Frame1.Controls("TextBox" & i).SetFocus
        Exit For
    End If
Next
End Sub
A+
 

Pièces jointes

  • Essai4.xlsm
    47.7 KB · Affichages: 4

Piment

XLDnaute Occasionnel
Bonjour Jean-Marie,
Ton bonheur fais un bien immense! Je soumets une galère (pour moi), et au bout quelqu'un s'éclate à la résoudre. On se sent un peu moins "con". Je sens que ma journée va être bonne: MERCI pour ça!!
Pour revenir au fichier, je regarde et je te fais un retour.
Excellente journée à toi.
 

Piment

XLDnaute Occasionnel
Re
Jean-Marie,
Pour ce qui est de mettre le Focus sur le premier textBox vide, ça répond à la demande. Mais je perds la faculté de saisir manuellement le numéro dans le comboBox, et ça, ce n'est pas envisageable.
Je t'explique pourquoi : Je reçois la facture de toutes nos lignes de l'opérateur. La facturation est faite à partir des numéros de téléphones (Logique). J'ai plus de 150 lignes.
Dans la configuration que tu me proposes, il me faut faire défiler dans la ComboBox jusqu'à ce que je trouve le numéro recherché, et cela pour chaque numéro. Or, aujourd'hui, je saisis les premiers chiffres du numéro et au fur et à mesure de la frappe, le comboBox me propose un numéro.
A la sortie du comboBox, le curseur est positionné sur le premier TexBox de la Frame et je dois, ou par "Tab" ou "Entrez" aller chercher le premier Texbox vide, qui correspond au mois en cours.
Tous les mois précédents sont déjà renseignés, puisque l'opérateur a l'obligation de transmettre ses factures en temps et heure.
Tu comprends pourquoi je cherchais une solution me permettant d'aller directement au premier Texbox vide de la Frame, donc correspondant au mois en cours.
On est au mois de Décembre, je reçois la facture, je saisis le numéro dans le comboBox, je sors du comboBox, le curseur se positionne sur le premier texbox de la frame (Janvier), et la je tab 10 fois pour atteindre le texbox du mois de Novembre. ET CELA PLUS DE 150 FOIS!! ! puisque j'ai plus de 150 numéros de ligne.
Tu comprends ma demande.
Là, je saisis un numéro, grâce à la recherche intuitive du comboBox , j'ai le bon numéro, il me positionne sur la bonne ligne dans le tableau (ce qui me permet, d'un coup d'œil, de vérifier que je suis bien positionné sur le bon numéro dans le tableau), je fais Entrer ou Tab, et MIRACLE, le focus est sur le texbox du mois en cours, je saisis le montant, je valide et vérifie, d'un simple coup d'œil, que la saisie s'est faite sur le bon numéro et le bon mois dans le tableau. Non seulement je gagne un temps précieux, mais c'est également moins fastidieux.
Donc:
- il ne peut pas avoir de mois antérieur non renseigné,
- il me faut garder la recherche intuitive du comboBox. Je pense donc qu'il faut que la procédure se déclenche à la sortie du combBox: donc un ComboBox_Exit, ou alors à l'entrée dans la Frame.
Je suis convaincu que tu vas trouver.
Merci beaucoup à toi.
Bonne journée à toi, et continue de t'éclater!!!!!
Claude
 

job75

XLDnaute Barbatruc
Bonjour Piment, le forum,

Voici une solution qui permet de naviguer avec les touches de tabulation et Entrée.

A la fin de la macro ComboBox1_Change :
VB:
    Application.OnKey "{TAB}", "Select_TextBox"
    Application.OnKey "~", "Select_TextBox" 'touche Entrée
    Application.OnKey "{ENTER}", "Select_TextBox" 'du pavé numérique
Et dans Module1 :
VB:
Sub Select_TextBox()
If UserForms.Count Then 'si l'UserForm est ouvert
    Dim i As Byte
    For i = 2 To 13
        If Modifier.Frame1.Controls("TextBox" & i) = "" Then
            Modifier.Frame1.Controls("TextBox" & i).SetFocus
            Exit For
        End If
    Next
End If
'---annule les affectations des touches---
Application.OnKey "{TAB}"
Application.OnKey "~" 'touche Entrée
Application.OnKey "{ENTER}" 'du pavé numérique
End Sub
A+
 

Pièces jointes

  • Essai5.xlsm
    47.8 KB · Affichages: 5

Piment

XLDnaute Occasionnel
Re
Jean-Marie, il te reste à gérer la recherche intuitive du ComboBox.
Sur ce que tu me propose, je ne saisir aucune données. Je suis obligé d'aller rechercher le numéro concerné dans le ComboBox. Sur trois données dans le ComboBox, pas de problème, mais sur plus de 150 données dans le ComboBox, c'est compliqué.
De plus si je saisi manuellement une donnée dans le comboBox, l'Usf perd le Focus, c'est la feuille qui prend le Focus et ce que tu as "tapé" se retrouve dans la feuille à la place des données qui s'y trouvent. juste pas possible!
Je pense qu'il ne faut pas toucher au ComboBox. Il faut travailler sur la Frame: à la sortie du comboBox la Frame prend le Focus (c'est ce qui se passe dans le fichier d'origine) et recherche du Texbox vide, et focus sur ce dernier.
Jean-Marie, il te reste à gérer la recherche intuitive du ComboBox. Sur ce que tu me proposes, je ne saisis aucune donnée. Je suis obligé d'aller rechercher le numéro concerné dans le ComboBox. Sur trois données dans le ComboBox, pas de problème, mais sur plus de 150 données dans le ComboBox, c'est compliqué. De plus si je saisis manuellement une donnée dans le comboBox, l'Usf perd le Focus, c'est la feuille qui prend le Focus et ce que tu as "tapé" se retrouve dans la feuille à la place des données qui s'y trouvent. juste pas possible ! Je pense qu'il ne faut pas toucher au ComboBox. Il faut travailler sur la Frame: à la sortie du comboBox la Frame prend le Focus (c'est ce qui se passe dans le fichier d'origine) et recherche du Texbox vide, et focus sur ce dernier. Bon triturage de méninges!
Merci à toi
 

patricktoulon

XLDnaute Barbatruc
Bonjour
allons donc on est maintenant dans la recherche intuive
sachant que beaucoup de numero sont assez similaire en debut on ne peut pas se servir de l'auto selection
sinon l'event etant déclenché l'action de focus va forcément être opéré
il va falloir faire le code de recherche intuitive
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil
piment tu dis :
j'ai le bon numéro, il me positionne sur la bonne ligne dans le tableau (ce qui me permet, d'un coup d'œil, de vérifier que je suis bien positionné sur le bon numéro dans le tableau),
moi dans le Combobox , j'ai le Numéro de la Ligne Source donc pas besoin de vérifier et de sélectionner la Ligne du Tableau , pour voir si c'est la Bonne Ligne!
je continue de regarder #56,#58
jean marie
 

Piment

XLDnaute Occasionnel
Bonjour Patrick,
Content de voir que tu suis toujours.
Patrick il te faut avoir conscience que je ne suis qu'un bricoleur, je n'utilise pas forcément les bon termes.
Quand je parle de recherche intuitive du ComboBox, cela veut dire, pour moi, que je tape, dans le ComboBox 06 95, il me propose le premier n° qui commence par 06 95, puis je continue à taper 8, il me propose le premier N° qui contient 06 95 8, je continue à taper 8, il me propose le premier N° qui commence par 06 95 88, et s'il n'y en un a qu'un, il me propose 06 95 88 45 88. Le TexBox1 prend le nom correspondant au N° la colonne "B" du tableau est sélectionné. Tab ou Entrée, donc sortie du comboBox, la Frame prend le Focus (Menu: Ordre de Tabulation de l'Usf), et le Focus se met sur le TexBox2. Ma recherche est qu'il recherche dès l'entrée dans la Frame le premier TexBox Vide et me permet la saisie du montant.
Merci à toi.
 

ChTi160

XLDnaute Barbatruc
Re
Un extrait du Code du Userform
t_Struc : correspond au tableau structuré , Base Source .
VB:
 With Me
       With .CBx_Recherche 'ex Combobox1
              .ColumnCount = 4
              .ColumnWidths = "95;150;0;0"
         For Lgn = 1 To Range("t_BDD").ListObject.ListRows.Count   'Pour chaque ligne du tableau Structuré
              .AddItem Format(t_Struc.ListRows(Lgn).Range.Cells(1), "0# ## ## ## ##")'Ici le Numéro de téléphone
              .List(.ListCount - 1, 1) = Trim(t_Struc.ListRows(Lgn).Range.Cells(2))'Ici le Nom
              .List(.ListCount - 1, 2) = Lgn 'Ici la Ligne source
              .List(.ListCount - 1, 3) = t_Struc.ListRows(Lgn).Range.Cells(t_Struc.ListRows(Lgn).Range.Cells.Count) 'Ici le mois de début de l'abonnement
         Next Lgn
              .ListRows = .ListCount
              .BoundColumn = 2
       End With
jean marie
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…