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 :

Comment affecter un évenement à un bouton créé par un Userform?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut Comment affecter un évenement à un bouton créé par un Userform?
    Bonjour à tous,

    Et je remercie par avance ceux qui pourront me donner des pistes.

    Je souhaite créer une interface sans que l'utilisateur puisse manipuler la feuille Excel.

    Pour cela j'ai créé un Userform en plein écran qui va générer 100 boutons de commandes dont les propriétés Caption et BackColor dépendront de données cachées dans la feuille Excel. Les données sont dans les colonnes A à E, ligne 1 à 100 de la feuille 1.

    Mon souci : Comment associé une action à l'évenement :
    "commandbutton._click ()" pour les boutons générés?

    Quand l'utilisateur clicquera sur un des 100 boutons créés je souhaiterai par exemple enregistrer la valeur "Caption" du bonton de commande dans une cellule spécifique.

    Voilà j'espère avoir été clair

    Amicalement,
    ThamAL

    Voici le code pour le moment (L'userform dans le mode création est vide)
    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
    79
    80
    81
    82
    83
    84
    85
    86
     
    Private Sub UserForm_Activate()
    With Me
    .StartUpPosition = 3
    .Width = Application.Width
    .Height = Application.Height
    .Left = 0
    .Top = 0
    End With
     
    For i = 1 To 100
     
    Dim Obj As Control
    Set Obj = Me.Controls.Add("forms.commandbutton.1")
     
    With Obj
    .Caption = Sheets("feuil1").Range("a" & i)
    If Range("e" & i).Value = 1 Then
    .BackColor = &H80FF80
    Else
    If Range("e" & i).Value = 2 Then
    .BackColor = &H8080FF
    Else
    If Range("e" & i).Value = 3 Then
    .BackColor = &HFFFF80
    Else
    If Range("e" & i).Value = 4 Then
    .BackColor = &H80FFFF
    Else
    .BackColor = &H80FF&
    End If
    End If
    End If
    End If
     
    If i < 21 Then
    a = 60 * i
    .Left = a - 50
    .Top = 30
    .Width = 50
    .Height = 20
     
    Else
     
    If i > 20 And i < 41 Then
    a = 60 * (i - 20)
    .Left = a - 50
    .Top = 60
    .Width = 50
    .Height = 20
     
    Else
    If i > 40 And i < 61 Then
    a = 60 * (i - 40)
    .Left = a - 50
    .Top = 90
    .Width = 50
    .Height = 20
     
    Else
    If i > 60 And i < 81 Then
    a = 60 * (i - 60)
    .Left = a - 50
    .Top = 120
    .Width = 50
    .Height = 20
     
    Else
    If i > 80 Then
    a = 60 * (i - 80)
    .Left = a - 50
    .Top = 150
    .Width = 50
    .Height = 20
     
    End If
    End If
    End If
    End If
    End If
     
    End With
     
    Next i
     
    End Sub

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    Bonjour
    interesse toi au module classes

    en a tu deja entendu parler ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    Oui j'ai un peu regardé et c'est une piste à laquelle j'ai pensé mais ça parait difficilement à ma portée...

    Auriez-vous un début de code ou l'idée générale pour commencer?

    Merci

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tu ajoute un module de classe à ton projet que tu laisse nommé par défaut "Classe1" (tu pourras adapter par la suite) et tu colle ce code dedans. Attention, ici la Form se nomme "UserForm1", adapte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public WithEvents GroupeBtn As MSForms.CommandButton
     
    Private Sub GroupeBtn_Click()
     
       UserForm1.EvenementBouton GroupeBtn
     
    End Sub
    Dans le module de ta Form, tu colle ce code-ci (que j'ai modifié car les If imbriqués sont à mon sens assez indigestes) :
    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
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    Dim Btn() As New Classe1
     
    Sub EvenementBouton(Bouton As MSForms.CommandButton)
     
        MsgBox Bouton.Name
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
        'Dim Obj As Control
        Dim I As Integer
        Dim A As Integer
     
        With Me
     
            .StartUpPosition = 3
            .Width = Application.Width
            .Height = Application.Height
            .Left = 0
            .Top = 0
     
        End With
     
        For I = 1 To 100
     
        ReDim Preserve Btn(1 To I)
     
        Set Btn(I).GroupeBtn = Me.Controls.Add("forms.commandbutton.1")
     
     
        With Btn(I).GroupeBtn
     
            .Caption = Sheets("feuil1").Range("A" & I)
     
            Select Case Range("E" & I).Value
     
                Case 1
                    .BackColor = &H80FF80
     
                Case 2
                    .BackColor = &H8080FF
     
                Case 3
                    .BackColor = &HFFFF80
     
                Case 4
                    .BackColor = &H80FFFF
     
                Case Else
                    .BackColor = &H80FF&
     
            End Select
     
            Select Case I
     
                Case Is < 21
     
                    A = 60 * I
                    .Left = A - 50
                    .Top = 30
                    .Width = 50
                    .Height = 20
     
                Case 21 To 40
     
                    A = 60 * (I - 20)
                    .Left = A - 50
                    .Top = 60
                    .Width = 50
                    .Height = 20
     
                Case 41 To 60
     
                    A = 60 * (I - 40)
                    .Left = A - 50
                    .Top = 90
                    .Width = 50
                    .Height = 20
     
                Case 61 To 80
     
                    A = 60 * (I - 60)
                    .Left = A - 50
                    .Top = 120
                    .Width = 50
                    .Height = 20
     
                Case Is > 80
     
                    A = 60 * (I - 80)
                    .Left = A - 50
                    .Top = 150
                    .Width = 50
                    .Height = 20
     
            End Select
     
        End With
     
        Next I
     
    End Sub
    Pour le test, le click sur un bouton va afficher une boite de message avec le nom du bouton, il te suffit d'adapter la proc "EvenementBouton" à ce que tu souhaite faire car le module de classe lui passe en argument l'objet bouton qui viens d'être cliqué.

    Hervé.

  5. #5
    Membre averti
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2013
    Messages : 18
    Par défaut
    C'est juste "Parfait"!

    Merci beaucoup Theze cela va me permettre d'avancer jusqu'à mon prochain bloquage

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonsoir,

    ThamAL, et bien reviens dés que ça bloque

    Hervé.

Discussions similaires

  1. [MVVM] Comment remplacer l'évenement 'SelectionChanged' du Ruban par une 'Command' ?
    Par Invité dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 15/07/2015, 00h00
  2. [E-07] Comment affecter par macro une macro à un objet
    Par BATISSEUR dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2009, 09h49
  3. Réponses: 1
    Dernier message: 18/06/2008, 09h32
  4. Comment affecter une valeur par defaut si null?
    Par cassy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 31/07/2006, 19h13
  5. Comment affecter une image a un PictureBox par code?
    Par ayouss dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/07/2006, 08h26

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