OVH Cloud OVH Cloud

trouver le focus...

26 réponses
Avatar
greg
bonjour,
comment d=E9terminer quel contr=F4le a le focus dans une feuille excel en
vba ?
(pas une form, une worksheet classique... et typiquement, parmi des
contr=F4les activex genre boutons)

merci !!

10 réponses

1 2 3
Avatar
MichDenis
| c'est possible en passant par un module de classe pour
| des contrôle mit sur un UserForm, mais pas sur une feuille,

Regarde ceci :
http://cjoint.com/?glosxnriE0
Avatar
MichDenis
Bonjour Daniel,

As-tu essayé d'ouvrir le fichier que tu as publié ?



"Daniel.C" a écrit dans le message de groupe de discussion :

Regarde le classeur ci-dessous; il te permet de récupérer le caption du
bouton sur lequel tu cliques :
http://www.cijoint.fr/cjlink.php?file=cj200906/cijGmWcFAv.xlsm
Daniel

salut,
merci de ta réponse.

- j'entends par "une feuille excel en vba" en fait simplement que je
travaille sur un workbook excel, dans un onglet donné, que j'ai des
boutons activex dans cette feuille, et que la solution que je cherche
est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur une
Form ni en VB .NET...
- pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
Je cherche à avoir le nom du bouton où je suis également, et je me dis
que je peux le trouver en ayant celui qui a le focus.
mon envie derrière est de lancer une macro en passant l'identité du
bouton appelant, pour que celle ci réagisse en fonction du bouton
cliqué.
Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
fonction qui fasse cela.

Je voulais utiliser une fonction qui me donne le nom de la procédure
en cours pour atteindre mon objectif mais les bouts de code trouvés
sur le net ne marchent pas bien, ils donnent le nom de la procédure
actuelle où se trouve le curseur ds la fenetre VBA.

J'espère que c'est un peu plus clair...

merci d'avance

On 10 juin, 21:01, LSteph wrote:
bonjour,

Un bouton a le focus généralement quand d'une façon ou d'une autre on
vient de l'activer.. Cela présage donc qu'on sache très bien lequel!

aussi selont ce que tu entends par focus , qui au vu du nombre de
réponses qui affluent ...ne semble pas susciter une même compréhension
de tous peux tu préciser et aussi en dire un peu plus sur le contexte
et l'objectif...

Qu'entends tu également par

une feuille excel en vba



?

@+

--
lSteph

greg a écrit :

bonjour,
comment déterminer quel contrôle a le focus dans une feuille excel en
vba ?
(pas une form, une worksheet classique... et typiquement, parmi des
contrôles activex genre boutons)



merci !!






Avatar
isabelle
bonjour Denis,

ok merci,
mais si j'ajoute une 2ème feuille avec 2 CommandButton, ça ne fonctionne
pas pour cette nouvelle feuille ?

isabelle

MichDenis a écrit :
| c'est possible en passant par un module de classe pour
| des contrôle mit sur un UserForm, mais pas sur une feuille,

Regarde ceci :
http://cjoint.com/?glosxnriE0






Avatar
Daniel.C
Bonjour Denis.
Désolé :
http://www.cijoint.fr/cjlink.php?file=cj200906/cij1LRaJ57.xls
Daniel

Bonjour Daniel,

As-tu essayé d'ouvrir le fichier que tu as publié ?



"Daniel.C" a écrit dans le message de groupe de
discussion :
Regarde le classeur ci-dessous; il te permet de récupérer le caption du
bouton sur lequel tu cliques :
http://www.cijoint.fr/cjlink.php?file=cj200906/cijGmWcFAv.xlsm
Daniel

salut,
merci de ta réponse.

- j'entends par "une feuille excel en vba" en fait simplement que je
travaille sur un workbook excel, dans un onglet donné, que j'ai des
boutons activex dans cette feuille, et que la solution que je cherche
est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur une
Form ni en VB .NET...
- pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
Je cherche à avoir le nom du bouton où je suis également, et je me dis
que je peux le trouver en ayant celui qui a le focus.
mon envie derrière est de lancer une macro en passant l'identité du
bouton appelant, pour que celle ci réagisse en fonction du bouton
cliqué.
Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
fonction qui fasse cela.

Je voulais utiliser une fonction qui me donne le nom de la procédure
en cours pour atteindre mon objectif mais les bouts de code trouvés
sur le net ne marchent pas bien, ils donnent le nom de la procédure
actuelle où se trouve le curseur ds la fenetre VBA.

J'espère que c'est un peu plus clair...

merci d'avance

On 10 juin, 21:01, LSteph wrote:
bonjour,

Un bouton a le focus généralement quand d'une façon ou d'une autre on
vient de l'activer.. Cela présage donc qu'on sache très bien lequel!

aussi selont ce que tu entends par focus , qui au vu du nombre de
réponses qui affluent ...ne semble pas susciter une même compréhension
de tous peux tu préciser et aussi en dire un peu plus sur le contexte
et l'objectif...

Qu'entends tu également par

une feuille excel en vba



?

@+

--
lSteph

greg a écrit :

bonjour,
comment déterminer quel contrôle a le focus dans une feuille excel en
vba ?
(pas une form, une worksheet classique... et typiquement, parmi des
contrôles activex genre boutons)



merci !!








Avatar
MichDenis
| mais si j'ajoute une 2ème feuille avec 2 CommandButton,
| ça ne fonctionne pas pour cette nouvelle feuille ?

Le code a été écrit pour les contrôles "CommandButton"
appartenant à la feuil1. Selon les besoins d'une application,
on peut adapter le code ... non ?

Lorsqu'une instance d'une classe objet a été instanciée, seules
les objets ayant été définis comme appartenant à cette classe
sont affectés par le code. Si tu ajoutes des boutons de
commande par la suite, ces derniers ne s'ajoutent pas d'eux-mêmes
dans la nouvelle classe.
Avatar
isabelle
bonjour Denis,

c'est tout bon, merci,
j'essayais avec une 2ème feuille mais j'oubliais de déclancher
l'événement Workbook_SheetActivate
pour forcer l'execution de GroupeBoutons,

isabelle


MichDenis a écrit :
| c'est possible en passant par un module de classe pour
| des contrôle mit sur un UserForm, mais pas sur une feuille,

Regarde ceci :
http://cjoint.com/?glosxnriE0






Avatar
Daniel.C
Ceci dit, les fichiers xlsm se présentent comme des fichiers zip. Si tu
as XL2007 bien sûr, tu peux les ouvrir normalement dans Excel.
Daniel

Bonjour Daniel,

As-tu essayé d'ouvrir le fichier que tu as publié ?



"Daniel.C" a écrit dans le message de groupe de
discussion :
Regarde le classeur ci-dessous; il te permet de récupérer le caption du
bouton sur lequel tu cliques :
http://www.cijoint.fr/cjlink.php?file=cj200906/cijGmWcFAv.xlsm
Daniel

salut,
merci de ta réponse.

- j'entends par "une feuille excel en vba" en fait simplement que je
travaille sur un workbook excel, dans un onglet donné, que j'ai des
boutons activex dans cette feuille, et que la solution que je cherche
est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur une
Form ni en VB .NET...
- pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
Je cherche à avoir le nom du bouton où je suis également, et je me dis
que je peux le trouver en ayant celui qui a le focus.
mon envie derrière est de lancer une macro en passant l'identité du
bouton appelant, pour que celle ci réagisse en fonction du bouton
cliqué.
Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
fonction qui fasse cela.

Je voulais utiliser une fonction qui me donne le nom de la procédure
en cours pour atteindre mon objectif mais les bouts de code trouvés
sur le net ne marchent pas bien, ils donnent le nom de la procédure
actuelle où se trouve le curseur ds la fenetre VBA.

J'espère que c'est un peu plus clair...

merci d'avance

On 10 juin, 21:01, LSteph wrote:
bonjour,

Un bouton a le focus généralement quand d'une façon ou d'une autre on
vient de l'activer.. Cela présage donc qu'on sache très bien lequel!

aussi selont ce que tu entends par focus , qui au vu du nombre de
réponses qui affluent ...ne semble pas susciter une même compréhension
de tous peux tu préciser et aussi en dire un peu plus sur le contexte
et l'objectif...

Qu'entends tu également par

une feuille excel en vba



?

@+

--
lSteph

greg a écrit :

bonjour,
comment déterminer quel contrôle a le focus dans une feuille excel en
vba ?
(pas une form, une worksheet classique... et typiquement, parmi des
contrôles activex genre boutons)



merci !!








Avatar
isabelle
c'est bon, merci Daniel

isabelle

Daniel.C a écrit :
Bonjour Denis.
Désolé :
http://www.cijoint.fr/cjlink.php?file=cj200906/cij1LRaJ57.xls
Daniel

Bonjour Daniel,

As-tu essayé d'ouvrir le fichier que tu as publié ?



"Daniel.C" a écrit dans le message de
groupe de discussion :
Regarde le classeur ci-dessous; il te permet de récupérer le caption du
bouton sur lequel tu cliques :
http://www.cijoint.fr/cjlink.php?file=cj200906/cijGmWcFAv.xlsm
Daniel

salut,
merci de ta réponse.

- j'entends par "une feuille excel en vba" en fait simplement que je
travaille sur un workbook excel, dans un onglet donné, que j'ai des
boutons activex dans cette feuille, et que la solution que je cherche
est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur une
Form ni en VB .NET...
- pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
Je cherche à avoir le nom du bouton où je suis également, et je me dis
que je peux le trouver en ayant celui qui a le focus.
mon envie derrière est de lancer une macro en passant l'identité du
bouton appelant, pour que celle ci réagisse en fonction du bouton
cliqué.
Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
fonction qui fasse cela.

Je voulais utiliser une fonction qui me donne le nom de la procédure
en cours pour atteindre mon objectif mais les bouts de code trouvés
sur le net ne marchent pas bien, ils donnent le nom de la procédure
actuelle où se trouve le curseur ds la fenetre VBA.

J'espère que c'est un peu plus clair...

merci d'avance

On 10 juin, 21:01, LSteph wrote:
bonjour,

Un bouton a le focus généralement quand d'une façon ou d'une autre on
vient de l'activer.. Cela présage donc qu'on sache très bien lequel!

aussi selont ce que tu entends par focus , qui au vu du nombre de
réponses qui affluent ...ne semble pas susciter une même compréhension
de tous peux tu préciser et aussi en dire un peu plus sur le
contexte
et l'objectif...

Qu'entends tu également par

une feuille excel en vba



?

@+

--
lSteph

greg a écrit :

bonjour,
comment déterminer quel contrôle a le focus dans une feuille excel en
vba ?
(pas une form, une worksheet classique... et typiquement, parmi des
contrôles activex genre boutons)



merci !!












Avatar
LSteph
Bonjour,

Il te faut un module de classe et une seule procèdure

Voilà le principe pour un userform,
je regarde pour l'adapter à une feuille

''''''''''''''''''
'dans ClassBtn
Public WithEvents MonBtn As MSForms.CommandButton
Private Sub MonBtn_Click()
[A1] = MonBtn.Caption


End Sub


'''''''''''''
'dans Userform1


Private MesBtn() As New ClassBtn
Private Sub UserForm_Initialize()
Dim clt As Control, I&
For Each clt In Me.Controls
If TypeName(clt) = "CommandButton" Then


ReDim Preserve MesBtn(0 To I)
Set MesBtn(I).MonBtn = clt
I = I + 1
End If
Next clt
End Sub
Private Sub UserForm_Terminate()
Dim I&
For I = 0& To UBound(MesBtn)
Set MesBtn(I) = Nothing
Next I
End Sub
'''''''''''''''


'lSteph

On 11 juin, 11:30, greg wrote:
salut,
merci de ta réponse.

- j'entends par "une feuille excel en vba" en fait simplement que je
travaille sur un workbook excel, dans un onglet donné, que j'ai des
boutons activex dans cette feuille, et que la solution que je cherche
est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur une
Form ni en VB .NET...
- pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
Je cherche à avoir le nom du bouton où je suis également, et je me dis
que je peux le trouver en ayant celui qui a le focus.
mon envie derrière est de lancer une macro en passant l'identité du
bouton appelant, pour que celle ci réagisse en fonction du bouton
cliqué.
Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
fonction qui fasse cela.

Je voulais utiliser une fonction qui me donne le nom de la procédure
en cours pour atteindre mon objectif mais les bouts de code trouvés
sur le net ne marchent pas bien, ils donnent le nom de la procédure
actuelle où se trouve le curseur ds la fenetre VBA.

J'espère que c'est un peu plus clair...

merci d'avance

On 10 juin, 21:01, LSteph wrote:



> bonjour,

> Un bouton a le focus généralement quand d'une façon ou d'une autr e on
> vient de l'activer.. Cela présage donc qu'on sache très bien lequel !

> aussi selont ce que tu entends par focus , qui au vu du nombre de
> réponses qui affluent ...ne semble pas susciter une même compréhe nsion
> de tous peux tu préciser et aussi  en dire  un peu plus sur le co ntexte
> et l'objectif...

> Qu'entends tu également par

> > une feuille excel en vba

> ?

> @+

> --
> lSteph

> greg a écrit :

> > bonjour,
> > comment déterminer quel contrôle a le focus dans une feuille exce l en
> > vba ?
> > (pas une form, une worksheet classique... et typiquement, parmi des
> > contrôles activex genre boutons)

> > merci !!- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


Avatar
LSteph
Bonjour,

(sauf si tu n'es pas le même Greg)
tu as le principe dans ce que je t'avais fait pour ton emploi du
temps
Voici un exemple simple tu nomme un module de Classe ClassBtn
Ensuite on utilisele workbook_open pour initialiser la classe,
un module standard pour l'essentiel
et un appel dans le code de la feuille ce qui donne
'Respectivement

' dans thisworkbook

Option Explicit

Private Sub Workbook_Open()
Call InitCButtons
End Sub


' dans le module de classe ClassBtn


Option Explicit


Public WithEvents myButs As CommandButton


Private Sub myButs_Click()
Feuil1.Activate 'uniquement pour 97

MsgBox myButs.Caption

End Sub

' dans un module standard
Option Explicit


Dim CButtons() As ClassBtn


Sub InitCButtons()
Dim myB As OLEObject, CmdB As MSForms.CommandButton
Dim i As Integer
For Each myB In Feuil1.OLEObjects
If TypeOf myB.Object Is CommandButton Then
i = i + 1
ReDim Preserve CButtons(1 To i)
Set CButtons(i) = New ClassBtn
Set CButtons(i).myButs = myB.Object
End If
Next myB
End Sub


'dans Feuil1


Option Explicit


Private Sub Worksheet_Activate()
Call InitCButtons
End Sub




On 11 juin, 15:04, LSteph wrote:
Bonjour,

Il te faut un module de classe et une seule procèdure

Voilà le principe pour un userform,
je regarde pour l'adapter à une feuille

''''''''''''''''''
'dans ClassBtn
Public WithEvents MonBtn As MSForms.CommandButton
Private Sub MonBtn_Click()
[A1] = MonBtn.Caption

End Sub

'''''''''''''
'dans Userform1

Private MesBtn() As New ClassBtn
Private Sub UserForm_Initialize()
     Dim clt As Control, I&
     For Each clt In Me.Controls
         If TypeName(clt) = "CommandButton" Then

             ReDim Preserve MesBtn(0 To I)
             Set MesBtn(I).MonBtn = clt
             I = I + 1
         End If
     Next clt
End Sub
Private Sub UserForm_Terminate()
     Dim I&
     For I = 0& To UBound(MesBtn)
         Set MesBtn(I) = Nothing
     Next I
End Sub
'''''''''''''''

'lSteph

On 11 juin, 11:30, greg wrote:



> salut,
> merci de ta réponse.

> - j'entends par "une feuille excel en vba" en fait simplement que je
> travaille sur un workbook excel, dans un onglet donné, que j'ai des
> boutons activex dans cette feuille, et que la solution que je cherche
> est à intégrer ds le code VBA de ce workbook. Je ne suis pas sur un e
> Form ni en VB .NET...
> - pour préciser mon besoin, par ex ds la macro CommandButton1_Click()
> je peux utiliser l'objet Me pour avoir le nom de l'onglet où je suis.
> Je cherche à avoir le nom du bouton où je suis également, et je m e dis
> que je peux le trouver en ayant celui qui a le focus.
> mon envie derrière est de lancer une macro en passant l'identité du
> bouton appelant, pour que celle ci réagisse en fonction du bouton
> cliqué.
> Evidemment, je peux mettre en dur ds CommandButton1_Click() le fait
> que c'est "CommandButton1" qui appelle, mais je cherchais plutot une
> fonction qui fasse cela.

> Je voulais utiliser une fonction qui me donne le nom de la procédure
> en cours pour atteindre mon objectif mais les bouts de code trouvés
> sur le net ne marchent pas bien, ils donnent le nom de la procédure
> actuelle où se trouve le curseur ds la fenetre VBA.

> J'espère que c'est un peu plus clair...

> merci d'avance

> On 10 juin, 21:01, LSteph wrote:

> > bonjour,

> > Un bouton a le focus généralement quand d'une façon ou d'une au tre on
> > vient de l'activer.. Cela présage donc qu'on sache très bien lequ el!

> > aussi selont ce que tu entends par focus , qui au vu du nombre de
> > réponses qui affluent ...ne semble pas susciter une même compré hension
> > de tous peux tu préciser et aussi  en dire  un peu plus sur le contexte
> > et l'objectif...

> > Qu'entends tu également par

> > > une feuille excel en vba

> > ?

> > @+

> > --
> > lSteph

> > greg a écrit :

> > > bonjour,
> > > comment déterminer quel contrôle a le focus dans une feuille ex cel en
> > > vba ?
> > > (pas une form, une worksheet classique... et typiquement, parmi des
> > > contrôles activex genre boutons)

> > > merci !!- Masquer le texte des messages précédents -

> - Afficher le texte des messages précédents -- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


1 2 3