Userform liste déroulante de modules

Bonjour à tous,

J'ai créé un userForm sous forme de checklist avec des CheckBox à cocher, je voudrai rendre obligatoire de cocher une des cases de chaque ligne avant d'avoir l’accès à une case combobox regroupent les différents modules de la macro (chaque module à un code vba) puis je veux ajouter un CommandButton qui lancera le module choisi. 

Je sais que ça doit être le fouillis pour les dieux du VBA, je ne suis pas programmeur et je ne sais pas si c'est possible?

PS: La macro est lancer par un logiciel de dessin (Solidworks), c'est pour ça que la checklist est dans le userform et non dans une feuille excel.

Merci d'avance


test.jpg

Bonjour,

Voici un exemple qui me semble répond à ce que tu souhaites faire ...

Bon code à toi ...

Cordialement,


macrouserform.swp
3 « J'aime »

Bonjour Roger,

Merci pour ton aide, j'ai changé mon userForm avec ton code pour la checklist ça c'est bon, par contre dans la liste déroulante, j'aurais voulu la liste des 4 modules du dessous (voir image test.jpg) et en fonction du module choisi, lancer la macro du module.

J'espère que c'est possible. 

Merci d'avance

Salut,

Essaie comme ceci :

    For i = 0 To Application.Modules.Count - 1
        MalistBox.AddItem Application.Modules(i).Name         
    Next i

 

1 « J'aime »

Bonjour,

Merci je regarde demain

Bonjour

J'ai testé le code en changent la macro de Roger, je n'y arrive pas 

la liste déroulante n'affiche pas les modules 

 

Bonjour,

Comme les noms de tes 4 modules ne changent jamais tu dois pouvoir le remplir dès le lancement la macro et mettre quelque chose du genre :

Private Sub UserForm_Activate()
   MonCombobox.AddItem ("Mon module 1")
   MonCombobox.AddItem ("Mon module 2")
   MonCombobox.AddItem ("Mon module 3")
   MonCombobox.AddItem ("Mon module 4")
End Sub

Bien sûr tu remplace "MonCombobox" par le nom de ton contrôle et les "Mon module ..." par le nom de tes modules.

Cordialement,

2 « J'aime »

Bonjour,

Et si tu veux vraiment lister tes modules par le code alors tu dois pouvoir faire quelque chose du genre :

Private Sub UserForm_Activate()
    Dim vbProj As VBProject
    Dim vbComp As VBComponent
    Dim i As Integer
    Dim maMacro As String
    maMacro = "MacroUserForm" 'à remplacer par le nom de la macro
    For Each vbProj In Application.VBE.VBProjects
        i = 1
        If vbProj.Name = maMacro Then
            For Each vbComp In vbProj.VBComponents
                If vbProj.VBComponents.Item(i).Type = 1 Then
                    ComboBox1.AddItem vbProj.VBComponents.Item(i).Name
                End If
                i = i + 1
            Next
        End If
    Next
End Sub

Attention, il ne faut pas oublier de mettre "Microsoft Visual Basic for Applications Extensibility" dans Outils/Références.

Cordialement,

3 « J'aime »

Merci Roger,

Je vais tester dans la journée

Après quelques modifications, le userform marche, il m'indique bien tous les modules dans la liste déroulante.

Petit problème voir fichier joint :

1- Dès le départ ma liste déroulante est accessible avec le choix des modules, il vaudrait mieux qu'elle soit grisée tant que les cases ne sont cochées

 2- Le bouton ne lance pas le module choisi dans la liste déroulante

Ça avance, c'est bien 

Merci beaucoup


macrouserform_2.swp

Bonjour,

Tu peux par exemple faire comme dans la macro jointe mais ce n'est qu'un exemple, à toi d'adapter à ton besoin.

Cordialement,


macrouserform_3.swp
1 « J'aime »

Bonjour Roger,

ça marche ooooooh, t'es trop fort 

 J'avais une erreur :( Erreur 438" objet ne gère pas cette propriété ou méthode)

Pour que ça passe, j'ai enlevé le .Value à la ligne:         If TypeName(Ctrl) = "CheckBox" And Ctrl.Object.Value = "Vrai" Then Nbre = Nbre + 1

Je suis trop content

Merci merci merci beaucoup d'avoir pris de ton temps pour moi.