[VBA] Problème avec SetFocus

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
isabelle
Le #23268321
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

MichD
Le #23268731
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
--------------------------------------------
Gloops
Le #23272321
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é.
MichD
Le #23273151
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é.
HD
Le #23275161
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
HD
Le #23275201
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
HD
Le #23275221
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
Publicité
Poster une réponse
Anonyme