none
Clic sur un OptionButton qui fait partie d'une Frame ActiveX RRS feed

  • Question

  • Bonjour,

    J'ai un fichier Excel avec 1 feuille.

    Dans cette feuille j'ai un contrôle ActiveX de type frame Microsoft Forms 2.0.

    Sur inséré dans cette frame, 4 OptionButtons.

    Je cherche à créer une procédure événementielle qui se déclencherait au clic simple sur un OptionButton de cette frame ActiveX.

    Je n'ai pas trouvé de procédure existante (du genre _Click) pour réagir au clic sur l'OptionButton de MaFrame.

    (Cette question ressemble à l'une que j'ai déjà posée mais est bien différente).

    N'hésitez pas à me demander des détails.

    Merci d'avance pour votre aide.

    Cdt.

    lundi 25 avril 2016 15:04

Réponses

  • Bonjour,

    La frame est l'OLEObject 38. J'ai transféré la macro CreerClasse dans le module "Module2" (il est appelé à un autre moment) dans Worksheet_Activate de la feuille "Thursday"). Les noms des option buttons ne commencent pas par "OptionB". J'ai remplacé le test sur le nom par le test sur le type :

    Dim GroupeOB() As New MesOB
    Public Sub CreerClasse()
    Dim c As Control, i As Integer
    For Each c In Sheets("Thursday").OLEObjects(38).Object.Controls
    '    If Left(c.Name, 7) = "OptionB" Then
        If TypeName(c) = "OptionButton" Then
            ReDim Preserve GroupeOB(i)
            Set GroupeOB(i).OB = c
            i = i + 1
        End If
    Next
    End Sub
    

    et ça fonctionne ! Voici l'adresse du classeur :

    https://onedrive.live.com/redir?resid=96D5842B14D14FA4!8020&authkey=!ACsN-z-ArYwy0II&ithint=file%2cxlsm

    Daniel

    • Marqué comme réponse Newworld92 lundi 9 mai 2016 14:49
    jeudi 5 mai 2016 13:23

Toutes les réponses

  • Bonjour,

    Il faut passer par un module de classe. Je ne suis pas trop à l'aise avec. Donc, je me contente de modifier mes modèles pour les faire fonctionner. Dans le classeur dont le lien suit, il faut commencer par exécuter la macro "CreeClasse" à l'ouverture du classeur ou à l'activation de la feuille.

    Public Sub CreerClasse()
    Dim c As Control, i As Integer
    For Each c In ActiveSheet.OLEObjects(1).Object.Controls
        If Left(c.Name, 7) = "OptionB" Then
            ReDim Preserve GroupeOB(i)
            Set GroupeOB(i).OB = c
            i = i + 1
        End If
    Next
    End Sub

    Tu mettras la macro à utiliser à la place du MsgBox :

    Private Sub OB_Click()
    MsgBox OB.Caption
    End Sub
    

    Actuellement, la macro affiche seulement le caption du bouton cliqué.

    https://www.dropbox.com/s/0gjmuavunuyav36/160425.xlsm?dl=0

    Cordialement.

    Daniel


     

    lundi 25 avril 2016 16:39
  • Bonjour,

    Il y a bien une procédure évènementielle "_click" pour le contrôle "Frame" et une pour chaque contrôles "OptionButton".

    Pour accéder au code, il suffit de faire un clic-droit sur l'un des contrôle puis cliquer sur "Code".

    Si vous souhaitez que l'application réagisse sur le clic d'un des contrôles, il faudra lui ajouter la procédure évènementielle. si vous avez un groupe de 10 options il faudra saisir 10 procédures si vous souhaitez que l'appli. réagisse au clic sur n'importe quelle option parmi les 10.

    Si vous ajoutez une procédure au contrôle "Frame", elle ne sera capturée que si vous cliquez sur le contrôle (le cadre) mais pas si vous cliquez sur les contrôles à l'intérieure du cadre car au survol de chaque contrôle le focus change.


    En espérant avoir pu rendre service (MehdiH)
    Retrouvez moi sur Office Users


    lundi 25 avril 2016 16:39
  • Bonjour Daniel,

    Merci pour ta réponse et désolé d'avoir mis autant de temps à te répondre.

    J'ai essayé d'appliquer les éléments de codes de ton fichier au mien mais je rencontre quelques soucis.

    J'ai repris les éléments qui se trouvaient dans ThisWorkbook et dans MesOB tels quels.

    J'ai ensuite fermé mon fichier puis l'ai rouvert.

    Là, à l'ouverture, j'obtiens le message d'erreur Erreur de compilation. Type défini par l'utilisateur non défini. Ce pour la déclaration Dim GroupOB() As New MesOB.

    Tu aurais une idée, stp ?

    Merci d'avance.

    Steeves.

    jeudi 28 avril 2016 07:10
  • Bonjour,

    J'aurai dû détailler davantage. Le module de classe doit s'appeler "MesOB". Pour le renommer, sélectionne-le, appuie sur F4 et change le nom.

    Cordialement.

    Daniel

    jeudi 28 avril 2016 08:25
  • Merci Daniel.

    Maintenant, j'ai le message Erreur d'exécution '1004': Impossible de lire la propriété OLEObjetcs de la classe Worksheet.

    Cdt, Steeves.

    jeudi 28 avril 2016 08:35
  • Bonjour Daniel,

    Je n'ai rien changé à part la feuille sur laquelle j'arrive en ouvrant le fichier.

    L'erreur est maintenant Erreur d'exécution '438'. Propriété ou méthode non gérée par cet objet.

    Aurais-tu une piste, stp ?

    Cdt, Steeves.

    lundi 2 mai 2016 14:39
  • Bonjour,

    Ca irait peut-être mieux si je pouvais voir le classeur. Peux-tu le mettre, sans données sur OneDrive ou sur un site de partage quelconque ?

    Cordialement.

    Daniel

    lundi 2 mai 2016 15:09
  • Bonjour Daniel,

    Merci. Pas de souci.

    Je mets un lien onedrive vers le fichier (en espérant qu'il fonctionne). Voici le principe de fonctionnement de mon fichier...

    Mon fichier s'ouvre sur la feuille Cockpit.

    Depuis cette feuille, je choisis le mois sur lequel je souhaite avoir des informations : prends April 2016, c'est le plus avancé en termes de développement VB.

    J'arrive sur la feuille Thursday (parce que le dernier jour du mois précédent, mars 2016 donc est un jeudi).

    Dans cette feuille, j'ai un tableau Excel avec les jours du mois. A côté, j'ai ma Frame ActiveX MonthlyCyle.

    Je cherche à gérer les clicks sur les OptionButton de cette Frame.

    Si ce n'est pas clair, dis-moi, on trouvera un moyen d'entrer en communication (si tu es d'accord).

    Merci d'avance.

    Cdt, Steeves.

    https://onedrive.live.com/redir?resid=213BA41362E4DAFA!144&authkey=!AI0N_lzx8AVZBdA&ithint=file%2cxlsm
    mardi 3 mai 2016 07:15
  • Bonjour,
    Je n'arrive pas à te répondre via le forum Web. J'eessaie par la passerelle NNTP en espérant que ça te parvienne. Je bloque dès le début parrce que le combobox SelectMonth n'est pas rempli. Est-ce que tu as une idée ?
    Cordialement.
    Daniel

    Bonjour Daniel,

    Merci. Pas de souci.

    Je mets un lien onedrive vers le fichier (en espérant qu'il fonctionne). Voici le principe de fonctionnement de mon fichier...

    Mon fichier s'ouvre sur la feuille Cockpit.

    Depuis cette feuille, je choisis le mois sur lequel je souhaite avoir des informations : prends*April 2016*, c'est le plus avancé en termes de développement VB.

    J'arrive sur la feuille *Thursday* (parce que le dernier jour du mois précédent, mars 2016 donc est un jeudi).

    Dans cette feuille, j'ai un tableau Excel avec les jours du mois. A côté, j'ai ma Frame ActiveX*MonthlyCyle*.

    Je cherche à gérer les clicks sur les *OptionButton* de cette Frame.

    Si ce n'est pas clair, dis-moi, on trouvera un moyen d'entrer en communication (si tu es d'accord).

    Merci d'avance.
    Cdt, Steeves.

    https://onedrive.live.com/redir?resid=213BA41362E4DAFA!144&authkey=!AI0N_lzx8AVZBdA&ithint=file%2cxlsm

    ----- http://social.Msdn.microsoft.com/Forums/fr-FR/vbafr/thread/3b0a3682-2187-424c-9f1e-0b20592c7f9a#763217c0-057d-448c-a58e-44b4ee03c2ac
    -----

    mardi 3 mai 2016 10:21
  • J'ai mis en commentaires le code gênant.

    J'espère que ce sera mieux.

    https://onedrive.live.com/redir?resid=213BA41362E4DAFA!147&authkey=!AAzoYYoO9vAE4-Y&ithint=file%2cxlsm
    mardi 3 mai 2016 11:58
  • J'ai effectivement une erreur 438 sur :

    For Each c In ActiveSheet.OLEObjects(1).Object.Controls

    "Activesheet" est la feuille Cockpit. "ActiveSheet.OLEObjects(1)" désigne le command button "February" qui ne contient donc pas de contrôles, d'où l'erreur. Sur quelle feuille sont le cadre et les boutons d'options ?

    Cordialement.

    Daniel

    mardi 3 mai 2016 15:59
  • Bonjour Daniel,

    La Frame et les boutons d'option sont sur la feuille Thursday.

    Merci d'avance pour ton aide.

    Steeves.

    jeudi 5 mai 2016 06:07
  • Bonjour,

    La frame est l'OLEObject 38. J'ai transféré la macro CreerClasse dans le module "Module2" (il est appelé à un autre moment) dans Worksheet_Activate de la feuille "Thursday"). Les noms des option buttons ne commencent pas par "OptionB". J'ai remplacé le test sur le nom par le test sur le type :

    Dim GroupeOB() As New MesOB
    Public Sub CreerClasse()
    Dim c As Control, i As Integer
    For Each c In Sheets("Thursday").OLEObjects(38).Object.Controls
    '    If Left(c.Name, 7) = "OptionB" Then
        If TypeName(c) = "OptionButton" Then
            ReDim Preserve GroupeOB(i)
            Set GroupeOB(i).OB = c
            i = i + 1
        End If
    Next
    End Sub
    

    et ça fonctionne ! Voici l'adresse du classeur :

    https://onedrive.live.com/redir?resid=96D5842B14D14FA4!8020&authkey=!ACsN-z-ArYwy0II&ithint=file%2cxlsm

    Daniel

    • Marqué comme réponse Newworld92 lundi 9 mai 2016 14:49
    jeudi 5 mai 2016 13:23
  • Bonjour Daniel,

    Merci pour ton aide.

    Je vais regarder ça avec attention. Je te dirai ce que ça donne mais je suppose que tu as bien répondu à mon besoin.

    Très bon week-end. A lundi. Steeves.

    samedi 7 mai 2016 19:02
  • Bonjour Daniel,

    C'est exactement ce que je voulais.

    Je vais pouvoir continuer à coder.

    Merci pour aide précieuse.

    lundi 9 mai 2016 14:49