IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Associer des Private Sub à un controle créé par macro [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé d'opération
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'opération
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut Associer des Private Sub à un controle créé par macro
    Bonjour à tous,

    Je me suis lancé récemment dans les macro VBA et je commence à bloquer.
    Voici ce que je cherche à faire :
    - Une macro me crée en boucle des SpinButton activeX sur des cellules bien précises de cette manière :
    Dans une boucle for qui incrémente T
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim OBJ As OLEObject
    Set OBJ = ActiveSheet.OLEObjects.Add(ClassType:="Forms.SpinButton.1", Link:=True, DisplayAsIcon:=False, Left:=Cells(T, 4).Left - 10, Top:=Cells(T, 3).Top, Width:=10, Height:=15)
    OBJ.LinkedCell = Cells(T, 3)
    - Je souhaite associer 2 Private Sub à ces contrôles, pour réguler le click sur les flèches des SpinButton. J'ai déjà ces Private Sub :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub SpinButton_SpinDown()
    Rows(Range(SpinButton.LinkedCell).Row).Select
    Selection.Cut
    Rows(Range(SpinButton.LinkedCell).Row + 2).Select
    Selection.Insert Shift:=xlDown
    SpinButton.Top = Range(SpinButton.LinkedCell).Top
    End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub SpinButton_SpinUp()
    Rows(Range(SpinButton.LinkedCell).Row).Select
    Selection.Cut
    Rows(Range(SpinButton.LinkedCell).Row - 1).Select
    Selection.Insert Shift:=xlDown
    SpinButton.Top = Range(SpinButton.LinkedCell).Top
    End Sub
    mais je n'arrive définitivement pas à les associer aux controles créés par ma macro...

    J'ai essayé plusieurs choses dont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OBJ.GotFocus = "MacroSpinUpDown"
    où "MacroSpinUpDown" reprenait plus ou moins lesdites Private Sub mais sans succès.

    Avez-vous un conseil et/ou un petit coup de pouce à me donner ?

    Merci d'avance !

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Une façon de faire, est de créé un module de classe nommé pour l'exemple MySpinButton.
    Ajouter le code ci-dessous à ce module de classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Option Explicit
     
    Public WithEvents pSpin As MSForms.SpinButton
     
    Private Sub pSpin_SpinDown()
        Call pSpin.Parent.GeneralSpinDown(pSpin)
    End Sub
     
    Private Sub pSpin_SpinUp()
        Call pSpin.Parent.GeneralSpinUp(pSpin)
    End Sub
     
    'Private Sub pSpin_Change()
    '    MsgBox ("Le composant " & pSpin.Name & " a changé")
    'End Sub
     
    Public Property Set Control(ByRef spn As MSForms.SpinButton)
        Set pSpin = spn
    End Property
     
    Public Property Get Control()
        Set Control = pSpin
    End Property
    Pour créé les SpinButtons dynamiquement, on pourra ajouter dans le code de la UserForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private MesSpinBt() As MySpinButton
    Private SpCount As Integer
     
    Private Sub AddSpinButton(name As String, left As Integer, top As Integer)
       SpCount = SpCount + 1
       ReDim Preserve MesSpinBt(SpCount)
       Set MesSpinBt(SpCount) = New MySpinButton
       Set MesSpinBt(SpCount).Control = UserForm1.Controls.Add("Forms.SpinButton.1", name, True)
       With MesSpinBt(SpCount).Control
        .top = top
        .left = left
        End With
    End Sub
    Pour traiter les évènements de clic, il faudra implémenter dans la UserForm les fonctions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Sub GeneralSpinDown(ByRef spin As MSForms.SpinButton)
        If spin.Name = "sp_1" then
        end if
        '...
    End Sub
     
    Public Sub GeneralSpinUp(ByRef spin As MSForms.SpinButton)
        If spin.Name = "sp_1" then
        end if
        '...
    End Sub

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé d'opération
    Inscrit en
    Octobre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'opération
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2012
    Messages : 2
    Par défaut
    Bonjour BlueMonkey,

    Merci pour cette réponse.
    J'avoue que tout ceci est très obscur pour moi...

    Je n'ai pas de Userform donc où ajouter le code dont vous parlez ? C'est ma macro qui crée les SpinButtons, il ne sont pas préexistant d'où mon point de blocage.

    J'ai bien ajouté le module de classe mais il faut que je me documente pour comprendre de quoi il s'agit.

    EDIT : J'ai réussi à contourner mon problème en passant par un Workbook_SheetSelectionChange plutôt que par des SpinButtons. Ceci dit, je suis curieux de comprendre comment associer des macro/Private Sub à des controles créés par une macro.

    Merci pour votre aide !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une macro depuis un control créé par macro
    Par totozor dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/04/2015, 16h45
  2. [XL-2007] impression des tableaux sur une seule page par macro
    Par free_dom dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2011, 12h21
  3. Rendre controle actif par macro
    Par Big Brother38 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/10/2010, 01h22
  4. Acces controles c# par des threads
    Par voyageur dans le forum Windows Forms
    Réponses: 2
    Dernier message: 05/03/2007, 20h04
  5. Réponses: 9
    Dernier message: 06/06/2006, 23h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo