XL 2016 ComboBox liste de macro / exécution via un bouton "Valider"

Corsair

XLDnaute Nouveau
Bonjour la communauté,

Je suis en recherche depuis quelques jours d'un code VBA me permettant de valider une macro sélectionnée depuis une combobox sur un UserForm l'idée générale est la suivante :

Avoir l'userform qui s'ouvre et qui me répertorie l'ensemble des macros que je souhaite exécuter via une liste (voir image)
11111.png


Je bloque uniquement sur le fait qu'au lieu que la macro s'exécute dès la sélection de "Macro 1" par exemple, je souhaiterais valider avant.
L'exemple montre 2 macros, mais j'ai au moins une vingtaine de macros déjà paramétrées et il peut arriver que dans la précipitation je sélectionne la mauvaise macro (en cas d'exécution systématique, d'où ma volonté d'avoir un bouton "valider").

En vous remerciant par avance de votre aide :)
 

Lone-wolf

XLDnaute Barbatruc
Bonsoir Corsair et bienvenue sur XLD :)

Dans ComboBox1_Change() tu ne met pas l'appel des macros. Ou tu supprime

ComboBox1_Change()
xxxx
End Sub

Note: personnellement, je mettrais un nom spécifique à chaque macro. Exemples

Sub Ajouter - Sub Modfier - Sub Supprimer - Sub MàJ(mise à jour) etc. Sinon, comment tu vas savoir que fait la macro10 -macro5 - macro18 etc.??:rolleyes: Regarde en Feuil2 comment j'ai fait, ensuite les 3 macros.

VB:
Private Sub UserForm_Initialize()
Dim x&, tbl

    With Feuil2
        x = .Range("a" & Rows.Count).End(xlUp).Row
        tbl = .Range("a2:a" & x)
    End With
    ComboBox1.List = tbl
End Sub

Private Sub CommandButton1_Click()
    If ComboBox1.Text <> "" Then
        Run ComboBox1.Text
    End If
End Sub


Classeur exemple avec 3 macros. Double-clique sur Feuil1 pour afficher le formulaire.
 

Pièces jointes

  • Classeur exemple.xlsm
    20.4 KB · Affichages: 55
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re Dranreb

@Dranreb

Effectivement. Comme aprés test avec call il y avait un message d'erreur, j'ai rectifié avec Run.
Mais avec Run normalement on écrit comme ceci: Run "Macro1", si je ne dit pas de bétises. Comment ça ce fait que ça marche, alors qu'il n'y a pas de guillemets?
 

Corsair

XLDnaute Nouveau
Re, re

Impeccable :) merci pour votre aide, c'est ce que je cherchais :)

Sub Ajouter - Sub Modfier - Sub Supprimer - Sub MàJ(mise à jour) etc. Sinon, comment tu vas savoir que fait la macro10 -macro5 - macro18 etc.??:rolleyes: Regarde en Feuil2 comment j'ai fait, ensuite les 3 macros.

J'avais vu la première version du fichier que tu as fais, j'allais justement te poser la question pour savoir si je pouvais avoir une genre de liste dynamique avec une genre de rowsource plutôt qu'un AddItem ^^

Là j'ai pu changer les noms et activer la macro que je sélectionne, du coup, tout semble marcher chez moi ^^
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Corsair, Dranreb, le Forum :)

@Dranreb : d'accord, je vois ce que tu veux dire.

@Corsair : pour la liste dynamique, regarde la macro du post #2. La combo est alimentée par un tableau, pas besoin de rowsource ou additem. Si tu veux lister les macros par macro

VB:
Sub Liste_Macros()
'En mode VBA clique sur Outils > Références
'Active la référence:  Microsoft Visual Basic For Application Extensibility x.x
Dim deb&, i&, x&
Dim VBCmp As VBComponent
Dim cdMod As CodeModule
Dim Wb As Workbook

    'Indiquer le nom du classeur ouvert
    Set Wb = ThisWorkbook
    x = 1
    i = 2

    For Each VBCmp In Wb.VBProject.VBComponents
        Set cdMod = VBCmp.CodeModule

        With cdMod
            deb = .CountOfDeclarationLines + 1
            Do Until deb >= .CountOfLines
                'Nom des macros
                Feuil2.Cells(i, 1) = .ProcOfLine(deb, vbext_pk_Proc)
                deb = deb + _
                      .ProcCountLines(.ProcOfLine(deb, _
                                                  vbext_pk_Proc), vbext_pk_Proc)
                x = x + 1
                i = i + 1
            Loop
        End With

    Next VBCmp
End Sub

Une fois fait, veille à supprimer Liste_Macros pour ne pas l'avoir dans la combo.
 
Dernière édition:

Discussions similaires