Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

ListBox dans UserForm [VBA]

4 réponses
Avatar
philip
Bonjour,
Je crée un UserForm avec des ListBox de la façon suivante :
Dim Form as Object, Tabl(3) as String, i as Integer, j as Integer
Dim NewListBox as MSForms.ListBox, NomBook as String

NomBook=ThisWorkBook.Name
'renseignement du tableau
For i=1 to 3: Tabl(i)="xxx" & i: Next i
'création d'un UserForm
Set Form=ThisWorkBook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
On Error Resume Next
Application.WorkBooks(NomBook).VBProject.VBComponents.Remove_
Application.WorkBooks(NomBook).VBProject.VBComponents("UserFormAmoi")
Application.WorkBooks(NomBook).Save
On Error GoTo 0
With Form
.Properties("Name")="UserFormAmoi"
End With
'ajoute les ListBox au UserForm
For i=1 to 3
Set NewListBox=Form.Designer.Controls.Add("Forms.listbox.1")
With NewListBox
For j=1 to 3
.AdddItem Tabl(j)
Next j
End With
Next i
'affiche le UserForm
Load VBA.UserFormS.Add(Form.Name)
VBA.UserFormS.Add(Form.Name).Show

Le UserForm s'affiche bien, mais avec des ListBox vides.
Avez-vous une idée sur la raison de cette absce d'informations dans les
listBox ?
Merci de votre aide

4 réponses

Avatar
JFrancois QC
Salut,
Si tu mettais les additem entre le load et le show ?


Bonjour,
Je crée un UserForm avec des ListBox de la façon suivante :
Dim Form as Object, Tabl(3) as String, i as Integer, j as Integer
Dim NewListBox as MSForms.ListBox, NomBook as String

NomBook=ThisWorkBook.Name
'renseignement du tableau
For i=1 to 3: Tabl(i)="xxx" & i: Next i
'création d'un UserForm
Set Form=ThisWorkBook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
On Error Resume Next
Application.WorkBooks(NomBook).VBProject.VBComponents.Remove_
Application.WorkBooks(NomBook).VBProject.VBComponents("UserFormAmoi")
Application.WorkBooks(NomBook).Save
On Error GoTo 0
With Form
.Properties("Name")="UserFormAmoi"
End With
'ajoute les ListBox au UserForm
For i=1 to 3
Set NewListBox=Form.Designer.Controls.Add("Forms.listbox.1")
With NewListBox
For j=1 to 3
.AdddItem Tabl(j)
Next j
End With
Next i
'affiche le UserForm
Load VBA.UserFormS.Add(Form.Name)
VBA.UserFormS.Add(Form.Name).Show

Le UserForm s'affiche bien, mais avec des ListBox vides.
Avez-vous une idée sur la raison de cette absce d'informations dans les
listBox ?
Merci de votre aide


Avatar
Ange Ounis
Sans préjuger du résultat de la proposition qui t'a déjà été faite (à laquelle
j'avais aussi pensé mais que je n'arrive pas à faire fonctionner), je te propose
une autre approche : remplir tes listbox par l'intermédiaire de l'événement
Initialize du UserForm. Ça peut donner quelque chose comme ça :

'''''''''''''''''''''''''
Sub essai()
NomBook = ThisWorkbook.Name
'renseignement du tableau
ReDim Tabl(1 To 3)
For i = 1 To 3: Tabl(i) = "xxx" & i: Next i
'création d'un UserForm
Set form = ThisWorkbook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
' On Error Resume Next
' Application.Workbooks(NomBook).VBProject.VBComponents.Remove_
' Application.Workbooks(NomBook).VBProject.VBComponents ("UserFormAmoi")
' Application.Workbooks(NomBook).Save
' On Error GoTo 0
With form
.Properties("Name") = "UserForm6"
End With
'ajoute les ListBox au UserForm
For i = 1 To 3
Set NewListBox = form.Designer.Controls.Add("Forms.listbox.1")
Next i
'************************
With form.codemodule
.insertlines 1, "Sub UserForm_Initialize()"
.insertlines 2, " For i=1 To 3"
.insertlines 3, " ListBox1.AddItem i"
.insertlines 4, " ListBox2.AddItem i"
.insertlines 5, " ListBox3.AddItem i"
.insertlines 6, " Next i"
.insertlines 7, "End Sub"
End With
'*************************
'affiche le UserForm
' Load VBA.UserForms.Add(Form.Name)
VBA.UserForms.Add(form.Name).Show
End Sub
'''''''''''''''''''''''''

----------
Ange Ounis
----------

Bonjour,
Je crée un UserForm avec des ListBox de la façon suivante :
Dim Form as Object, Tabl(3) as String, i as Integer, j as Integer
Dim NewListBox as MSForms.ListBox, NomBook as String

NomBook=ThisWorkBook.Name
'renseignement du tableau
For i=1 to 3: Tabl(i)="xxx" & i: Next i
'création d'un UserForm
Set Form=ThisWorkBook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
On Error Resume Next
Application.WorkBooks(NomBook).VBProject.VBComponents.Remove_
Application.WorkBooks(NomBook).VBProject.VBComponents("UserFormAmoi")
Application.WorkBooks(NomBook).Save
On Error GoTo 0
With Form
.Properties("Name")="UserFormAmoi"
End With
'ajoute les ListBox au UserForm
For i=1 to 3
Set NewListBox=Form.Designer.Controls.Add("Forms.listbox.1")
With NewListBox
For j=1 to 3
.AdddItem Tabl(j)
Next j
End With
Next i
'affiche le UserForm
Load VBA.UserFormS.Add(Form.Name)
VBA.UserFormS.Add(Form.Name).Show

Le UserForm s'affiche bien, mais avec des ListBox vides.
Avez-vous une idée sur la raison de cette absce d'informations dans les
listBox ?
Merci de votre aide


Avatar
philip
Merci Ange Ounis de ta réponse. Elle m'a fait avancer. J'obtiens maintenant
des listbox qui ne sont plus vides. Mais le résultat final est difficile à
mettre au point. En réalité, je n'ai pas toujours trois listbox, mais un
nombre variable. Et c'est là que le système ne veut plus, lorsque je mes en
variable le N° de la listbox. Ca donne cela :
'ajoute un gestionnaire d'événement sub pour le userform
With Form.CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Sub UserForm_Initialize()"
.InsertLines Line + 2, "Dim i As Integer, j As Integer"
.InsertLines Line + 3, "For i = 1 To NbListBox"
.InsertLines Line + 4, "For j = 1 To Nbxx"
.InsertLines Line + 5, "With ListBox & i"
.InsertLines Line + 6, ".AddItem Tabl(j)"
.InsertLines Line + 7, "End With"
.InsertLines Line + 8, "Next j"
.InsertLines Line + 9, "Next i"
.InsertLines Line + 10, "End Sub"

C'est ce fameux ListBox & i qui ne fonctionne pas. J'ai Erreur d'exécution
424 : Objet requis.
Quoi est-ce encore que ça ? As-tu une idée ?
Merci pour ton aide


Sans préjuger du résultat de la proposition qui t'a déjà été faite (à laquelle
j'avais aussi pensé mais que je n'arrive pas à faire fonctionner), je te propose
une autre approche : remplir tes listbox par l'intermédiaire de l'événement
Initialize du UserForm. Ça peut donner quelque chose comme ça :

'''''''''''''''''''''''''
Sub essai()
NomBook = ThisWorkbook.Name
'renseignement du tableau
ReDim Tabl(1 To 3)
For i = 1 To 3: Tabl(i) = "xxx" & i: Next i
'création d'un UserForm
Set form = ThisWorkbook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
' On Error Resume Next
' Application.Workbooks(NomBook).VBProject.VBComponents.Remove_
' Application.Workbooks(NomBook).VBProject.VBComponents ("UserFormAmoi")
' Application.Workbooks(NomBook).Save
' On Error GoTo 0
With form
.Properties("Name") = "UserForm6"
End With
'ajoute les ListBox au UserForm
For i = 1 To 3
Set NewListBox = form.Designer.Controls.Add("Forms.listbox.1")
Next i
'************************
With form.codemodule
.insertlines 1, "Sub UserForm_Initialize()"
.insertlines 2, " For i=1 To 3"
.insertlines 3, " ListBox1.AddItem i"
.insertlines 4, " ListBox2.AddItem i"
.insertlines 5, " ListBox3.AddItem i"
.insertlines 6, " Next i"
.insertlines 7, "End Sub"
End With
'*************************
'affiche le UserForm
' Load VBA.UserForms.Add(Form.Name)
VBA.UserForms.Add(form.Name).Show
End Sub
'''''''''''''''''''''''''

----------
Ange Ounis
----------

Bonjour,
Je crée un UserForm avec des ListBox de la façon suivante :
Dim Form as Object, Tabl(3) as String, i as Integer, j as Integer
Dim NewListBox as MSForms.ListBox, NomBook as String

NomBook=ThisWorkBook.Name
'renseignement du tableau
For i=1 to 3: Tabl(i)="xxx" & i: Next i
'création d'un UserForm
Set Form=ThisWorkBook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
On Error Resume Next
Application.WorkBooks(NomBook).VBProject.VBComponents.Remove_
Application.WorkBooks(NomBook).VBProject.VBComponents("UserFormAmoi")
Application.WorkBooks(NomBook).Save
On Error GoTo 0
With Form
.Properties("Name")="UserFormAmoi"
End With
'ajoute les ListBox au UserForm
For i=1 to 3
Set NewListBox=Form.Designer.Controls.Add("Forms.listbox.1")
With NewListBox
For j=1 to 3
.AdddItem Tabl(j)
Next j
End With
Next i
'affiche le UserForm
Load VBA.UserFormS.Add(Form.Name)
VBA.UserFormS.Add(Form.Name).Show

Le UserForm s'affiche bien, mais avec des ListBox vides.
Avez-vous une idée sur la raison de cette absce d'informations dans les
listBox ?
Merci de votre aide





Avatar
Ange Ounis
Essaye de remplacer :

.InsertLines Line + 5, "With ListBox & i"
.InsertLines Line + 6, ".AddItem Tabl(j)"
.InsertLines Line + 7, "End With"


Par :
.InsertLines Line + 5, "Me.Controls(""ListBox"" & i).AddItem Tabl(j)"


(et renumérote les lignes suivantes of course).

----------
Ange Ounis
----------

Merci Ange Ounis de ta réponse. Elle m'a fait avancer. J'obtiens maintenant
des listbox qui ne sont plus vides. Mais le résultat final est difficile à
mettre au point. En réalité, je n'ai pas toujours trois listbox, mais un
nombre variable. Et c'est là que le système ne veut plus, lorsque je mes en
variable le N° de la listbox. Ca donne cela :
'ajoute un gestionnaire d'événement sub pour le userform
With Form.CodeModule
Line = .CountOfLines
.InsertLines Line + 1, "Sub UserForm_Initialize()"
.InsertLines Line + 2, "Dim i As Integer, j As Integer"
.InsertLines Line + 3, "For i = 1 To NbListBox"
.InsertLines Line + 4, "For j = 1 To Nbxx"
.InsertLines Line + 5, "With ListBox & i"
.InsertLines Line + 6, ".AddItem Tabl(j)"
.InsertLines Line + 7, "End With"
.InsertLines Line + 8, "Next j"
.InsertLines Line + 9, "Next i"
.InsertLines Line + 10, "End Sub"

C'est ce fameux ListBox & i qui ne fonctionne pas. J'ai Erreur d'exécution
424 : Objet requis.
Quoi est-ce encore que ça ? As-tu une idée ?
Merci pour ton aide


Sans préjuger du résultat de la proposition qui t'a déjà été faite (à laquelle
j'avais aussi pensé mais que je n'arrive pas à faire fonctionner), je te propose
une autre approche : remplir tes listbox par l'intermédiaire de l'événement
Initialize du UserForm. Ça peut donner quelque chose comme ça :

'''''''''''''''''''''''''
Sub essai()
NomBook = ThisWorkbook.Name
'renseignement du tableau
ReDim Tabl(1 To 3)
For i = 1 To 3: Tabl(i) = "xxx" & i: Next i
'création d'un UserForm
Set form = ThisWorkbook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
' On Error Resume Next
' Application.Workbooks(NomBook).VBProject.VBComponents.Remove_
' Application.Workbooks(NomBook).VBProject.VBComponents ("UserFormAmoi")
' Application.Workbooks(NomBook).Save
' On Error GoTo 0
With form
.Properties("Name") = "UserForm6"
End With
'ajoute les ListBox au UserForm
For i = 1 To 3
Set NewListBox = form.Designer.Controls.Add("Forms.listbox.1")
Next i
'************************
With form.codemodule
.insertlines 1, "Sub UserForm_Initialize()"
.insertlines 2, " For i=1 To 3"
.insertlines 3, " ListBox1.AddItem i"
.insertlines 4, " ListBox2.AddItem i"
.insertlines 5, " ListBox3.AddItem i"
.insertlines 6, " Next i"
.insertlines 7, "End Sub"
End With
'*************************
'affiche le UserForm
' Load VBA.UserForms.Add(Form.Name)
VBA.UserForms.Add(form.Name).Show
End Sub
'''''''''''''''''''''''''

----------
Ange Ounis
----------

Bonjour,
Je crée un UserForm avec des ListBox de la façon suivante :
Dim Form as Object, Tabl(3) as String, i as Integer, j as Integer
Dim NewListBox as MSForms.ListBox, NomBook as String

NomBook=ThisWorkBook.Name
'renseignement du tableau
For i=1 to 3: Tabl(i)="xxx" & i: Next i
'création d'un UserForm
Set Form=ThisWorkBook.VBProject.VBComponents.Add(3)
'suppression du UserForm précédent
On Error Resume Next
Application.WorkBooks(NomBook).VBProject.VBComponents.Remove_
Application.WorkBooks(NomBook).VBProject.VBComponents("UserFormAmoi")
Application.WorkBooks(NomBook).Save
On Error GoTo 0
With Form
.Properties("Name")="UserFormAmoi"
End With
'ajoute les ListBox au UserForm
For i=1 to 3
Set NewListBox=Form.Designer.Controls.Add("Forms.listbox.1")
With NewListBox
For j=1 to 3
.AdddItem Tabl(j)
Next j
End With
Next i
'affiche le UserForm
Load VBA.UserFormS.Add(Form.Name)
VBA.UserFormS.Add(Form.Name).Show

Le UserForm s'affiche bien, mais avec des ListBox vides.
Avez-vous une idée sur la raison de cette absce d'informations dans les
listBox ?
Merci de votre aide