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

VBA Discussion :

Créer un code CommandButton_click par macro


Sujet :

VBA

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut Créer un code CommandButton_click par macro
    Bonjour,
    Je souhaite ajouter dynamiquement des contrôles dans une userform, ce qui ne pose pas de problème. Mais une fois qu'on a ajouté un CommanButton, comment créer le code associé ?



    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
    Private Sub UserForm_Initialize()
     
    Dim Obj As Control
     
    Set Obj = Me.Controls.Add("forms.commandbutton.1")
    For iTF2 = 2 To UF1.NbP.Value 'Nombre de fichiers de données à ouvrir
    With Obj
    .Name = "CB" & iTF2 & "Ax1"
    .Caption = "..."
    .Left = 270
    .Top = 42 + 18 * (iTF2 - 1)
    .Height = 18
    .Width = 24
    End With
    Next iTF2
    End Sub

    Pour la création du code associé au bouton précédemment créé, j'ai tenté ce code qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Création macro bouton
    Set VBComp = ThisWorkbook.VBProject.VBComponents("UFTF2")
    With VBComp.CodeModule
    .insertlines .countoflines + 1, "Sub CB" & iTF2 & "Ax1_Click()"
    .insertlines .countoflines + 1, "Call ImportData"
    .insertlines .countoflines + 1, "End Sub"
    End With

    Est-ce que quelqu'un parmi vous aurait une idée ?

    Merci de votre aide.

  2. #2
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Il faut créer un module de classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Public WithEvents mybutton As CommandButton
    Private Sub mybutton_Click()
    MsgBox "Bouton cliqué =" & mybutton.Name
    Call importdata
    End Sub
    et dans le formulaire
    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
    Dim cmdArray() As New mybutton
    Private Sub UserForm_initialize()
    ' event of a command button which will create a new command button dynamically and assign code to it.
      Dim obj As Control
        Dim iTF2 As Long
        For iTF2 = 1 To 4    'UF1.NbP.Value
            Set obj = Me.Controls.Add("Forms.CommandButton.1", "CB" & iTF2 & "Ax1", False)
            With obj
                .Caption = "..."
                .Left = 1
                .Top = 42 + 18 * (iTF2 - 1)
                .Height = 18
                .Width = 24
                .Visible = True
            End With
     
            ReDim Preserve cmdArray(1 To iTF2) 'UF1Nbp.value
            Set cmdArray(iTF2).mybutton = obj
           ' Set obj = Nothing
        Next iTF2
    End Sub

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Bonjour,

    Merci Garuda pour ce code. En fait, au lancement, j'ai une erreur de compilation sur la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim cmdArray() As New mybutton
    Message : type défini par l'utilisateur non défini.

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Il faudrait poster tout le code du module de classe "Mybutton"
    L'erreur provient du fait qu'il ne trouve pas le module de classe

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    J'ai créé un module de classe qui s'est auto-appelé "Classe1" et j'y ai copié le code que vous m'avez donné tel quel.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents mybutton As CommandButton
    Private Sub mybutton_Click()
    MsgBox "Bouton cliqué =" & mybutton.Name
    Call importdata
    End Sub
    J'ai ensuite adapté mon code formulaire avec l'autre code. Au passage, je ne comprends pas la ligne "Redim preserve..."

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 21
    Par défaut
    Bonjour,

    Je suis toujours bloqué avec mon code. Visiblement le module de classe n'est pas reconnu.
    Quelqu'un aurait un idée de comment faire ?
    Merci d'avance

Discussions similaires

  1. [XL-2003] Protéger le code VBA par macro
    Par pitoumad dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/07/2010, 06h22
  2. Créer et lire un fichier wav par macro
    Par fred65200 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/01/2009, 19h40
  3. Problème d'insertion de code par macro
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2008, 20h31
  4. Maj le code VBA par une macro extérieure
    Par benpinta dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2007, 09h16
  5. Ecrire par macro du code dans un module
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 24/09/2007, 01h50

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