OVH Cloud OVH Cloud

Donner le focus à un contrôle de feuille de calcul

25 réponses
Avatar
Corto
Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci

10 réponses

1 2 3
Avatar
anonymousA
Je ne vois pas comment activer des comboboxes peut les faire
disparaitre,mais peut-être peux-tu en dire plus ?
Par ailleurs, pour les controles de la BO controles inscrits dans des
feuilles, les habituelles propriétés ( Tabindex, Tabkeybehavior, ..)
rencontrées sur des userforms ne sont que de peu de secours. Il faut
utliser des artifices du style de ceux indiqués par Activate.

A+


Il s'agit du cas A, des ComboBoxes de la boîte à outils Contrôles.
Je cherche juste à donner le focus au contrôle suivant quand on tape sur
<TAB>. La méthode Activate, les fait disparaitre et la méthode Select,
les sélectionne en modification.
Cordialement

Corto

2 types de contrôles dans une feuille de calcul :

A ) Ceux émanant de la boîte d'outils "contrôle"
pour pour passer le focus -> exemple du bouton de commande
Worksheets("Feuil2").CommandButton1.Activate

B ) Cexu émanant de la barre d'outis formulaire :
Pour sélectionner un bouton de commande :
Worksheets("Feuil2").Shapes("Bouton 1").OLEFormat.Object.Select




"Corto" a écrit dans le message de news:
%
Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci





Avatar
anonymousA
cf mon post d'il y a très peu de temps. Ceci dit, comme tu le constates
, il serait peut-être plus judicieux de placer sur cjoint ton fichier
car je ne reproduis en rien ce que tu dis.

A+


Bonjour,
La méthode Activate, fait disparaitre les contrôles au lieu de leur
donner le focus.

Corto

Bonjour,

Que veux-tu dire par recevoir le focus ? Aller dessus, lui faire
déclencher une procédure evenmentielle qui y est attachée.
Les instructions suivantes sont à placer dans le module de feuille.

ci-dessous, pour acceder à un textbox de la BO controles qui est sur
la feuille
Me.TextBox1.Activate

ci-dessous, pour déclencher la proc evenementielle d'un commandbutton
de la BO controles qui est sur la feuille
Call CommandButton1_Click

A+


Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur
passer le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des
contrôles insérés directement dans la feuille de calcul.

Merci






Avatar
anonymousA
POur accéder aux propriétés d'un objet OLE en question ,il faut rajouter
.Object à ActiveSheet.OLEObjects.Item(XORDER)

donc

ActiveSheet.OLEObjects.Item(XORDER).Object.SetFocus car dans la
collection des OLEObjets, l'objet désigné par le N° XORDER est un objet
et il faut bien le désigner comme tel pour que du coup il épouse les
propriétés que VBA connait pour le type d'objet en question, propriétés
qui peuvent être différentes selon les objets.

Ceci dit Setfocus ne marchera pas plus car cette propriété est inconnue
pour ce type d'objet dans une feuile

A+

Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci
Pour mieux me faire comprendre, je vous envoie mon code initial :


Private Sub CBItem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then ' <TAB> ou <ENTER>
If Shift = 1 Then ' Sélectionner Contrôle précédent
XORDER = Choose(Me.Index, 6, 1, 2, 3, 4, 5)
Else ' Sélectionner Contrôle suivant
XORDER = Choose(Me.Index, 2, 3, 4, 5, 6, 1)
End If
ActiveSheet.OLEObjects.Item(XORDER).SetFocus
Et là j'ai un message "Propriété ou méthode non gérée par cet objet

End If
End Sub




Avatar
anonymousA
De plus, juste pour ma compréhension personnelle, peux-tu expliquer
pourquoi en fonction de index, tu choisis tel ou tel OLEObject ?. EN
effet, tel qu'écrit dans ta proc , c'est en fonction de la position de
la feuille ( position momentanée car si on bougle la feuille cette
position chnage) , dans la collection des feuilles ( propriété Index de
Me dont je suppose que le conteneur de l'objet donc Me est une feuille)
que tu chois tel ou tel N° d'OLEObject.

A+



POur accéder aux propriétés d'un objet OLE en question ,il faut rajouter
.Object à ActiveSheet.OLEObjects.Item(XORDER)

donc

ActiveSheet.OLEObjects.Item(XORDER).Object.SetFocus car dans la
collection des OLEObjets, l'objet désigné par le N° XORDER est un objet
et il faut bien le désigner comme tel pour que du coup il épouse les
propriétés que VBA connait pour le type d'objet en question, propriétés
qui peuvent être différentes selon les objets.

Ceci dit Setfocus ne marchera pas plus car cette propriété est inconnue
pour ce type d'objet dans une feuile

A+

Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur
passer le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des
contrôles insérés directement dans la feuille de calcul.

Merci
Pour mieux me faire comprendre, je vous envoie mon code initial :


Private Sub CBItem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then ' <TAB> ou <ENTER>
If Shift = 1 Then ' Sélectionner Contrôle précédent
XORDER = Choose(Me.Index, 6, 1, 2, 3, 4, 5)
Else ' Sélectionner Contrôle suivant
XORDER = Choose(Me.Index, 2, 3, 4, 5, 6, 1)
End If
ActiveSheet.OLEObjects.Item(XORDER).SetFocus
Et là j'ai un message "Propriété ou méthode non gérée par cet objet

End If
End Sub






Avatar
Corto
Effectivement je pensait que Me correspondait au contrôle qui a
déclenché l'événement.

De plus, juste pour ma compréhension personnelle, peux-tu expliquer
pourquoi en fonction de index, tu choisis tel ou tel OLEObject ?. EN
effet, tel qu'écrit dans ta proc , c'est en fonction de la position de
la feuille ( position momentanée car si on bougle la feuille cette
position chnage) , dans la collection des feuilles ( propriété Index de
Me dont je suppose que le conteneur de l'objet donc Me est une feuille)
que tu chois tel ou tel N° d'OLEObject.

A+



POur accéder aux propriétés d'un objet OLE en question ,il faut
rajouter .Object à ActiveSheet.OLEObjects.Item(XORDER)

donc

ActiveSheet.OLEObjects.Item(XORDER).Object.SetFocus car dans la
collection des OLEObjets, l'objet désigné par le N° XORDER est un
objet et il faut bien le désigner comme tel pour que du coup il épouse
les propriétés que VBA connait pour le type d'objet en question,
propriétés qui peuvent être différentes selon les objets.

Ceci dit Setfocus ne marchera pas plus car cette propriété est
inconnue pour ce type d'objet dans une feuile

A+

Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur
passer le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des
contrôles insérés directement dans la feuille de calcul.

Merci
Pour mieux me faire comprendre, je vous envoie mon code initial :


Private Sub CBItem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then ' <TAB> ou <ENTER>
If Shift = 1 Then ' Sélectionner Contrôle précédent
XORDER = Choose(Me.Index, 6, 1, 2, 3, 4, 5)
Else ' Sélectionner Contrôle suivant
XORDER = Choose(Me.Index, 2, 3, 4, 5, 6, 1)
End If
ActiveSheet.OLEObjects.Item(XORDER).SetFocus
Et là j'ai un message "Propriété ou méthode non gérée par cet objet

End If
End Sub








Avatar
Corto
Bonjour,
J'ai mis le fichier sur sendspace car il était trop volumineux pour
cjoint même après que j'ai supprimé les données
tu constatera que les contrôles disparaissent quand on les active, ils
réapparaissent quand on clique ailleurs dans la feuille. J'ai essayé de
mettre leur Visible = true après Activate mais ça ne fait rien.

Voici le coupable : http://www.sendspace.com/file/zmnm5i

Corto

cf mon post d'il y a très peu de temps. Ceci dit, comme tu le constates
, il serait peut-être plus judicieux de placer sur cjoint ton fichier
car je ne reproduis en rien ce que tu dis.

A+


Bonjour,
La méthode Activate, fait disparaitre les contrôles au lieu de leur
donner le focus.

Corto

Bonjour,

Que veux-tu dire par recevoir le focus ? Aller dessus, lui faire
déclencher une procédure evenmentielle qui y est attachée.
Les instructions suivantes sont à placer dans le module de feuille.

ci-dessous, pour acceder à un textbox de la BO controles qui est sur
la feuille
Me.TextBox1.Activate

ci-dessous, pour déclencher la proc evenementielle d'un commandbutton
de la BO controles qui est sur la feuille
Call CommandButton1_Click

A+


Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur
passer le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des
contrôles insérés directement dans la feuille de calcul.

Merci








Avatar
Corto
Je ne comprend pas non plus pourquoi mais ils disparaissent bien, tu
pourra d'ailleurs le constater en téléchargeant le fichier
http://www.sendspace.com/file/zmnm5i. Cliquer ailleurs dans la feuille
les fait réapparaitre, j'ai essayé visible = true après l'activation
mais ca ne fait rien

Corto

Je ne vois pas comment activer des comboboxes peut les faire
disparaitre,mais peut-être peux-tu en dire plus ?
Par ailleurs, pour les controles de la BO controles inscrits dans des
feuilles, les habituelles propriétés ( Tabindex, Tabkeybehavior, ..)
rencontrées sur des userforms ne sont que de peu de secours. Il faut
utliser des artifices du style de ceux indiqués par Activate.

A+


Il s'agit du cas A, des ComboBoxes de la boîte à outils Contrôles.
Je cherche juste à donner le focus au contrôle suivant quand on tape
sur <TAB>. La méthode Activate, les fait disparaitre et la méthode
Select, les sélectionne en modification.
Cordialement

Corto

2 types de contrôles dans une feuille de calcul :

A ) Ceux émanant de la boîte d'outils "contrôle"
pour pour passer le focus -> exemple du bouton de commande
Worksheets("Feuil2").CommandButton1.Activate

B ) Cexu émanant de la barre d'outis formulaire :
Pour sélectionner un bouton de commande :
Worksheets("Feuil2").Shapes("Bouton 1").OLEFormat.Object.Select




"Corto" a écrit dans le message de news:
%
Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci







Avatar
MichDenis
J'ai ouvert ton fichier, et tes combobox ne disparaissent pas !!!

Exemple pour activer le premier combobox, le premier à gauche de ta feuille.

A ) Cette macro doit être appelé à partir de l'interface de la feuille de calcul.
B ) Cette procédure active le premier combobox et ouvre la liste déroulante.

'-------------------
Sub test()
With Feuil1.CBItem
.Activate
SendKeys "%{up}"
End With
End Sub
'-------------------


"Corto" a écrit dans le message de news:

Je ne comprend pas non plus pourquoi mais ils disparaissent bien, tu
pourra d'ailleurs le constater en téléchargeant le fichier
http://www.sendspace.com/file/zmnm5i. Cliquer ailleurs dans la feuille
les fait réapparaitre, j'ai essayé visible = true après l'activation
mais ca ne fait rien

Corto

Je ne vois pas comment activer des comboboxes peut les faire
disparaitre,mais peut-être peux-tu en dire plus ?
Par ailleurs, pour les controles de la BO controles inscrits dans des
feuilles, les habituelles propriétés ( Tabindex, Tabkeybehavior, ..)
rencontrées sur des userforms ne sont que de peu de secours. Il faut
utliser des artifices du style de ceux indiqués par Activate.

A+


Il s'agit du cas A, des ComboBoxes de la boîte à outils Contrôles.
Je cherche juste à donner le focus au contrôle suivant quand on tape
sur <TAB>. La méthode Activate, les fait disparaitre et la méthode
Select, les sélectionne en modification.
Cordialement

Corto

2 types de contrôles dans une feuille de calcul :

A ) Ceux émanant de la boîte d'outils "contrôle"
pour pour passer le focus -> exemple du bouton de commande
Worksheets("Feuil2").CommandButton1.Activate

B ) Cexu émanant de la barre d'outis formulaire :
Pour sélectionner un bouton de commande :
Worksheets("Feuil2").Shapes("Bouton 1").OLEFormat.Object.Select




"Corto" a écrit dans le message de news:
%
Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci







Avatar
Corto
Ca doit être un pb dans ma config alors, quand j'ajoute le sendkeys
comme tu l'as envoyé la dropdown list apparait bien mais la textzone est
invisible. quand je mets sendkeys "X" par exemple, la textzone apparaît,
le problème c'est que ça me modifie la sélection. Tout cela est bien
étrange !!!;-)
Merci de t'être intéressé au pb.

Cordialement
Corto

J'ai ouvert ton fichier, et tes combobox ne disparaissent pas !!!

Exemple pour activer le premier combobox, le premier à gauche de ta feuille.

A ) Cette macro doit être appelé à partir de l'interface de la feuille de calcul.
B ) Cette procédure active le premier combobox et ouvre la liste déroulante.

'-------------------
Sub test()
With Feuil1.CBItem
.Activate
SendKeys "%{up}"
End With
End Sub
'-------------------


"Corto" a écrit dans le message de news:

Je ne comprend pas non plus pourquoi mais ils disparaissent bien, tu
pourra d'ailleurs le constater en téléchargeant le fichier
http://www.sendspace.com/file/zmnm5i. Cliquer ailleurs dans la feuille
les fait réapparaitre, j'ai essayé visible = true après l'activation
mais ca ne fait rien

Corto

Je ne vois pas comment activer des comboboxes peut les faire
disparaitre,mais peut-être peux-tu en dire plus ?
Par ailleurs, pour les controles de la BO controles inscrits dans des
feuilles, les habituelles propriétés ( Tabindex, Tabkeybehavior, ..)
rencontrées sur des userforms ne sont que de peu de secours. Il faut
utliser des artifices du style de ceux indiqués par Activate.

A+


Il s'agit du cas A, des ComboBoxes de la boîte à outils Contrôles.
Je cherche juste à donner le focus au contrôle suivant quand on tape
sur <TAB>. La méthode Activate, les fait disparaitre et la méthode
Select, les sélectionne en modification.
Cordialement

Corto

2 types de contrôles dans une feuille de calcul :

A ) Ceux émanant de la boîte d'outils "contrôle"
pour pour passer le focus -> exemple du bouton de commande
Worksheets("Feuil2").CommandButton1.Activate

B ) Cexu émanant de la barre d'outis formulaire :
Pour sélectionner un bouton de commande :
Worksheets("Feuil2").Shapes("Bouton 1").OLEFormat.Object.Select




"Corto" a écrit dans le message de news:
%
Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur passer
le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des contrôles
insérés directement dans la feuille de calcul.

Merci











Avatar
anonymousA
OK, je constate la même chose que toi avec ton fichier. Je n'ai pas
d'explication rationnelle à te fournir. Ce phénomène m'est déjà arrivé
sous une autre forme avec des Listboxes mais en général,il suffit de
cliquer quelque part sur la feuille pour écupérer les controles. Par
ailleurs, on peumême planter Excel ce qui m'est arrivé 2 fois avec ton
fichier.
Je suppose qu'il y a incompatibilité d'humeur entre les OLEObjects et
Excel dans ce cas de figure ou une configuration ou version d'Excel qui
ne convient pas à ce régime.La manipulation des OLEObjects ( notamment
la construction par programme des programmes de procs evenementielles à
la volée ) est parfois riquée, je l'ai appris à mes dépends.
Nonobstant , ce que t'a proposé Mich Denis , à savoir l'utilisation
SendKeys , est un workaround possible.Il fonctionne pour moi bien que
quelques limitations soient toujours présentes, à savoir que les lignes
de l'objet restent effacées,mais on accède bien à l'objet.

Désolé de ne pouvoir trouver LA solution.

A+

Bonjour,
J'ai mis le fichier sur sendspace car il était trop volumineux pour
cjoint même après que j'ai supprimé les données
tu constatera que les contrôles disparaissent quand on les active, ils
réapparaissent quand on clique ailleurs dans la feuille. J'ai essayé de
mettre leur Visible = true après Activate mais ça ne fait rien.

Voici le coupable : http://www.sendspace.com/file/zmnm5i

Corto

cf mon post d'il y a très peu de temps. Ceci dit, comme tu le
constates , il serait peut-être plus judicieux de placer sur cjoint
ton fichier car je ne reproduis en rien ce que tu dis.

A+


Bonjour,
La méthode Activate, fait disparaitre les contrôles au lieu de leur
donner le focus.

Corto

Bonjour,

Que veux-tu dire par recevoir le focus ? Aller dessus, lui faire
déclencher une procédure evenmentielle qui y est attachée.
Les instructions suivantes sont à placer dans le module de feuille.

ci-dessous, pour acceder à un textbox de la BO controles qui est sur
la feuille
Me.TextBox1.Activate

ci-dessous, pour déclencher la proc evenementielle d'un
commandbutton de la BO controles qui est sur la feuille
Call CommandButton1_Click

A+


Bonjour Forum,
Quand on utilise des contrôles dans un "userform", on peut leur
passer le focus à l'aide de la méthode "SetFocus".
Je n'arrive pas à trouver la méthode correspondante pour des
contrôles insérés directement dans la feuille de calcul.

Merci










1 2 3