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 :

Limite de l'utilisation d'un CommandButton_Click()


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
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Par défaut Limite de l'utilisation d'un CommandButton_Click()
    Bonjour,
    Une question probablement toute bête mais sur laquelle je bug depuis un moment.
    Est il possible de créer une boucle ou autre avec des commandButton_Click?

    Je m'explique....

    Aujourd'hui, par exemple, je code de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private sub commandbutton1_click()
                    MsgBox "Vous avez cliqué sur le bouton 1"
    End sub
     
    Private sub commandbutton2_click()
                    MsgBox "Vous avez cliqué sur le bouton 2"
    End sub
    Imaginons que je me retrouve avec 30 boutons, le code est surchargé.....

    Est il possible d'écrire sous une forme, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private sub userform_activate()
       For i = 1 to 30
          if controls("commandbutton" & i).click then
                  MsgBox "Vous avez cliqué sur le bouton" & i
         end if
       Next
    End sub
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    L'évènement activate et l'évènement click d'un bouton n'ont absolument aucun lien entre eux ...
    Ce que tu veux faire ne peux donc se faire que par une instruction dans chaque évènement click de chaque bouton de commande *****
    ou (mieux, mais alors à bûcher sérieusement) en utilisant un module de classe gérant les évènements d'une collection de ces contrôles.

    EDIT ***** --->> J'en profite pour te rappeler que sur un userform (puisque c'est le cas), le contrôle cliqué est aussi l'objet ActiveControl

  3. #3
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Par défaut
    Bonjour, merci pour ta réponse. Dans mon exemple, j'ai mis le code dans un Activate mais effectivement, cela n'a aucun lien.

    Cependant, je ne comprends pas ce que tu as voulu expliquer dans ton "EDIT".

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Cependant, je ne comprends pas ce que tu as voulu expliquer dans ton "EDIT".
    Ah.
    Et je suppose que tu t'es bien évidemment (ou non ?) précipité pour ouvrir au moins ton aide VBA à la rubrique ActiveControl, propriété, pour savoir ce dont il s'agissait !
    ...
    Alors ? -->>
    Si tu l'as fait --->> que n'as-tu pas compris ? Qu'as-tu testé sur les bases de cette simple lecture ?
    Si tu ne l'as pas encore fait --->> qu'attends-tu (surtout si débutant) pour le faire ?

  5. #5
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Par défaut
    Démasqué !!!

    Je lis tout ca et je reviens vers toi en fonction !! Merci

    EDIT : Bon bah je comprend rien.... je pense que je vise quelque chose qui est bien loin de mon niveau........

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce n'est pas compliqué.
    Regarde. On va prendre ton exemple
    Mets 3 boutons de commande sur ton userform et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub CommandButton1_Click()
      exemple
    End Sub
    Private Sub CommandButton2_Click()
      exemple
    End Sub
    Private Sub CommandButton3_Click()
      exemple
    End Sub
    Private Sub exemple()
      MsgBox "vous avez cliqué sur le bouton " & ActiveControl.Name
    End Sub
    A partir de là, à toi de concevoir, en utilisant au besoin des Select case dans la procédure exemple ******

    Il reste que l'utilisation d'une collection et d'un module de classe sont préférables (mais peut-être à éviter pour l'instant à ton niveau).

    ****** lorsque tu auras fait le 1er test, remplace la procédure exemple par celle-ci et regarde
    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
    Private Sub exemple()
      With ActiveControl
        Select Case Right(.Name, 1)
          Case 1
            .BackColor = RGB(255, 0, 0)
          Case 2
            .Move .Left + 100
          Case 3
            For i = 1 To 10
              .Move .Left + 10
                For j = 1 To 10000
                  DoEvents
                Next
              .Move .Left - 10
              For j = 1 To 10000
                 DoEvents
              Next
            Next
            .Caption = "coucou"
        End Select
      End With
    End Sub
    Le reste dépend de ta créativité et/ou de tes besoins. A toi de "faire".

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code useform : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim CmBu(40) As New Classe1
    Private Sub UserForm_Initialize()
    Dim Numlab As Integer: Numlab = 2
    With Sheets("parametres")
     If .Cells(46, 10).Value = "Fast" Then
            For i = 1 To 40
                Controls("label" & Numlab + i - 1).Caption = .Cells(6, 53).Offset(i).Value
                Controls("label" & Numlab + i - 1).Visible = .Cells(6, 46).Offset(i).Value = "F"
                Controls("CommandButton" & Numlab + i - 1).Visible = .Cells(6, 46).Offset(i).Value = "F"
                Set CmBu(i).Bouton = Controls("CommandButton" & Numlab + i - 1)
            Next
        End If
    End With
    End Sub
    Code Classe1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public WithEvents Bouton As CommandButton
    Private Sub Bouton_click()
        MsgBox "Vous avez cliqué sur " & Bouton.Name
    End Sub
    Dernière modification par Invité ; 10/03/2017 à 15h48.

  8. #8
    Membre averti
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2016
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 42
    Par défaut
    Bonjour,
    Ayant acquis de nouvelles connaissances depuis mon problème initial, je m'apercois que tu avais parfaitement raison Unparia en disant qu'il existait probablement une solution technique beaucoup plus simple à metre en oeuvre que mon amxi Userform composé de 8000 activecontrols, lol.

    Et cette solution etait tout simplement...... la Listbox....

    Quoi qu'il en soit, merci de vous être interessé à mon problème... Ceci m'a permis à ce jour de mettre en pratique de nouvelles connaissances!


    Résolu

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

Discussions similaires

  1. [PPT-2007] Limitations dans l'utilisation ActionSettings
    Par bpeyre dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 30/10/2011, 10h11
  2. Réponses: 4
    Dernier message: 19/07/2011, 11h52

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