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

5 respuestas

  1. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    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
    0
    1. leyjah Mensajes publicados 16 Estado Miembro
       
      muchas gracias Frank P,

      funciona perfectamente.

      CDLT

      Leyjah
      0
  2. leyjah Mensajes publicados 16 Estado Miembro
     
    no, pas spécialement.
    0
  3. leyjah Mensajes publicados 16 Estado Miembro
     
    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
    0
    1. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
       
      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 
      0
  4. leyjah Mensajes publicados 16 Estado Miembro
     
    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
    0
  5. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
     
    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
    0
    1. leyjah Mensajes publicados 16 Estado Miembro
       
      Formidable, muchas gracias, BEAUCOUP Pijaku, es perfecto

      Saludos

      Leyjah
      0
    2. pijaku Mensajes publicados 13513 Fecha de registro   Estado Moderador Última intervención   2 773
       
      De nada.
      Hasta luego, no dudes.
      0