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
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.