Cette ligne crée "Userform1", qui, à mon avis, existe déjà.
(C'est bien ce que tu voulais dire, Ousk?)
Donc, supprime rageusement cette ligne qui n'a rien à faire ici, et tout ira mieux.
Version imprimable
Cette ligne crée "Userform1", qui, à mon avis, existe déjà.
(C'est bien ce que tu voulais dire, Ousk?)
Donc, supprime rageusement cette ligne qui n'a rien à faire ici, et tout ira mieux.
meric pour l'info :D
mais hélas je n'arrive toujours pas à faire tourner la macro :(
oui c'est le code de silky en fait que j'ai essayé, et qui me donne le message d'erreur en question
Et tu as bien enlevé la ligne qu' Ouskel'n'or t'a indiquée?
ok, le code de silky remarche (comprend pas pourquoi il a pas marché pendant une demiheure, g redémarré excel et ça marche a nouveau)
quant à mes changements pour ajouter plusieurs checkbox à partir d'une boucle, ça ne marche toujours pas.. (g bien enlevé la ligne en question)
Est-ce que tu veux nous remettre ton code actuel, et le descriptif de l'erreur, et la ligne mise en cause?
voici les deux codes, celui de silky et le mien, le premier marche, le mien pas, bouhouhouuuuu
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Sub truc() Dim Usf As VBComponent Dim Obj As MSForms.CheckBox Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1") Set Obj = Usf.Designer.Controls.Add("forms.CheckBox.1") With Obj .Left = 30: .Top = 40: .Width = 60: .Height = 20 End With VBA.UserForms.Add (Usf.Name) UserForms(0).Show End Sub
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Sub chose() Dim Usf As VBComponent Dim Obj() As MSForms.CheckBox NbPers = 9 ReDim Obj(NbPers) Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1") For i = 1 To NbPers Set Obj(i) = Usf.Designer.Controls.Add("forms.CheckBox.1") With Obj(i) .Left = 30: .Top = 40 + 20 * i: .Width = 60: .Height = 20 End With Next UserForm1.Show End Sub
Et l'erreur, c'est toujours celle du début, avec i = 1, sur la ligne Set obj(i)... ?
oui, c'est toujours pour i=1
Je me demande si c'est pas une histoire d'appellation de userform
Vu que ma userform1 existe déjà, puis-je supprimer la ligne "set usf..." et directement faire un truc genre
haaaCode:Set Obj(i) = userform1.Controls.Add("forms.CheckBox.1")
j'avais essayé, ça marchait pas et là ça a l'air de marcher
je vérifie si ça marche bien, puis je vous dis ça[/code]
mais suis-je donc un âne, du coup, la userform1 n'est mise en forme que pour le temps de l'exécution de la macro et redevient vierge ensuite pfff
Ha ben là, tu reviens à la question que j'ai posée à Silky quand il a donné son code: est-ce qu'il ne faut pas enregistrer le fichier Excel?
Et cette ligne
Tu ne l'as mets pas ? Pourtant, à moi, elle me paraissait utile... après la boucle... Mais bah !Code:VBA.UserForms.Add (Usf.Name)
:sleep:
En outre, pour une question de nettoyage, je mettraissinon je me demanderais toujours de que sont devenus mes Obj(i) une fois la procédure terminéeCode:
1
2
3
4
5 Set Obj(i) = Usf.Designer.Controls.Add("forms.CheckBox.1") With Obj(i) .Left = 30: .Top = 40 + 20 * i: .Width = 60: .Height = 20 End With Set Obj(i) = Nothing
Mais j'en sais rien... Je n'ai rien testé et je parle peut-être dans le vide... :wink:
:sleep:
NB - Si ta form existe sur ton fichier, prends-en un tout neuf parce que si ta form existe déjà et que "par hasard" elle s'appelle déjà userform1, tu vas avoir une erreur... T'as une erreur ?
:sleep:
ben disons qu'en exécutant le code de silky, après l'exécution de la macro, on regarde la userform et les modif apparaissent
en enlevant la ligne "set usf...", mon code marche mais, après l'exécution de la macro, les modifs n'apparaissent pas (elles apparaissent seulement pendant l'exécution de la macro sur "userform1.show")
bonjour à tous
tu peux tester cette adaptation
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Dim NbPers As Byte, i As Byte Dim Usf As VBComponent Dim Obj As MSForms.CheckBox NbPers = 9 Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1") For i = 1 To NbPers Set Obj = Usf.Designer.Controls.Add("forms.CheckBox.1") With Obj .Left = 30: .Top = 40 + 20 * i: .Width = 60: .Height = 20 End With Next VBA.UserForms.Add (Usf.Name) UserForms(0).Show
cher Megaxel , je ne comprend pas ta remarque sur l'enregistrement du classeur
bone soiree
michel
je venais d'arriver à un résultat similaire qui marchait bien. Je me creusait les méninges pour savoir comment réinitialiser la userform ensuite (j'arrive pas à supprimer les checkbox)
ma demande peut paraitre contradictoire vu que je voulais justement les garder, ces checkbox. Disons que la userform va rester la même 9 fois sur 10, mais de temps en temps peut être amenée à être modifiée, et donc il faudrait supprimer ces checkbox. Tu me suis ? merci pour ton aide
Rhaah je touche au but, mais pas encore !
yahoooo
quand on en a besoin :
et hop !Code:
1
2 Set Usf = ThisWorkbook.VBProject.VBComponents("UserForm1") Usf.Designer.Clear
je continue puis je vous montre quand ça ressemble un peu à qqch
Merci ouskel'n'or, mais ça me plaisait pas trop de juste les rendre invisible, ptêt elles seraient restées des années cachées comme ça, ces pauvres checkbox !
Vincent (de passage à l'ileverte ya 2 jours)
bonjour,
bon, ce cri de joie d'hier n'a été qu'une fausse joie.
Ces deux lignes du pour effacer les contrôles de la userform1 marchent, en test, mais quand on lance la macro à partir d'un bouton de la feuille ça ne marche pas ??
comprend pas...
voici le début de mon code
la userform1 existe pourtant...Code:
1
2
3
4
5
6
7 Private Sub CommandButton1_Click() Dim usf As VBComponent Set usf = ThisWorkbook.VBProject.VBComponents("UserForm1") usf.Designer.Clear
je me perds dans l'aide de vba, mais je pense que ça a quelquechose à voir avec le concept de fenêtre de conception auquel je ne comprend pas gd chose...
bon je me suis lancé sur un fichier plus simple
j'ai un commandbutton sur ma feuille 1 et c'est tout
Cette macro marche une fois sur deux. Pourquoi ??? :(
Code:
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 Private Sub CommandButton1_Click() Dim bidule As VBComponent Set bidule = ThisWorkbook.VBProject.VBComponents("UserForm1") bidule.DesignerWindow.Close bidule.Designer.Clear Set prout = bidule.Designer.Controls.Add("forms.label.1") With prout .Left = 20 .Top = 10 .Width = 130 .Height = 20 .Caption = "boum" End With VBA.UserForms.Add (bidule.Name) Call apparition End Sub Sub apparition() UserForm1.Show End Sub
A+Code:
1
2
3
4
5
6
7 Sub SupprimerUnModules() NomModule = "MaFormAmoi" NomFichier = "Classeur1" With Workbooks(NomFichier) .VBComponents.Remove .VBComponents(NomModule) End with End Sub