Bonjour,
Dans le cadre du développement d'un outil de création de nomenclature au sein de mon entreprise, j'aurais besoin de votre aide concernant un "tableau de bord" que j'ai créé via un controle ActiveX multipage.
Ce tableau de bord est constitué de 3 pages sur lesquels se trouvent un ensemble de textbox et doit rester visible sur la feuille qui lui ai dédiée (j'affiche la nomenclature mise en page sur la feuille pour que l'utilisateur puisse voir l'avancement de son travail en temps réel).

Le premier problème auxquel j'ai fait face fut la perte de focus lorsque je cliquai sur les textboxs de mon multipage (1er clic=focus OK, puis un genre "d'autorepaint" s'execute sans que je sache comment et le textbox perd le focus... il me fallait alors le recliquer pour retrouver le focus)
Pour résoudre ce soucis j'ai inséré des frames pour "contenir" chacun de mes textbox.
Est-ce la seule solution?

Le second problème est qu'il me faudrait pouvoir "naviguer" de textbox en textbox via la touche enter. J'ai donc utilisé la fonction SetFocus, sur le keydown de mon premier textbox pour se rendre directement sur mon second textbox, mais malheureusement elle ne fonctionne qu'en pas à pas.
Lorsque je l'utilise en automatique je n'ai visiblement pas le focus sur le textbox desiré... sauf que lorsque je sors du classeur (exemple clic sur le bureau ou sur la fenetre developpeur) puis réactive mon classeur alors le focus apparait correctement.
Auriez-vous une idée d'ou vient ce "bug"?
y-aurait-il un lien entre "l'autorepaint" de mon premier problème et le second? (si je peux mettre tous mes textbox directement sur la page de mon multipage je pourrai utiliser le tabindex...)


afin de pouvoir illustrer mes soucies j'avais préparé un petit multipage avec 2 frame et 2 textbox mais les règles du forum m'interdisent de le joindre directement à ma première requête.
Je vous mets donc le code en suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public WithEvents TB1 As MSForms.TextBox
Public WithEvents TB2 As MSForms.TextBox
 
Public WithEvents FR1 As MSForms.Frame
Public WithEvents FR2 As MSForms.Frame
 
Private Sub MP1_GotFocus()
Set TB1 = MP1.Pages(0).Controls("TB1")
Set TB2 = MP1.Pages(0).Controls("TB2")
 
Set FR1 = MP1.Pages(0).Controls("FR1")
Set FR2 = MP1.Pages(0).Controls("FR2")
 
End Sub
 
Private Sub TB1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
    TB2.Value = "toto"
    TB2.SelStart = 0
    TB2.SelLength = Len(TB2.Text)
    TB2.SetFocus
End If
MsgBox MP1.SelectedItem.ActiveControl.Name
End Sub
J'ai donc créé un multipage "MP1", inséré 2 frames "FR1" + "FR2" sur la première page, inséré un textbox par frame "TB1" dans "FR1" et "TB2" dans "FR2".

Pour récupérer les évènements de chaque controls je passe par une déclaration "Public withevents...".

Pour simplifier le code je charge des variables à chaque prise de focus du multipage.

sur l'évènement keydown de TB1 je marque "toto" dans TB2 (mets en évidence que seul le setfocus déraille) puis je selectionne la totalité du texte de TB2 (permet un repère visuel pour l'utilisateur et une rapidité d'execution intéressante pour mon outil)

Pour exposer le problème j'ai rajouté un msgbox qui montre bien que TB2 n'a pas le focus a la fin de l'execution (temps que l'on est pas sortie du classeur puis rerentré)

PS: pour exposer le premier problème il suffit de faire glisser TB1 et TB2 en dehors des frames, directement sur la page et vous verrez alors ces soucis de focus et "autorepaint".