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 :

Creer un CommandButton avec control.add puis lui affecter une action sur le clique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut Creer un CommandButton avec control.add puis lui affecter une action sur le clique
    Bonjour,

    Je doit créer des bouton de commande par une macro car leur nombres est variable. J'ai réussi a les créer, les positionner et les nommer ( je crois ). Par contre, impossible de leur affecter une action.

    Voici mon code épuré de tous ce qui est inutile à ma question :

    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
    24
    25
    26
    27
    28
    29
    30
    Private Sub UserForm_Initialize()
    j = 4
    k = 0
    Toop = 0
     
    start:
    k = k + 1
    Toop = Toop + 20
     
     
        Set Obj = Me.Controls.Add("forms.CommandButton.1", "Up" & k)
        With Obj
            .Name = "Up" & k
            .Caption = "+"
            .Left = 12
            .Top = Toop
            .Width = 18
            .Height = 18
        End With
     
     
    If Not k = j Then GoTo start
     
    Me.Height = Toop + 90
     
    End Sub
     
    Private Sub Up1_Click()
    MsgBox "Ca marche !"
    End Sub
    J'ai bien essayé de rajouter un .OnAction à la création du bouton mais je rencontre cette erreur :
    "Erreur d’exécution 438 : Propriété ou méthode non gérée par cet objet"

    Je suis désolé de vous solliciter sur ce problème, je suis bien persuadé que cette question à du un jour obtenir une réponse sur un forum mais je n'arrive pas à mettre la main dessus...

    Merci d'avance de vos réponse.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu as plusieurs boutons à placer utilise plutôt un module de classe.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut
    Très bien, je m'y met. Je viens de trouver un petit tuto de 250 pages qui va m'apprendre les modules de classes.

    J'avouerait bien honteusement que j'espérais secrètement un petit : " Mais enfin tu à oublié un guillemet en ligne 4" .

    Mais bon, voila une bonne occasion d'apprendre de nouvelles choses.

    Merci de ta réponse

  4. #4
    Membre averti
    Homme Profil pro
    Techicien Biologiste
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Techicien Biologiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Par défaut
    salut pour ma part j'ai créer aujourd'hui un code pour créer un USF et des contrôles dedans via ma macro
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Sub FormGraph()
        Dim y As Integer, Impr As String
        Dim FormTempo As VbComponent
        Dim NewButton As MSForms.CommandButton
        Dim NewLabel As MSForms.Label
        Dim NewComboBox As MSForms.ComboBox
        Dim Formname As String
        Set FormTempo = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
        'Create USF
        With FormTempo
            .Properties("Caption") = "Choix de l'imprimante"
            .Properties("Height") = 105
            .Properties("Width") = 345
        End With
        Formname = FormTempo.Name
        '   Add a combobox
            Set NewComboBox = FormTempo.Designer.Controls _
          .Add("forms.ComboBox.1")
        With NewComboBox
            .Left = 12
            .Top = 30
            .Height = 18
            .Width = 312
            .Name = "Combo1"
        End With
        '   Add a label
            Set NewLabel = FormTempo.Designer.Controls _
          .Add("forms.label.1")
        With NewLabel
            .Caption = "Choisissez l'imprimante"
            .Left = 12
            .Top = 6
            .Height = 18
            .Width = 312
        End With
     
            '   Add a CommandButton
        Set NewButton = FormTempo.Designer.Controls _
          .Add("forms.CommandButton.1")
        With NewButton
            .Caption = "OK"
            .Left = 144
            .Top = 54
            .Height = 24
            .Width = 72
        End With
        With ThisWorkbook.VBProject.VBComponents("UserForm1").CodeModule
            Line = .CountOfLines
            .InsertLines Line + 1, "Sub UserForm_Initialize()"
            .InsertLines Line + 2, "listPrint"
            .InsertLines Line + 3, "For y = 0 To x"
            .InsertLines Line + 4, "Impr = CStr(TabPrinter(y))"
            .InsertLines Line + 5, "Me.Controls(""Combo1"").AddItem Impr"
            .InsertLines Line + 6, "Next y"
            .InsertLines Line + 7, "End Sub"
            .InsertLines Line + 8, ""
    'Controle evenementielle du bouton
            .InsertLines Line + 9, "Private Sub CommandButton1_Click()"
            .InsertLines Line + 10, "Dim xlSheet As Excel.Worksheet"
            .InsertLines Line + 11, "Dim Graphs As Object"
            .InsertLines Line + 12, "Set xlSheet = ThisWorkbook.Sheets(""Graph"")"
            .InsertLines Line + 13, "For Each Graphs In xlSheet.ChartObjects"
            .InsertLines Line + 14, "Graphs.Chart.PrintOut ActivePrinter:= Combo1.value"
            .InsertLines Line + 15, "Next"
            .InsertLines Line + 16, "Me.Hide"
            .InsertLines Line + 17, "End Sub"
        End With
     
        '   Show the form
        Load VBA.UserForms.Add(Formname)
        VBA.UserForms.Add(Formname).Show
        reponse = MsgBox("Voulez-vous ré-imprimer les graphiques?", vbYesNo, "Fin de l'impression")
        If reponse = 7 Then
            ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("UserForm1")
        ElseIf reponse = 6 Then
            VBA.UserForms.Add(Formname).Show
        End If
    End Sub
    Tu remarqueras que j'ai créé également la procédure événementielle lors de l'initialisation de l'USF et lors du clique sur le bouton d'action via la macro,
    J'espère que cela pourra t'apporter de l'aide

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur amateur VBA Excel
    Inscrit en
    Janvier 2013
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur amateur VBA Excel
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Janvier 2013
    Messages : 69
    Par défaut
    Merci Schat6903 !

    Est-ce que le fait d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub CommandButton1_Click()
    seulement après la création du bouton serait la solution ?

    Philippe, J'essai de comprendre les module de classe, mais à chaque ligne d'explication, je doit rechercher des explication pour chaque mot . Je crois que ça va largement au delà de mes capacités actuelles mais je m'accroche

  6. #6
    Membre averti
    Homme Profil pro
    Techicien Biologiste
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Techicien Biologiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Par défaut
    Il y a quelque chose qui me parait bizarre,
    c'est que tu n'as pas déclarer ta variables Obj
    D'une part ne devrais tu pas le déclarer en tant que MSForms.CommandButton
    et d'autre part , est ce que le fait de creer un bouton dans le formulaire où il sera exploiter ne nécessite pas de "recharger" ce meme formulaire pour prendre en compte les changements?
    Pour ma part , la création de mon USF et des controles sont fait à partir d'un module (macro)

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/03/2015, 15h36
  2. Réponses: 11
    Dernier message: 09/01/2007, 17h46
  3. Téléchargement de fichier puis ouverture d'une page sur un clic
    Par gy0m76 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 04/12/2006, 12h32
  4. Faire une action sur Control + C
    Par bluecurve dans le forum Langage
    Réponses: 1
    Dernier message: 20/07/2006, 00h19
  5. Réponses: 4
    Dernier message: 03/05/2006, 13h58

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