Botón_Modificar_seleccionar_listBox

Resuelto
zouzou -  
yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   -

Hola,

Quisiera modificar un dato en una tabla de Excel a partir de un ListBox, me explico,

cuando selecciono un dato en el ListBox, los TextBox se llenan, modifico un TextBox y hago clic en el botón modificar (para modificar mi dato), pero no se modifica (se modifica el primer dato de la tabla). Quisiera modificar el dato seleccionado en el ListBox!

¿Podrían ayudarme a escribir el código?

Adjunto mi código actual

Muchas gracias

Private Sub b_modif_Click() Dim ligne As Integer If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") <> vbYes Then ligne = ListBox7.ListIndex + 2 MsgBox ligne Range("A" & ligne) = T_Id.Value Range("B" & ligne) = T_Designation.Value Range("C" & ligne) = T_Code.Value Range("D" & ligne) = T_Stock_Min.Value Range("E" & ligne) = T_Nvx_Emplt.Value Range("F" & ligne) = T_Fournisseur.Value Range("G" & ligne) = T_Stock_Reel.Value Range("H" & ligne) = T_Stock_Max.Value Range("I" & ligne) = T_Ancien_Emplt.Value Range("J" & ligne) = T_Machine.Value Range("K" & ligne) = ComboBox1.Value Range("L" & ligne) = ComboBox2.Value Range("M" & ligne) = ComboBox3.Value Range("N" & ligne) = ComboBox4.Value Range("O" & ligne) = ComboBox5.Value End If End Sub


11 respuestas

  1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 1 588
     

    hola,

    ¿puedes también mostrar el código que reacciona cuando seleccionas un dato en el listBox?

    0
  2. zouzou
     

    Hola yg_be

    Aquí está el código cuando hago clic en la listbox

    muchas gracias por tu ayuda

    Private Sub ListBox7_Click() Me.T_Id = Me.ListBox7.List(Me.ListBox7.ListIndex) Me.T_Designation.Value = Me.ListBox7.Column(1, Me.ListBox7.ListIndex) Me.T_Code.Value = Me.ListBox7.Column(2, Me.ListBox7.ListIndex) Me.T_Stock_Min.Value = Me.ListBox7.Column(3, Me.ListBox7.ListIndex) Me.T_Nvx_Emplt.Value = Me.ListBox7.Column(4, Me.ListBox7.ListIndex) Me.T_Fournisseur.Value = Me.ListBox7.Column(5, Me.ListBox7.ListIndex) Me.T_Stock_Reel.Value = Me.ListBox7.Column(6, Me.ListBox7.ListIndex) Me.T_Stock_Max.Value = Me.ListBox7.Column(7, Me.ListBox7.ListIndex) Me.T_Ancien_Emplt.Value = Me.ListBox7.Column(8, Me.ListBox7.ListIndex) Me.T_Machine.Value = Me.ListBox7.Column(9, Me.ListBox7.ListIndex) Me.ComboBox1.Value = Me.ListBox7.Column(10, Me.ListBox7.ListIndex) Me.ComboBox2.Value = Me.ListBox7.Column(11, Me.ListBox7.ListIndex) Me.ComboBox3.Value = Me.ListBox7.Column(12, Me.ListBox7.ListIndex) Me.ComboBox4.Value = Me.ListBox7.Column(13, Me.ListBox7.ListIndex) Me.ComboBox5.Value = Me.ListBox7.Column(14, Me.ListBox7.ListIndex) End Sub
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      hola,

      No entiendo por qué "ListBox7.ListIndex" ya no contiene el valor correcto en "b_modif_Click()".
      Yo añadiría un control para memorizar su valor. Supongamos que este control añadido se llama ListX.

      Entonces, en "ListBox7_Click()", añadiría:

      Me.ListX = Me.ListBox7.ListIndex

      Y en "b_modif_Click", añadiría:

      linea=ListX
      0
  3. zouzou
     

    Hola yg_be,

    he puesto línea = ListBox7.ListIndex + 2, porque mis datos comienzan a partir de la segunda línea de la tabla.

    Me gustaría saber, por favor, ¿de qué tipo es el ListX que has agregado? (no entendí muy bien por qué pusiste "Me.")

    Cuando añado en ListBox7_Click(),

     Me.ListX = Me.ListBox7.ListIndex

    Y en "b_modif_Click", añadiría:

     línea=ListX

    me muestra el error anterior

    Muchas gracias de antemano

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      ¿Has añadido un control llamado ListX?

      0
  4. zouzou
     
    • Private Sub b_modif_Click() Dim ligne As Integer If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") <> vbYes Then ligne = ListX.Value 'ligne = ListBox7.ListIndex + 2 MsgBox ligne Range("A" & ligne) = Me.T_Id.Value Range("B" & ligne) = Me.T_Designation.Value Range("C" & ligne) = Me.T_Code.Value Range("D" & ligne) = Me.T_Stock_Min.Value Range("E" & ligne) = Me.T_Nvx_Emplt.Value Range("F" & ligne) = Me.T_Fournisseur.Value Range("G" & ligne) = Me.T_Stock_Reel.Value Range("H" & ligne) = Me.T_Stock_Max.Value Range("I" & ligne) = Me.T_Ancien_Emplt.Value Range("J" & ligne) = Me.T_Machine.Value Range("K" & ligne) = Me.ComboBox1.Value Range("L" & ligne) = Me.ComboBox2.Value Range("M" & ligne) = Me.ComboBox3.Value Range("N" & ligne) = Me.ComboBox4.Value Range("O" & ligne) = Me.ComboBox5.Value End If End Sub
    Private Sub ListBox7_DblClick(ByVal Cancel As MSForms.ReturnBoolean) If T_Fournisseur.Value = "" And T_Designation.Value = "" Then MsgBox "¡Introduzca un nombre, por favor!" Exit Sub End If If T_Designation.Value <> "" Then Set cel = Feuil2.Columns(1).Find(what:=ListBox7.Value, LookIn:=xlValues, lookat:=xlWhole) If Not cel Is Nothing Then Me.SpinButton2 = cel.Row End If End If btncreer.Enabled = False End Sub Private Sub ListBox7_Click() Me.ListX = Me.ListBox7.ListIndex Me.T_Id = Me.ListBox7.List(Me.ListBox7.ListIndex) Me.T_Designation.Value = Me.ListBox7.Column(1, Me.ListBox7.ListIndex) Me.T_Code.Value = Me.ListBox7.Column(2, Me.ListBox7.ListIndex) Me.T_Stock_Min.Value = Me.ListBox7.Column(3, Me.ListBox7.ListIndex) Me.T_Nvx_Emplt.Value = Me.ListBox7.Column(4, Me.ListBox7.ListIndex) Me.T_Fournisseur.Value = Me.ListBox7.Column(5, Me.ListBox7.ListIndex) Me.T_Stock_Reel.Value = Me.ListBox7.Column(6, Me.ListBox7.ListIndex) Me.T_Stock_Max.Value = Me.ListBox7.Column(7, Me.ListBox7.ListIndex) Me.T_Ancien_Emplt.Value = Me.ListBox7.Column(8, Me.ListBox7.ListIndex) Me.T_Machine.Value = Me.ListBox7.Column(9, Me.ListBox7.ListIndex) Me.ComboBox1.Value = Me.ListBox7.Column(10, Me.ListBox7.ListIndex) Me.ComboBox2.Value = Me.ListBox7.Column(11, Me.ListBox7.ListIndex) Me.ComboBox3.Value = Me.ListBox7.Column(12, Me.ListBox7.ListIndex) Me.ComboBox4.Value = Me.ListBox7.Column(13, Me.ListBox7.ListIndex) Me.ComboBox5.Value = Me.ListBox7.Column(14, Me.ListBox7.ListIndex) End Sub

    Hola,

    He añadido un textbox al userform, lo he nombrado ListX, adjunto mis dos códigos del botón modificar y del listbox, así como la simulación.

    El ListX que está rodeado en azul, muestra el número de la línea en el listbox (¡la línea en el listbox no es la línea en la tabla de Excel!) y por lo tanto no puedo asignar el valor de ListX a la variable línea del código de mi botón modificar.

    Muchas gracias de antemano.

    0
  5. zouzou
     

    Creo que voy a usar el mismo truco que me mostraste sobre (el botón eliminado) para comprobar si los IDs son iguales y luego modificar en lugar de eliminar, me parece un buen truco.

    0
    1. zouzou
       
      Private Sub b_modif_Click() Dim ligne As Integer Dim i As Long, suppression As String, present As String If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") <> vbYes Then With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 present = .Range("A" & i).Value If present = Me.T_Id.Value Then ligne = i Range("A" & ligne) = Me.T_Id.Value Range("B" & ligne) = Me.T_Designation.Value Range("C" & ligne) = Me.T_Code.Value Range("D" & ligne) = Me.T_Stock_Min.Value Range("E" & ligne) = Me.T_Nvx_Emplt.Value Range("F" & ligne) = Me.T_Fournisseur.Value Range("G" & ligne) = Me.T_Stock_Reel.Value Range("H" & ligne) = Me.T_Stock_Max.Value Range("I" & ligne) = Me.T_Ancien_Emplt.Value Range("J" & ligne) = Me.T_Machine.Value Range("K" & ligne) = Me.ComboBox1.Value Range("L" & ligne) = Me.ComboBox2.Value Range("M" & ligne) = Me.ComboBox3.Value Range("N" & ligne) = Me.ComboBox4.Value Range("O" & ligne) = Me.ComboBox5.Value End If Next i End With End If End Sub
      0
      1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > zouzou
         

        Primero hay que cerrar el último elemento abierto.
        Dado que el código comienza por

        • If ,
        • With,
        • For,
        • If,

        debe terminar por

        • end if
        • next
        • end with
        • end if

        Además, utilizas dos variables, i y ligne, cuando una sola es suficiente.

        0
  6. zouzou
     

    Muchas gracias yg_be,

    comparto contigo mi código que debería funcionar normalmente, es el mismo truco que hice en el botón de eliminar. ¿Cuál crees que es la razón por la que no modifica la selección y no muestra ningún error? El código es correcto.

    Te agradezco mucho de antemano

    Private Sub b_modif_Click() Dim i As Long, modification As String, present As String If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") <> vbYes Then With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 present = .Range("A" & i).Value modification = Me.T_Id.Value If present = modification Then modification = modification + 1 Range("A" & modification) = Me.T_Id.Value Range("B" & modification) = Me.T_Designation.Value Range("C" & modification) = Me.T_Code.Value Range("D" & modification) = Me.T_Stock_Min.Value Range("E" & modification) = Me.T_Nvx_Emplt.Value Range("F" & modification) = Me.T_Fournisseur.Value Range("G" & modification) = Me.T_Stock_Reel.Value Range("H" & modification) = Me.T_Stock_Max.Value Range("I" & modification) = Me.T_Ancien_Emplt.Value Range("J" & modification) = Me.T_Machine.Value Range("K" & modification) = Me.ComboBox1.Value Range("L" & modification) = Me.ComboBox2.Value Range("M" & modification) = Me.ComboBox3.Value Range("N" & modification) = Me.ComboBox4.Value Range("O" & modification) = Me.ComboBox5.Value End If Next i End With End If End Sub

    :

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      quizás:

       For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 If .Range("A" & i).Value = Me.T_Id.Value Then .Range("B" & i) = Me.T_Designation.Value ' ...
      0
  7. zouzou
     

    Te agradezco por la propuesta, la he probado, es correcta pero no da ningún resultado!

    Private Sub b_modif_Click() Dim i As Long, modification As String, present As String If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") <> vbYes Then With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 If .Range("A" & i).Value = Me.T_Id.Value Then .Range("B" & i) = Me.T_Designation.Value .Range("C" & i) = Me.T_Code.Value .Range("D" & i) = Me.T_Stock_Min.Value .Range("E" & i) = Me.T_Nvx_Emplt.Value .Range("F" & i) = Me.T_Fournisseur.Value .Range("G" & i) = Me.T_Stock_Reel.Value .Range("H" & i) = Me.T_Stock_Max.Value .Range("I" & i) = Me.T_Ancien_Emplt.Value .Range("J" & i) = Me.T_Machine.Value .Range("K" & i) = Me.ComboBox1.Value .Range("L" & i) = Me.ComboBox2.Value .Range("M" & i) = Me.ComboBox3.Value .Range("N" & i) = Me.ComboBox4.Value .Range("O" & i) = Me.ComboBox5.Value ' present = .Range("A" & i).Value ' modification = Me.T_Id.Value ' If present = modification Then ' modification = modification + 1 'Range("A" & modification) = Me.T_Id.Value 'Range("B" & modification) = Me.T_Designation.Value End If Next i End With End If End Sub
    0
    1. mzouali Mensajes publicados 22 Estado Miembro > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       

      Hola yg_be,

      el msgBox después del if no funciona y antes del if sí funciona

      Private Sub b_modif_Click() Dim i As Long, modif As String, present As String If MsgBox("¿Confirma la modificación?", vbYesNo, "Confirmación de modificación") = vbYes Then With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 If .Range("A" & i).Value = Me.T_Id.Value Then MsgBox ("modificación confirmada")
      0
    2. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > mzouali Mensajes publicados 22 Estado Miembro
       

      quizás agregar antes del primer "end if"

      else msgbox .Range("A" & i).Value & "|" & Me.T_Id.Value

      Esto debería mostrar los valores comparados y confirmar que son diferentes.

      1
    3. mzouali Mensajes publicados 22 Estado Miembro > yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención  
       

      sí, efectivamente, son diferentes

      aquí está el resultado en bucle 9|1 luego 8|1 7|1 6|1 5|1 4|1 3|1 2|1 1|1 :

      0
    4. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588 > mzouali Mensajes publicados 22 Estado Miembro
       

      Extraño que 1|1 sea tan diferente...

      1
  8. ziz
     

    Hola,

    vuelvo a ponerme en contacto para resolver el mismo problema del botón modificar, tuve un desplazamiento que me impidió avanzar.

    resultado: cuando los dos valores Range("A" & i).Value y Me.T_Id.Value son iguales, ¡continúa comparando sin modificar el valor de la celda!

    Private Sub b_modif_Click() Dim i As Long, modification As String, present As String With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 If Range("A" & i).Value = Me.T_Id.Value Then MsgBox .Range("A" & i).Value & "|" & Me.T_Id.Value Range("B" & i) = Me.T_Designation.Value Else MsgBox .Range("A" & i).Value & "|" & Me.T_Id.Value End If Next i End With 'End If End Sub

    pasa por la igualdad y sigue comparando

    hasta llegar arriba

    ¿tienes alguna idea sobre cómo modificar el contenido de una celda?

    te agradezco de antemano

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      lo más interesante es que lograste hacer dos msgbox que no te permiten diferenciar las dos condiciones.

      0
  9. ziz
     

    te agradezco por tus comentarios, he mantenido solo el primer msgBox y no se muestra nada

     With ThisWorkbook.Sheets("Electrique") For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 If Range("A" & i).Value = Me.T_Id.Value Then MsgBox .Range("A" & i).Value & "|" & Me.T_Id.Value Range("B" & i) = Me.T_Designation.Value Else 'MsgBox .Range("A" & i).Value & "|" & Me.T_Id.Value
    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      intenta en su lugar:

      If Range("A" & i).Value = Me.T_Id.Value Then MsgBox .Range("A" & i).Value & " = " & Me.T_Id.Value Range("B" & i) = Me.T_Designation.Value Else MsgBox .Range("A" & i).Value & " <> " & Me.T_Id.Value
      0
  10. ziz
     

    da el mismo resultado:

    sigue comparando hasta comparar toda la tabla ...

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      Creo que la solución está en el #21.

      0
  11. ziz
     

    Hola yg_be

    ¿qué quieres decir con #21?

    Por fin logré modificar la tabla a través de un botón de modificar:

    aquí está el código:

     With ThisWorkbook.Sheets("Electrique") ' defino la hoja en la que trabajo For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1 'un bucle que trata todas las filas de mi tabla. If Cells(i, 1) = Me.T_Id.Text Then 'comparación de todas las filas de mi primera columna con el valor del textbox llamado " T_Id", si son iguales, entonces selecciona la celda que está a su derecha y modifica el valor de esta celda por el valor del T_Designation " textbox del userform". Cells(i, 1).Select Exit For End If Next i ActiveCell.Offset(0, 1) = Me.T_Designation.Value ' modificación 

    Te agradezco infinitamente yr_be

    0
    1. yg_be Mensajes publicados 23437 Fecha de registro   Estado Colaborador Última intervención   1 588
       

      #21, es la respuesta hecha el 27 de julio de 2022 a las 21:18.

      0