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

[VBA] Problème avec SetFocus

7 réponses
Avatar
HD
Bonjour,

Dans une Form, sur un TextBox1, j'utilise l'événement KeyDown pour détecter
lorsque l'utilisateur utilise les flèches du clavier. Je veux donc que
lorsque l'utilisateur appuis sur la flèche du haut (keycode = 38) que la
cellule active remonte d'un cran et que lorsque l'utilisateur appuis sur la
flèche du bas (keycode = 40) que la cellule active descende d'un cran.
Mais... en appuyant sur la flèche du haut le focus de la Form passe sur
l'objet situé au dessus... pour revenir à mon TextBox1 j'utilise
TextBox1.SetFocus or celà ne donne rien... le focus ne revient pas à la fin
du texte de mon TextBox1 mais reste sur l'objet du haut...

Auriez vous une astuce pour solutionner mon problème ?

Merci d'avance pour votre aide
--
@+
HD

7 réponses

Avatar
isabelle
bonjour HD,

si tu met la propriété du userform : ShowModal = False
tu peut sélectionner des cellules ou autre feuille du classeur



isabelle
------------------------------------------------------------------

Le 2011-04-08 05:58, HD a écrit :
Bonjour,

Dans une Form, sur un TextBox1, j'utilise l'événement KeyDown pour détecter
lorsque l'utilisateur utilise les flèches du clavier. Je veux donc que
lorsque l'utilisateur appuis sur la flèche du haut (keycode = 38) que la
cellule active remonte d'un cran et que lorsque l'utilisateur appuis sur la
flèche du bas (keycode = 40) que la cellule active descende d'un cran.
Mais... en appuyant sur la flèche du haut le focus de la Form passe sur
l'objet situé au dessus... pour revenir à mon TextBox1 j'utilise
TextBox1.SetFocus or celà ne donne rien... le focus ne revient pas à la fin
du texte de mon TextBox1 mais reste sur l'objet du haut...

Auriez vous une astuce pour solutionner mon problème ?

Merci d'avance pour votre aide

Avatar
MichD
Bonjour,

Comme ceci :

'-------------------------------------------------
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)

With ActiveSheet.Name
Select Case KeyCode
Case 38 'Vers le bas
If ActiveCell.Row > 1 Then
ActiveCell.Offset(-1).Select
KeyCode = 0
End If
Case 40 'vers le haut
If ActiveCell.Row < Cells.Rows.Count Then
ActiveCell.Offset(1).Select
KeyCode = 0
End If
End Select
End With
End Sub
'-------------------------------------------------

MichD
--------------------------------------------
Avatar
Gloops
HD a écrit, le 08/04/2011 11:58 :
Bonjour,

Dans une Form,
sur un TextBox1, j'utilise l'événement KeyDown pour détecter
lorsque l'utilisateur utilise les flèches du clavier. Je veux donc qu e
lorsque l'utilisateur appuis sur la flèche du haut (keycode = 38) q ue la
cellule active remonte d'un cran et que lorsque l'utilisateur appuis su r la
flèche du bas (keycode = 40) que la cellule active descende d'un cr an.
Mais... en appuyant sur la flèche du haut le focus de la Form passe s ur
l'objet situé au dessus... pour revenir à mon TextBox1 j'utilise
TextBox1.SetFocus or celà ne donne rien... le focus ne revient pas à la fin
du texte de mon TextBox1 mais reste sur l'objet du haut...

Auriez vous une astuce pour solutionner mon problème ?

Merci d'avance pour votre aide




Bonjour,

Quand j'ai vu Form, sous Excel, j'ai tout de suite pensé à UserForm, et
puis un peu plus loin j'ai vu qu'il y avait des cellules. Il s'agit de
contrôles insérés sur une feuille de calcul, donc, j'imagine ?

Si j'ai bien lu, tu obtiens le fonctionnement décrit par le code de
MichDenis ? Et à la place tu voudrais obtenir le fonctionnement command é
par l'allumage du témoin scroll, c'est-à-dire que l'élément sél ectionné
reste sélectionné, mais que sa position à l'écran change ?

Il me semble qu'il faut regarder du côté de ActiveWindow.SmallScroll
d'une part, et de ActiveWindow.ScrollRow et ActiveWindow.ScrollColumn
d'autre part.

J'avais en tête un UpperLeftCell, mais apparemment, j'ai inventé.
Avatar
MichD
Bonjour,

| Quand j'ai vu Form, sous Excel, j'ai tout de suite pensé à UserForm, et
| puis un peu plus loin j'ai vu qu'il y avait des cellules. Il s'agit de
| contrôles insérés sur une feuille de calcul, donc, j'imagine ?

Seule la barre d'outils "Contrôle" à un contrôle "TextBox",
la barre d'outils "Formulaire" n'en disposant d'aucuns.

Le contrôle Textbox que l'on insère dans une feuille de calcul a les
mêmes événements que celui utilisé dans un formulaire(userform).

La procédure devrait fonctionner qu'elle soit placée dans un formulaire
ou pour un contrôle "TextBox" d'une feuille. Il s'agit de renommer le
nom du contrôle dans la déclaration de la procédure le cas échéant.

| J'avais en tête un UpperLeftCell, mais apparemment, j'ai inventé.

Je crois que tu fais référence à ceci :

J'avais en tête un UpperLeftCell, mais apparemment, j'ai inventé.

'Me si le code est écrit dans le module feuille
'bien que Me ne soit pas obligatoire, il permet d'avoir la liste déroulante
'permettant de voir les objets, propriétés et méthodes disponibles.
x = Me.Shapes("TextBox1").TopLeftCell.Address

N'importe où dans le code, il y a cette syntaxe qui est disponible
x = Feuil1.TextBox1.TopLeftCell.Address
OU
x = Worksheets("Feuil1").textbox1.TopLeftCell.Address
OU
x = Worksheets("Feuil1").Shapes("textbox1").TopLeftCell.Address

Le pendant de la propriété "TopLeftCell" : BottomRightCell


MichD
--------------------------------------------
"Gloops" a écrit dans le message de groupe de discussion : inqsta$pr8$

HD a écrit, le 08/04/2011 11:58 :
Bonjour,

Dans une Form,
sur un TextBox1, j'utilise l'événement KeyDown pour détecter
lorsque l'utilisateur utilise les flèches du clavier. Je veux donc que
lorsque l'utilisateur appuis sur la flèche du haut (keycode = 38) que la
cellule active remonte d'un cran et que lorsque l'utilisateur appuis sur la
flèche du bas (keycode = 40) que la cellule active descende d'un cran.
Mais... en appuyant sur la flèche du haut le focus de la Form passe sur
l'objet situé au dessus... pour revenir à mon TextBox1 j'utilise
TextBox1.SetFocus or celà ne donne rien... le focus ne revient pas à la fin
du texte de mon TextBox1 mais reste sur l'objet du haut...

Auriez vous une astuce pour solutionner mon problème ?

Merci d'avance pour votre aide




Bonjour,

Quand j'ai vu Form, sous Excel, j'ai tout de suite pensé à UserForm, et
puis un peu plus loin j'ai vu qu'il y avait des cellules. Il s'agit de
contrôles insérés sur une feuille de calcul, donc, j'imagine ?

Si j'ai bien lu, tu obtiens le fonctionnement décrit par le code de
MichDenis ? Et à la place tu voudrais obtenir le fonctionnement commandé
par l'allumage du témoin scroll, c'est-à-dire que l'élément sélectionné
reste sélectionné, mais que sa position à l'écran change ?

Il me semble qu'il faut regarder du côté de ActiveWindow.SmallScroll
d'une part, et de ActiveWindow.ScrollRow et ActiveWindow.ScrollColumn
d'autre part.

J'avais en tête un UpperLeftCell, mais apparemment, j'ai inventé.
Avatar
HD
Quand j'ai vu Form, sous Excel, j'ai tout de suite pensé à UserForm, et
puis un peu plus
loin j'ai vu qu'il y avait des cellules.


Je me suis mal exprimé... effectivement, il s'agit bien d'un UserForm.

--
@+
HD
Avatar
HD
Désolé si je me suis mal exprimé....
En fait, je suis bien sur un UserForm.

Exemple: J'appuis sur la touche "Entrée" ma macro est bien validée mais...
Le focus passe sur le control suivant alors que je voudrais le laisser sur
mon TextBox2. Et ce même avec l'utilisation de TextBox2.SetFocus

--
@+
HD
Avatar
HD
KeyCode = 0


Ouille... j'ai loupé ces lignes là... Effectivement, le KeyCode = 0 dans
l'événement TextBox2_KeyDown résoud le problème...

Merci à vous tous pour votre aide
--
@+
HD