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 :

affecter un evenement à un bouton depuis le code


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
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Par défaut affecter un evenement à un bouton depuis le code
    Bonjour,

    Je souhaite affecter, depuis le code, un événement à un CommandButton.

    Quelqu'un peut il m'aider?

    merci d'avance

    Jai essayé cela:

    dans un module de classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public WithEvents GroupeDate As MSForms.CommandButton
     
    Private Sub GroupeDate_Enter()
       formulaire.EvenementBoutonDate GroupeDate
    End Sub
    puis dans le formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim BtnDate() As New Classe1
     
    Sub EvenementBoutonDate(Bouton As MSForms.CommandButton)
        If Bouton = "" Then Me.Bouton = Format(Date)
    End Sub
     
    Private Sub formulaire_initialize()
        i = i + 1
        ReDim Preserve BtnDate(1 To i)
        Set BtnDate(i).GroupeDate = date_Ot_PA
    end sub
    date_Ot_PA étant le nom du contrôle

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    As-tu bien réfléchi à ce que tu souhaites faire ?

    Ci dessous un exemple simple de l'utilisation des évènements.

    * Dans un 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
    Option Explicit
     
    Public Event NameChanged(ByVal strEvent As String, ByRef Cancel As Boolean)
     
    Private mName As String
     
    Property Let Name(strName As String)
      Dim Cancel As Boolean
      RaiseEvent NameChanged("NameChanged Event !", Cancel)
      If Not Cancel Then mName = strName
      MsgBox mName
    End Property
    Dans le module de classe du 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
    Option Explicit
     
    Dim WithEvents oContact As clsName
     
    Private Sub CommandButton1_Click()
      Set oContact = New clsName
      oContact.Name = "bernard_metz"
    End Sub
     
    Private Sub oContact_NameChanged(ByVal strEvent As String, Cancel As Boolean)
      Dim Reponse As VbMsgBoxResult
      Reponse = MsgBox("Voulez vous changer le nom ?", vbYesNo)
      If Reponse <> vbYes Then Cancel = True
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Par défaut
    Merci de la réponse,

    Oui en fait je cherche a entrer automatiquement la date du jour, entre autre, dans un contrôle dès qu'il reçoit le focus donc sous l'action "Enter".

    Comme j'ai de nombreux contrôles de date, je voudrais éviter d'avoir à recopier le code pour chaque contrôle et donc trouver une manière de simplifier tout cela.

    Re bonjour,

    ... ou encore renvoyer tous les boutons sur la même procédure sans pour autant être obligé d'écrire une procédure "private sub bouton_Click() - renvoi - end sub" pour chaque bouton

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par bernard_metz Voir le message
    Re bonjour,

    ... ou encore renvoyer tous les boutons sur la même procédure sans pour autant être obligé d'écrire une procédure "private sub bouton_Click() - renvoi - end sub" pour chaque bouton
    Ok je comprends mieux.

    * Dans un module de classe (clsTextbox) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Private WithEvents mTextbox As MSForms.TextBox
     
    Public Property Set LinkTextBox(ByVal TextBoxCtrl As MSForms.TextBox)
      Set mTextbox = TextBoxCtrl
    End Property
     
    Private Sub mTextbox_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
      mTextbox.Text = "Enter Event !"
    End Sub
    * Dans le module du 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
    Option Explicit
     
    Private mColTextbox As Collection
     
    Private Sub UserForm_Initialize()
     
      Dim ctrl As Control
      Dim mTextbox As clsTextbox
     
      Set mColTextbox = New Collection
      For Each ctrl In Me.Controls
        If TypeName(ctrl) = "TextBox" Then
          Set mTextbox = New clsTextbox
          Set mTextbox.LinkTextBox = ctrl
          mColTextbox.Add mTextbox
        End If
      Next ctrl
     
    End Sub


    Je n'ai pas réussi à "overrider" l'évènement '_Enter' mais le '_MouseDown' devrait correspondre à ta demande.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2013
    Messages : 46
    Par défaut
    Merci pour la réponse!

    Je ne peux pas tester ce code cette semaine parceque je vais être très occupé par mon travail mais je m'y colle ce prochain week end.

    En attendant j'ai fais ce que je voulais éviter c'est à dire recopier toutes les procédures pour tous les boutons lol... pas cool et surtout très compliqué si je dois modifier quoi que ce soit... alors ce code me sera bien utile!

    Merci d'avance encore et je vous tiens au courant du résultat

    Bernard

Discussions similaires

  1. [XL-2007] Créer un bouton par un code VBA et affecter une macro
    Par cakola dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/03/2015, 14h00
  2. [AXIS] Obtenir le WSDL d'un service depuis le code ...
    Par webspeak dans le forum Services Web
    Réponses: 29
    Dernier message: 06/03/2011, 13h10
  3. Réponses: 13
    Dernier message: 03/09/2010, 10h27
  4. [C#] Simuler clic depuis du code
    Par Trollusc@ius dans le forum ASP.NET
    Réponses: 13
    Dernier message: 16/08/2005, 10h43
  5. [JS] Appeler du code C# depuis du code JS
    Par DontNet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 05/05/2005, 19h00

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