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 :

[VBA Excel] Associer N macros à N boutons suite à un événement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut [VBA Excel] Associer N macros à N boutons suite à un événement
    Bonjour à tous,

    Je souhaiterais avoir quelques conseils sur un problème :
    En réponse à un événement quelconque, par exemple un clic bouton, je veux créér N boutons ("Bouton1" ... "BoutonN") et leur associer N macros ("Bouton1_click" ... "BoutonN_click")

    Sur ma feuille excel, existent deux boutons, le premier déclenche la macro Evenement_click et le second Bouton0, est un CommandButton.
    L'idée est de recopier ce Bouton0 existant, de changer son nom et de créer sa macro associée dans le code.

    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
     
    Sub Evenement_click()
        Dim WbClasseur As Workbook
        'Marqueur d'affichage
        Dim IntLigneCourante As Integer
        '--------------------------------------------------
        IntLigneCourante = 10
        N = 2 
        Set WbClasseur = Workbooks("Classeur.xls")
        For i = 1 To N
            '****** BLOC1 ******
            'Gestion des boutons
            Worksheets("Sheet1").Shapes("Bouton0").Select
            Selection.Copy
            Worksheets("Sheet1").Range("F" & IntLigneCourante).Select
            Worksheets("Sheet1").Paste
            Selection.Name = "Bouton" & i
            Worksheets("Sheet1").Range("F18").Select
            IntLigneCourante = IntLigneCourante + 1
            '******************
            '****** BLOC2 ******
            'Gestion des macros associées
            With WbClasseur.VBProject.VBComponents("Feuil1").CodeModule
                x = .CountOfLines
                .InsertLines x + 1, "Sub Bouton" & i & "_Click()"
                .InsertLines x + 2, " "
                .InsertLines x + 3, "End Sub"
            End With
            '******************
        Next i
    End Sub
    Les blocs BLOC1 et BLOC2 fonctionnent parfaitement indépendemment l'un de l'autre, mais dès qu'ils sont activés ensemble, excel plante sans message d'erreur. J'avoue avoir du mal à comprendre la logique.

    Par avance, merci de votre aide.

    Vorillyan

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tiens, comme je vais me restaurer, regarde déjà là, juste pour l'idée
    Une collection de boutons et une recherche de la macro à lancer selon leurs index
    http://www.developpez.net/forums/sho...d.php?t=241805
    A+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 393
    Points : 451
    Points
    451
    Par défaut
    Et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .InsertLines x + 1, "Private Sub Bouton" & i & "_Click()" & vbCrlf & " " & vbCrlf & "End Sub"
    Au fait, quel type de bouton est-ce? des boutons de la barre formulaire ou de la barre "boite à outils controles" ?

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bon appétit pour commencer

    J'ajouterai pour être complet que les macros sont toutes différentes, elles sont paramétrées en fonction de la position du bouton auquel elles sont sont associées.

    @++

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonsoir dadavyvy,

    Ce sont des boutons de de la barre "boite à outils controles".
    J'essaye ton code.

    Merci
    @++

  6. #6
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonsoir dadavyvy,

    Toujours pareil, plantage sans message d'erreur. J'ai l'impression qu'il y a un soucis avec le .CountOfLines lors du second passage dans la boucle.

    @++

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir

    à ma connaisance (mais je peux me tromper) il n'est pas possible de créer les procédures en meme temps que la boucle pour créer les boutons.

    tu peux tester cette adaptation


    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
    Sub Evenement_click()
        Dim WbClasseur As Workbook
        'Marqueur d'affichage
        Dim IntLigneCourante As Integer
        Dim N As Integer, I As Integer, X As Integer
     
        '--------------------------------------------------
        IntLigneCourante = 10
        N = 2
     
        Worksheets("Sheet1").Shapes("Bouton0").Copy
     
        Set WbClasseur = Workbooks("Classeur1 (version 1).xls")
        For I = 1 To N
            '****** BLOC1 ******
            'Gestion des boutons
     
            Worksheets("Sheet1").Range("F" & IntLigneCourante).Select
            Worksheets("Sheet1").Paste
            Selection.Name = "Bouton" & I
            IntLigneCourante = IntLigneCourante + 5
        Next I
     
        For I = 1 To N
            '****** BLOC2 ******
            'Gestion des macros associées
            With WbClasseur.VBProject.VBComponents("Feuil1").CodeModule
                X = .CountOfLines
                .InsertLines X + 1, "Sub Bouton" & I & "_Click()"
                .InsertLines X + 2, " "
                .InsertLines X + 3, "End Sub"
            End With
            '******************
        Next I
     
    End Sub

    tu peux aussi créer les boutons dynamiquemt à la place du copier/coller (voir les 2 derniers exemples du paragraphe):

    http://silkyroad.developpez.com/VBA/...icEditor/#LV-A


    bonne soirée
    michel

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Tu crées trois boutons nommés (par défaut) Bouton 1, Bouton 2, et Bouton 3, sur ta feuille de calculs auxquels tu associes la même macro, ici NomsBoutons. Et à chaque nom, tu associes une 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
    Sub NomsBoutons()
        Select Case Application.Caller
            Case "Bouton 1"
               Call macro1
               MsgBox Application.Caller
            Case "Bouton 2"
               MsgBox Application.Caller
               Call macro2
            Case "Bouton 3"
               MsgBox Application.Caller
               Call macro2
            Case Else
               MsgBox Application.Caller
        End Select
    End Sub
    C'est le plus simple que je connaisse sans avoir à écrire du code en dynamique
    mais je n'ai pas tout lu (je regardais OSS117 en même temps ) et je réponds "peut-être" à côté

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bravo ...

    J'avais vu le topic concernant la création des boutons dynamiquement mais je n'avais pas réussi à l'adapter. Le problème était en fait le même, à savoir que j'essayais de faire tout dans un seule boucle.

    En tous les cas merci et félicitations aussi pour les tutoriels que j'ai eu l'occasion de lire. Clairs et précis.

    @++
    Vorillyan

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Merci ouskel'n'or,

    Je ne connais pas le nombre des boutons à créer. Je récupère cette information à partir d'un fichier externe. Cela dit je retiens l'idée excellente d'une macro unique intégrant des choix multiples via le case.

    @++
    Vorillyan

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bon, j'ai lu (le film est terminé...)
    Tu peux associer les deux méthodes, la création des boutons en dynamique et une macro unique pour lancer tes macros pré-écrites.
    Si cette fois je réponds à ce que tu veux

    Edit
    Nos messages se sont croisés. Ok, j'ai enfin compris
    A+

  12. #12
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Oui ouskel'n'or,

    La solution est élégante et évite de multiplier les macros.
    Comme en outre à la fin je dois toute les enlever, cela évite une boucle supplémentaire.

    @++
    Vor

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Réveillé à 5 heures en pensant à ton problème, je n'ai plus pu me rendormir
    Tout ça parce que j'ai déjà été confronté sur le forum à une discussion concernant la création de boutons en dynamique, boutons associés à des procédures tributaires d'une variable.
    La solution retenue avait été d'attribuer pour nom, au bouton créé, la valeur de la variable, string ou valeur. Ainsi, au clic sur le bouton, cette valeur était récupérée, ce qui permettait, dans ce cas précis, de n'avoir qu'une macro.
    Juste pour que mon insomnie ait des chances d'avoir une utilité
    Si je savais, j'irais me recoucher...
    A+

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

Discussions similaires

  1. [VBA-EXCEL]Exécution de macro
    Par fab78 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/08/2006, 12h55
  2. [VBA-excel]Probleme de macro pour creer un graphique.
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/07/2006, 15h42
  3. [VBA Excel] Une même macro pour plusieurs CheckBox
    Par Choupett' dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2006, 13h54
  4. [VBA-E] Associer une macro à une cellule
    Par cwain dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/04/2006, 13h50
  5. [VBA/Excel] Formule via macro
    Par UNi[FR] dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/10/2005, 15h11

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