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

5 réponses

1 2 3
Avatar
Corto
Effectivement à part sacrifier une vierge à Bilou pour exorciser mon
fichier (mais j'en connais peu et je me les garde), je ne vois que ce
workaround. Avec SendKeys "*{BS}", les lignes restent toutes affichées
sauf dans une des colonnes ou j'ai des données qui commencent par '*'.

Merci du temps passé sur mon problème.
Cordialement

Corto


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












Avatar
isabelle
bonjourv Corto et anonymousA,

effectivement c'est très curieux ce problème,
si on modifi la propriété EnterFieldBehavior et que l'on exécute la macro tout va bien
si on exécute la macro une seconde fois, ça ne va plus,
il faut basculer de 0 à 1 ou de 1 à 0 chaque fois avant d'exécuter la macro pour que cela fonctionne.

isabelle

Effectivement à part sacrifier une vierge à Bilou pour exorciser mon
fichier (mais j'en connais peu et je me les garde), je ne vois que ce
workaround. Avec SendKeys "*{BS}", les lignes restent toutes affichées
sauf dans une des colonnes ou j'ai des données qui commencent par '*'.

Merci du temps passé sur mon problème.
Cordialement

Corto



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














Avatar
anonymousA
Bonjour, Isabelle

D'autant plus curieux que je ne vois pas ce que cette propriété implique
dans cette configuration si ce n'est son rapport avec l'utiliastion de
la touche TAB pour accéder au contrôle.
Affaire à suivre.

A+


bonjourv Corto et anonymousA,

effectivement c'est très curieux ce problème,
si on modifi la propriété EnterFieldBehavior et que l'on exécute la
macro tout va bien
si on exécute la macro une seconde fois, ça ne va plus,
il faut basculer de 0 à 1 ou de 1 à 0 chaque fois avant d'exécuter la
macro pour que cela fonctionne.

isabelle

Effectivement à part sacrifier une vierge à Bilou pour exorciser mon
fichier (mais j'en connais peu et je me les garde), je ne vois que ce
workaround. Avec SendKeys "*{BS}", les lignes restent toutes affichées
sauf dans une des colonnes ou j'ai des données qui commencent par '*'.

Merci du temps passé sur mon problème.
Cordialement

Corto



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
















Avatar
anonymousA
Effectivement comme le signalait Isabelle, le fait d'écrire
successivement deux changements de la propriété EnterFieldBehavior
permet de réaliser ce que tu demandes et ce à chaque fois sans se
planter du moins chez moi. Mais pourquoi, ca reste un mystère ?

Private Sub CBItem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
If Shift = 1 Then
XORDER = Choose(CBItem.Index, 6, 1, 2, 3, 4, 5)
Else
XORDER = Choose(CBItem.Index, 2, 3, 4, 5, 6, 1)
End If
ActiveSheet.OLEObjects.Item(XORDER).Object.EnterFieldBehavior = 0
ActiveSheet.OLEObjects.Item(XORDER).Object.EnterFieldBehavior = 1
ActiveSheet.OLEObjects.Item(XORDER).Activate
End If
End Sub

A+

Effectivement à part sacrifier une vierge à Bilou pour exorciser mon
fichier (mais j'en connais peu et je me les garde), je ne vois que ce
workaround. Avec SendKeys "*{BS}", les lignes restent toutes affichées
sauf dans une des colonnes ou j'ai des données qui commencent par '*'.

Merci du temps passé sur mon problème.
Cordialement

Corto


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














Avatar
anonymousA
Et pour terminer mais toujours dans la même veine, pour le controle
Checkbox p.e
ActiveSheet.OLEObjects.Item(XORDER).Object.value = Not
ActiveSheet.OLEObjects.Item(XORDER).Object.value

à répeter 2 fois pour permettre au contrôle de rester à la valeur qu'il
avait avant d'être activé.

A+

Effectivement comme le signalait Isabelle, le fait d'écrire
successivement deux changements de la propriété EnterFieldBehavior
permet de réaliser ce que tu demandes et ce à chaque fois sans se
planter du moins chez moi. Mais pourquoi, ca reste un mystère ?

Private Sub CBItem_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
ByVal Shift As Integer)
If KeyCode = 13 Or KeyCode = 9 Then
If Shift = 1 Then
XORDER = Choose(CBItem.Index, 6, 1, 2, 3, 4, 5)
Else
XORDER = Choose(CBItem.Index, 2, 3, 4, 5, 6, 1)
End If
ActiveSheet.OLEObjects.Item(XORDER).Object.EnterFieldBehavior = 0
ActiveSheet.OLEObjects.Item(XORDER).Object.EnterFieldBehavior = 1
ActiveSheet.OLEObjects.Item(XORDER).Activate
End If
End Sub

A+

Effectivement à part sacrifier une vierge à Bilou pour exorciser mon
fichier (mais j'en connais peu et je me les garde), je ne vois que ce
workaround. Avec SendKeys "*{BS}", les lignes restent toutes affichées
sauf dans une des colonnes ou j'ai des données qui commencent par '*'.

Merci du temps passé sur mon problème.
Cordialement

Corto


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