Modificar el valor de una listbox
Resuelto
leyjah
Mensajes publicados
16
Estado
Miembro
-
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
pijaku Mensajes publicados 13513 Fecha de registro Estado Moderador Última intervención -
Hola,
solicito vuestra ayuda porque tengo un pequeño problema con mi aplicación.
Aquí está lo que sucede:
1. tengo 2 userforms: CLIENTS y modificación
2. En CLIENTS, tengo tres cuadros de lista, zn1 (productos), zn2 (cantidad) zn3 (monto), un botón de comando (MODIFICAR).
3. gracias a MODIFICAR, los valores seleccionados en zn1, 2 y 3 se transfieren a unos cuadros de texto en un userform modificación.
CÓDIGO:
Private Sub CommandButton1_Click()
modification.zdt1 = zn1.Value
modification.zdt2 = zn2.Value
modification.zdt3 = zn3.Value
modification.Show
End Sub
Lo que me gustaría es que:
si modifico los valores escritos en los cuadros de texto (zdt1, 2 y 3) de modificación, se actualicen en los cuadros de lista (zn1, 2 y 3) de CLIENTS.
CÓDIGO DE PRUEBA:
Private Sub CommandButton1_Click()
CLIENTS.zn1.RemoveItem
CLIENTS.zn2.RemoveItem
CLIENTS.zn3.RemoveItem
CLIENTS.zn1.AddItem zdt1.Value
CLIENTS.zn2.AddItem zdt2.Value
For i = 2 To 46
If zdt1.Value = Cells(i, 1) Then
CLIENTS.zn3.AddItem (zdt2.Value * Cells(i, 3))
End If
Next
modification.Hide
End Sub
GRACIAS POR TODA LA AYUDA QUE PUEDA PROPORCIONAR
Cordialmente.
Configuración: Windows 7 / Firefox 20.0
solicito vuestra ayuda porque tengo un pequeño problema con mi aplicación.
Aquí está lo que sucede:
1. tengo 2 userforms: CLIENTS y modificación
2. En CLIENTS, tengo tres cuadros de lista, zn1 (productos), zn2 (cantidad) zn3 (monto), un botón de comando (MODIFICAR).
3. gracias a MODIFICAR, los valores seleccionados en zn1, 2 y 3 se transfieren a unos cuadros de texto en un userform modificación.
CÓDIGO:
Private Sub CommandButton1_Click()
modification.zdt1 = zn1.Value
modification.zdt2 = zn2.Value
modification.zdt3 = zn3.Value
modification.Show
End Sub
Lo que me gustaría es que:
si modifico los valores escritos en los cuadros de texto (zdt1, 2 y 3) de modificación, se actualicen en los cuadros de lista (zn1, 2 y 3) de CLIENTS.
CÓDIGO DE PRUEBA:
Private Sub CommandButton1_Click()
CLIENTS.zn1.RemoveItem
CLIENTS.zn2.RemoveItem
CLIENTS.zn3.RemoveItem
CLIENTS.zn1.AddItem zdt1.Value
CLIENTS.zn2.AddItem zdt2.Value
For i = 2 To 46
If zdt1.Value = Cells(i, 1) Then
CLIENTS.zn3.AddItem (zdt2.Value * Cells(i, 3))
End If
Next
modification.Hide
End Sub
GRACIAS POR TODA LA AYUDA QUE PUEDA PROPORCIONAR
Cordialmente.
Configuración: Windows 7 / Firefox 20.0
5 respuestas
-
Hola,
Así es como procederé:
1- creación de un módulo estándar
2- en este módulo, declarar 3 variables públicas:Public Var1 As String Public Var2 As String Public Var3 As String
3- El código del botón del userform CLIENTS se convierte en:Private Sub CommandButton1_Click() Var1 = zn1.Value Var2 = zn2.Value Var3 = zn3.Value With modification .zdt1 = zn1.Value .zdt2 = zn2.Value .zdt3 = zn3.Value .Show End With End Sub
4- el código del botón "Modificar" en el userform "modification" :Private Sub CommandButton1_Click() Dim i As Integer With CLIENTS For i = 0 To .zn1.ListCount - 1 If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value Next i For i = 0 To .zn2.ListCount - 1 If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value Next i For i = 0 To .zn3.ListCount - 1 If .zn3.List(i) = Var3 Then .zn3.List(i) = zdt3.Value Next i modification.Hide End With End Sub
5- subsidiario : habría que, quizá, impedir la entrada, en los textbox, de un item ya existente en las listbox... ¡O no!
Cordialmente,
Franck P -
-
todavía tengo un pequeño problema que persiste: a este nivel: Private Sub CommandButton1_Click() Dim i As Integer With CLIENTS For i = 0 To .zn1.ListCount - 1 If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value Next i For i = 0 To .zn2.ListCount - 1 If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value Next i For i = 0 To .zn3.ListCount - 1 If .zn3.List(i) = Var3 Then .zn3.List(i) = zdt3.Value Next i modification.Hide End With zdt3.value en général contient un produit (la valeur de la zdt2 * une valeur présente dans une cellule de ma feuille de calcul). Est-ce que tu peux m’éclairer un peu STP. CDLT
-
Bonjour,
Suffit, une fois zn2 modifié, de multiplier sa valeur par la valeur contenue dans la cellule.
Private Sub CommandButton1_Click() Dim i As Integer With CLIENTS For i = 0 To .zn1.ListCount - 1 If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value Next i For i = 0 To .zn2.ListCount - 1 If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value .zn3.List(i) = zdt2.Value * Sheets("Machin").Range("Truc") End If Next i modification.Hide End With
-
-
http://cjoint.com/data/0Dto1NU7Kbu.htm
así entenderás quizá mejor lo que deseo porque eso:
.zn3.List(i) = zdt2.Value * Sheets("Machin").Range("Truc")
no podrá funcionar ya que las celdas varían en función del producto seleccionado.
Saludos
Leyjah -
Sí.
Entonces debes:
- insertar un módulo (Inserción/módulo bajo VBE)
y colocar estas declaraciones:Public Var1 As String Public Var2 As String Public Var3 As String
2- el botón Modificar del UserForm Clientes se convierte en:Private Sub CommandButton1_Click() Var1 = zn1.Value Var2 = zn2.Value Var3 = zn3.Value With modification .zdt1 = zn1.Value .zdt2 = zn2.Value .zdt3 = zn3.Value .Show End With End Sub
3- el botón Modificar del UserForm modificaciones se convierte en :Private Sub CommandButton1_Click() Dim i As Integer, Prix As Double, Trouve As Range 'va a buscar la celda de la columna A que contiene la selección en la lista zn1 With Sheets("Feuil1") Set Trouve = .Columns(1).Cells.Find(Var1, lookat:=xlWhole) End With 'si lo encuentra entonces guardamos en prix el contenido de la columna C correspondiente, Sino no hacemos nada más If Not Trouve Is Nothing Then Prix = Trouve.Offset(0, 2).Value Else Exit Sub With CLIENTS For i = 0 To .zn1.ListCount - 1 If .zn1.List(i) = Var1 Then .zn1.List(i) = zdt1.Value Next i For i = 0 To .zn2.ListCount - 1 If .zn2.List(i) = Var2 Then .zn2.List(i) = zdt2.Value .zn3.List(i) = zdt2.Value * Prix End If Next i modification.Hide End With End Sub
Tu archivo de ejemplo de vuelta
--
Cordialmente,
Franck P