Bonjour,
J'ai un problème. Je programme habituellement plus en VB, surtout en évènementiel, alors je débute dans les macros VBA d'Excel.
Je veux créer dans un classeur(appellons-le "static") tout le code pour traiter les données de différents autres classeurs, et faire des graphiques de ces données.
J'arrive à créer un UserForm dynamique, mais avec beaucoup de difficulté. Je dois en créer un dans "thisworkbook" d'abord, ce qui le crée dans mon classeur static, pour ensuite le créer dans l'autre classeur(sinon, il n'apparaissait pas dans ce dernier).
OU
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Function creationUserForm(nomForm As String) As Object Set USF = ThisWorkbook.VBProject.VBComponents.Add(3)
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Set USF = ActiveWorkbook.VBProject.VBComponents.Add(3)
Je l'appelle ainsi, dans un sub me mon classeur "static", qui lui est la macro exécutée
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 With USF .Properties("Caption") = nomForm .Properties("Width") = 505 .Properties("Height") = 115 .Properties("Left") = 200 .Properties("Top") = 90 End With 'Ajout des plusieurs checkbox Set Chk = USF.Designer.Controls.Add("Forms.CheckBox.1") With Chk .Left = lpLeft .Top = lpTop .Width = lpWidth .Height = lpHeight .Caption = "affichage" .Name = "Nom du chk" End With With USF.CodeModule 'code sur le checkbox Code = "Sub " & Chk.Name & "_Change()" & vbCrLf Code = ..Code Code = Code & "End Sub" J2 = .CountOfLines .InsertLines J2 + 1, Code End With VBA.UserForms.Add (USF.Name) 'ICI, ME DONNE LE MESSAGE "OBJET REQUIS" SI USF= ACTIVEWORKBOOK.VBPROJECT.VBCOMPONENTS, comme si vba.userforms n'existait pas Set creationUserForm = UserForms(UserForms.Count - 1) End Function
Donc, avec THISWORKBOOK n'affiche rien, ACTIVEWORKBOOK n'affiche dans l'autre classeur que s'il y a 1 userform dans le classeur static, qui n'a pas été affiché, et plante si essayé seul.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Dim X As Object Set X = creationUserForm("UserForm1") X.Show vbModeless
Le UserForm s'affiche ainsi, mais je n'arrive pas à vérifier la valeur des checkbox. J'ai maintenant 2 UserForm1, 1 dans mon classeur Static, l'autre dans l'autre classeur dit "1".
Mais le code dans mon classeur "static" ne voit que les valeurs des chekbox qui se trouvent dans celui qui n'est pas affiché. J'ai certainement manqué quelque chose... c'est comme si le UserForm1 affiché était celui de mon classeur 1(il apparaît à sa création), mais que les valeurs trouvées dans le code userform1.controls correspondaient aux checkbox du classeur static. Je ne sais pas si j'arrive à être claire...
Je ne suis pas très connaissante dans les objets d'Excel et je n'arrive pas à m'y retrouver. Tout ce que je veux au final, c'est que l'utilisateur ouvre son classeur "1", qu'il démarre la macro "Principale", qui se trouve dans mon classeur "static", et que cette dernière crée un formulaire avec des cases à cocher dans mon classeur "1", pour que l'utilisateur coche ces cases, ce qui génèrera un graphique selon la case cochée. Je n'en suis pas très loin, me manque juste le bug relié au UserForm créé dynamiquement.
Si quelqu'un pouvait m'aider, j'apprécierais grandement!
Merci!
Partager