Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[2003] Gestion du TabIndex

13 réponses
Avatar
Péhemme
Bonjour à Tous,



Le contexte :

Dans un UserForm, j'ai un MultiPage contenant 3 pages.

Sur la Page1 j'ai :

directement sur la page, entre autres Labels et Boutons : 1 TextBox,

puis dans le Frame1, entre autres Labels, OptionButtons, DTPicker : 2
TextBox

et dans le Frame2, des Labels et 4 TextBox.

Oublions les autres pages du Multipage.



L'objectif :

Je souhaite, avec la touche Tab, me déplacer de TextBox en TextBox.



Par tâtonnements, j'ai cru comprendre que les index du TabIndex étaient
initialisés par objet contenant.

Les TabIndex repartent à 0 à chaque niveau de contenant. (mais je peux me
tromper).

Afin de contourner cette difficulté, j'ai :

a) mis tous les TabStop des contrôles à False (sauf mes fameuses TextBox à
True).

b) utilisé « Ordre de Tabulation » . (peut-être maladroitement)...

c) j'ai même fait une macro dans le UserForm_Initialize :

With MultiPage1.page1

For i = 0 To 6

Controls("TextBox" & i + 1).TabIndex = i

Next i

End With

Tous les TabKeyBeavior des TextBox sont à False

Aucune de ces méthodes ne me permet d'atteindre mon objectif.



Les questions :

Qu'est-ce que je fais mal ou d'incomplet ?

Existe-t-il une méthode me permettant d'atteindre mon but de me déplacer
uniquement sur mes TextBox de la page 1 de mon Multipage, qu'ils soient ou
non dans des Frames, avec la touche Tab de mon clavier ?



Merci d'avance

Michel

10 réponses

1 2
Avatar
michdenis
Bonjour,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre avec lequel
les déplacements vont se faire. Au besoin, il est possible de réattribuer la valeur
de ces TabIndex...

B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 - fmTabStyleNone

C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur propriété TabStop = False


MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion : 4d7218f3$0$32426$

Bonjour à Tous,



Le contexte :

Dans un UserForm, j'ai un MultiPage contenant 3 pages.

Sur la Page1 j'ai :

directement sur la page, entre autres Labels et Boutons : 1 TextBox,

puis dans le Frame1, entre autres Labels, OptionButtons, DTPicker : 2
TextBox

et dans le Frame2, des Labels et 4 TextBox.

Oublions les autres pages du Multipage.



L'objectif :

Je souhaite, avec la touche Tab, me déplacer de TextBox en TextBox.



Par tâtonnements, j'ai cru comprendre que les index du TabIndex étaient
initialisés par objet contenant.

Les TabIndex repartent à 0 à chaque niveau de contenant. (mais je peux me
tromper).

Afin de contourner cette difficulté, j'ai :

a) mis tous les TabStop des contrôles à False (sauf mes fameuses TextBox à
True).

b) utilisé « Ordre de Tabulation » . (peut-être maladroitement)...

c) j'ai même fait une macro dans le UserForm_Initialize :

With MultiPage1.page1

For i = 0 To 6

Controls("TextBox" & i + 1).TabIndex = i

Next i

End With

Tous les TabKeyBeavior des TextBox sont à False

Aucune de ces méthodes ne me permet d'atteindre mon objectif.



Les questions :

Qu'est-ce que je fais mal ou d'incomplet ?

Existe-t-il une méthode me permettant d'atteindre mon but de me déplacer
uniquement sur mes TextBox de la page 1 de mon Multipage, qu'ils soient ou
non dans des Frames, avec la touche Tab de mon clavier ?



Merci d'avance

Michel
Avatar
Péhemme
Bonjour Denis,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la
touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre
avec lequel
les déplacements vont se faire. Au besoin, il est possible de réattribuer
la valeur
de ces TabIndex...


Oui et c'est bien ce que j'ai tenté de faire mais en vain.
Je modifie bien les TabIndex, mais ceci est sans effet pour passer de la
dernière TextBox d'une Frame à la première de la Frame suivante.
Je mets cela (mais ai-je raison) sur le fait que ces TextBox sont sur la
page proprement dite et dans des Frames différentes et, dans cette
configuration, je n'arrive pas à sauter d'un textBox à l'autre par la simple
utilisation de la touche Tab.

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur
propriété TabStop = False


Je l'ai fait, mais cela n'a pas solutionné mon problème.


B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les
boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 -
fmTabStyleNone
C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle
multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se
déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub



Merci de ta suggetion.
Michel
Avatar
michdenis
Ok, ta demande est différente à ce que j'avais compris !

En utilisant le dernier TextBox où le focus est mis sur la première page du contrôle "Multipage"
tu ajoutes ce code dans ton formulaire : TextBox4 est supposé d'être le dernier TextBox de la
page1 avant d'aller sur la page2. En ouvrant la page2, il est supposé que tu veux rendre le focus
sur le textbox13.

'--------------------------
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.MultiPage1.Value = 1
Me.TextBox13.SetFocus
End Sub
'--------------------------


MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion : 4d724184$0$5408$

Bonjour Denis,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la
touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre
avec lequel
les déplacements vont se faire. Au besoin, il est possible de réattribuer
la valeur
de ces TabIndex...


Oui et c'est bien ce que j'ai tenté de faire mais en vain.
Je modifie bien les TabIndex, mais ceci est sans effet pour passer de la
dernière TextBox d'une Frame à la première de la Frame suivante.
Je mets cela (mais ai-je raison) sur le fait que ces TextBox sont sur la
page proprement dite et dans des Frames différentes et, dans cette
configuration, je n'arrive pas à sauter d'un textBox à l'autre par la simple
utilisation de la touche Tab.

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur
propriété TabStop = False


Je l'ai fait, mais cela n'a pas solutionné mon problème.


B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les
boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 -
fmTabStyleNone
C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle
multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se
déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub



Merci de ta suggetion.
Michel
Avatar
Péhemme
Merci Denis.
Je l'avais tenté, je l'ai réessayé, mais je n'arrive pas à le faire
fonctionner.
Mon problème n'est pas de changer de page, mais de passer d'une Frame à
l'autre sachant que tout se passe bien à l'intérieur de la Frame.

La 1ère TextBox est directement sur la page et la 2ème TextBox est dans la
Frame1, j'écris :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame1.TextBox2.SetFocus
End Sub

Les TabIndex jouent leur rôle de la 2 à la 3 (toutes deux sur la Frame1)

La 3ème est toujours en Frame1 et la 4ème est dans la Frame2, j'écris :
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame2.TextBox4.SetFocus
End Sub

Sniff ! Sniff! Ni l'une, ni l'autre de ces macros ne fonctionne...
Avant que je me flagelle, une idée ?...
Merci en tout cas de t'intéresser à cette question.
Michel



"michdenis" a écrit dans le message de
news:iktjlh$upk$
Ok, ta demande est différente à ce que j'avais compris !

En utilisant le dernier TextBox où le focus est mis sur la première page
du contrôle "Multipage"
tu ajoutes ce code dans ton formulaire : TextBox4 est supposé d'être le
dernier TextBox de la
page1 avant d'aller sur la page2. En ouvrant la page2, il est supposé que
tu veux rendre le focus
sur le textbox13.

'--------------------------
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.MultiPage1.Value = 1
Me.TextBox13.SetFocus
End Sub
'--------------------------


MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion :
4d724184$0$5408$

Bonjour Denis,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la
touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre
avec lequel
les déplacements vont se faire. Au besoin, il est possible de réattribuer
la valeur
de ces TabIndex...


Oui et c'est bien ce que j'ai tenté de faire mais en vain.
Je modifie bien les TabIndex, mais ceci est sans effet pour passer de la
dernière TextBox d'une Frame à la première de la Frame suivante.
Je mets cela (mais ai-je raison) sur le fait que ces TextBox sont sur la
page proprement dite et dans des Frames différentes et, dans cette
configuration, je n'arrive pas à sauter d'un textBox à l'autre par la
simple
utilisation de la touche Tab.

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur
propriété TabStop = False


Je l'ai fait, mais cela n'a pas solutionné mon problème.


B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les
boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 -
fmTabStyleNone
C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle
multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se
déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub



Merci de ta suggetion.
Michel

Avatar
michdenis
Mets une copie de ton fichier sur cijoint.fr ou cjoint.com
et retourne-nous l'adresse obtenue ici.

Indique par leur nom d'objet, l'ordre de sélection des textbox que tu désires.



MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion : 4d725ec4$0$32443$

Merci Denis.
Je l'avais tenté, je l'ai réessayé, mais je n'arrive pas à le faire
fonctionner.
Mon problème n'est pas de changer de page, mais de passer d'une Frame à
l'autre sachant que tout se passe bien à l'intérieur de la Frame.

La 1ère TextBox est directement sur la page et la 2ème TextBox est dans la
Frame1, j'écris :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame1.TextBox2.SetFocus
End Sub

Les TabIndex jouent leur rôle de la 2 à la 3 (toutes deux sur la Frame1)

La 3ème est toujours en Frame1 et la 4ème est dans la Frame2, j'écris :
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame2.TextBox4.SetFocus
End Sub

Sniff ! Sniff! Ni l'une, ni l'autre de ces macros ne fonctionne...
Avant que je me flagelle, une idée ?...
Merci en tout cas de t'intéresser à cette question.
Michel



"michdenis" a écrit dans le message de
news:iktjlh$upk$
Ok, ta demande est différente à ce que j'avais compris !

En utilisant le dernier TextBox où le focus est mis sur la première page
du contrôle "Multipage"
tu ajoutes ce code dans ton formulaire : TextBox4 est supposé d'être le
dernier TextBox de la
page1 avant d'aller sur la page2. En ouvrant la page2, il est supposé que
tu veux rendre le focus
sur le textbox13.

'--------------------------
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.MultiPage1.Value = 1
Me.TextBox13.SetFocus
End Sub
'--------------------------


MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion :
4d724184$0$5408$

Bonjour Denis,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la
touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre
avec lequel
les déplacements vont se faire. Au besoin, il est possible de réattribuer
la valeur
de ces TabIndex...


Oui et c'est bien ce que j'ai tenté de faire mais en vain.
Je modifie bien les TabIndex, mais ceci est sans effet pour passer de la
dernière TextBox d'une Frame à la première de la Frame suivante.
Je mets cela (mais ai-je raison) sur le fait que ces TextBox sont sur la
page proprement dite et dans des Frames différentes et, dans cette
configuration, je n'arrive pas à sauter d'un textBox à l'autre par la
simple
utilisation de la touche Tab.

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur
propriété TabStop = False


Je l'ai fait, mais cela n'a pas solutionné mon problème.


B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les
boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 -
fmTabStyleNone
C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle
multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se
déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub



Merci de ta suggetion.
Michel

Avatar
Péhemme
Bonjour Denis,

http://www.cijoint.fr/cjlink.php?file=cj201103/cijTwqCkMh.xls

1°) Tu cliques sur le bouton "FACTURES" de la barre d'outils.
2°) Sur l'onglet "VENTES" du UserForm, tu te positionnes sur la Textbox1
(Client)=> Tu entres n'importe quoi
3°) Tu fais Tab => il ne se passe rien.
Je souhaite que le curseur passe directement dans la TextBox2 : N° de pièce
5°) Tu fais Tab => le curseur passe bien dans la TextBox3 : Montant TTC =>
Tu entres un montant
6°) Tu fais Tab => il ne se passe rien.
Je souhaite que le curseur passe directement dans la TextBox4 : Prestations
Taxables

Ensuite, cela fonctionne.

Merci d'avance
Michel

"michdenis" a écrit dans le message de
news:iktrui$lg3$
Mets une copie de ton fichier sur cijoint.fr ou cjoint.com
et retourne-nous l'adresse obtenue ici.

Indique par leur nom d'objet, l'ordre de sélection des textbox que tu
désires.



MichD
Avatar
Péhemme
Je m'aperçois qu'il faut enregistrer le fichier pour que la barre d'outils
se charge.
Michel

"michdenis" a écrit dans le message de
news:iktrui$lg3$
Mets une copie de ton fichier sur cijoint.fr ou cjoint.com
et retourne-nous l'adresse obtenue ici.

Indique par leur nom d'objet, l'ordre de sélection des textbox que tu
désires.



MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion :
4d725ec4$0$32443$

Merci Denis.
Je l'avais tenté, je l'ai réessayé, mais je n'arrive pas à le faire
fonctionner.
Mon problème n'est pas de changer de page, mais de passer d'une Frame à
l'autre sachant que tout se passe bien à l'intérieur de la Frame.

La 1ère TextBox est directement sur la page et la 2ème TextBox est dans la
Frame1, j'écris :
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame1.TextBox2.SetFocus
End Sub

Les TabIndex jouent leur rôle de la 2 à la 3 (toutes deux sur la Frame1)

La 3ème est toujours en Frame1 et la 4ème est dans la Frame2, j'écris :
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.Frame2.TextBox4.SetFocus
End Sub

Sniff ! Sniff! Ni l'une, ni l'autre de ces macros ne fonctionne...
Avant que je me flagelle, une idée ?...
Merci en tout cas de t'intéresser à cette question.
Michel



"michdenis" a écrit dans le message de
news:iktjlh$upk$
Ok, ta demande est différente à ce que j'avais compris !

En utilisant le dernier TextBox où le focus est mis sur la première page
du contrôle "Multipage"
tu ajoutes ce code dans ton formulaire : TextBox4 est supposé d'être le
dernier TextBox de la
page1 avant d'aller sur la page2. En ouvrant la page2, il est supposé que
tu veux rendre le focus
sur le textbox13.

'--------------------------
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
Me.MultiPage1.Value = 1
Me.TextBox13.SetFocus
End Sub
'--------------------------


MichD
--------------------------------------------
"Péhemme" a écrit dans le message de groupe de discussion :
4d724184$0$5408$

Bonjour Denis,

A ) Si tu désires te déplacer d'un contrôle à l'autre en utilisant la
touche Tab,
Tu dois utiliser la valeur tabindex des contrôles pour attribuer l'ordre
avec lequel
les déplacements vont se faire. Au besoin, il est possible de
réattribuer
la valeur
de ces TabIndex...


Oui et c'est bien ce que j'ai tenté de faire mais en vain.
Je modifie bien les TabIndex, mais ceci est sans effet pour passer de la
dernière TextBox d'une Frame à la première de la Frame suivante.
Je mets cela (mais ai-je raison) sur le fait que ces TextBox sont sur la
page proprement dite et dans des Frames différentes et, dans cette
configuration, je n'arrive pas à sauter d'un textBox à l'autre par la
simple
utilisation de la touche Tab.

D ) Si certains contrôles ne doivent pas recevoir le focus, tu mets leur
propriété TabStop = False


Je l'ai fait, mais cela n'a pas solutionné mon problème.


B ) Si tu utilises un contrôle Multipage, je te suggère d'enlever les
boutons "Page" au
dessus du contrôle multipage en utilisant la propriété Style = 2 -
fmTabStyleNone
C ) Pour changer de page, tu ajoutes à l'extérieur de ton contrôle
multipage (directement
sur le formulaire) des boutons de commandes dont la tâche est de se
déplacer d'une
page à l'autre. Pour activer une page particulière, le code est :
________________
Private Sub CommandButton2_Click()
Me.MultiPage1.Value = 0 'Pour la page1
End Sub



Merci de ta suggetion.
Michel

Avatar
michdenis
Pour l'onglet Ventes,

ça fonctionne : http://cjoint.com/?1dfuUatXGWn

Je n'ai pas ajouté de code, seulement manier les propriétés.


MichD
--------------------------------------------
Avatar
Péhemme
Formidable !
Cela fonctionne parfaitement bien.
Un petit effort, si ce n'est pas classé défense, je peux savoir quelles
propriétés tu as modifiées ?
J'ai regardé rapidement, mais cela m'a échappé.
Et là, je te dirai : mille mercis !
;-))
Michel


"michdenis" a écrit dans le message de
news:iku3um$coh$
Pour l'onglet Ventes,

ça fonctionne : http://cjoint.com/?1dfuUatXGWn

Je n'ai pas ajouté de code, seulement manier les propriétés.


MichD
--------------------------------------------

Avatar
michdenis
Pour les 3 pages de ton formulaire : http://cjoint.com/?1dfwHpHTzmY

Pour l'onglet Vente : c'est le même principe pour les 3 pages

A ) Facture, Avoir et Montant TTC, TapStop = False
B ) Client : = TabIndex = 0
C ) Frame1 : = TabIndex = 1
D ) Textbox pour le No : tabindex = 0
E ) Textbox pour le Montant TTC : = TabIndex = 1

F ) Bouton Valider : = TabIndex = 4 , TabStop = False

Ce qui fait que pour les contrôles pour la page Vente, tu as :
Textbox client = TapIndex =0
Frame1 = TapIndex = 1
Frame2 = TapIndex = 2

Et dans chaque frame, tu as 2 textbox
dont le tapindex est 0 et 1.

Voilà

MichD
--------------------------------------------
1 2