Botón_Modificar_seleccionar_listBox
Resueltoyg_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
-
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?
-
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
-
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
-
-
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
-
-
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.
-
-
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.
-
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
-
-
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:
-
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-
Puedes agregar msgbox para entender qué hace tu código.
ejemplos: https://forums.commentcamarche.net/forum/affich-37636607-bouton-supprimer -
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") -
-
-
-
-
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 Subpasa 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
-
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 -
-
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ónTe agradezco infinitamente yr_be