Modificar datos de una tabla a través de un listbox

Tengo una base de datos en la cual a través de un filtro traigo los datos en un listbox. Necesito que, una vez seleccionado el registro que se pretende modificar, se presione un botón de comando denominado modificar y que lanza esos datos a otro formulario donde se puedan actualizar los datos. Una vez actualizados que los traslade a la hoja de datos.

¿Cómo puedo hacerlo? Lo he intentado de varias maneras pero no lo consigo.

1 respuesta

Respuesta
1

¿Esto es más o menos lo que quieres?, este es un simple ejemplo de como se puede hacer, ya que desconozco como esta estructurada tu información, te puede servir de base para adaptarlo a lo que quieres, lo único que no se es si funcione cuando tienes aplicado un filtro.

y estas son las macros 

para el formulario con el listbox
Private Sub CommandButton1_Click()
modificar.Show
End Sub
Private Sub ListBox1_Change()
Set DATOS = Range("pacientes")
With ListBox1
    Label6 = .Value
    Label7 = .List(Me.ListBox1.ListCount - 1, 1)
    Label8 = .List(Me.ListBox1.ListCount - 1, 2)
    Label9 = .List(Me.ListBox1.ListCount - 1, 3)
    Label10 = .List(Me.ListBox1.ListCount - 1, 4)
    Label11 = WorksheetFunction.Match(.Value, DATOS.Columns(1), 0)
End With
End Sub
Private Sub ListBox1_Click()
End Sub
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
Set DATOS = Range("A1").CurrentRegion
matriz = DATOS
DATOS.Name = "pacientes"
With ListBox1
    .Clear
    .List = matriz
    .ColumnCount = DATOS.Rows.Count
End With
End Sub
para el formulario modificar
Private Sub CommandButton1_Click()
Set DATOS = Range("pacientes")
dato = TextBox1.Text
With DATOS
    Set RENGLON = .Rows(Label7)
End With
With RENGLON
    .Select
    .Cells(1, 1) = dato
    .Cells(1, 2) = TextBox2.Text
    .Cells(1, 3) = TextBox3.Text
    .Cells(1, 4) = TextBox4.Text
    .Cells(1, 5) = TextBox5.Text
End With
Set DATOS = Nothing: Set RENGLON = Nothing
End Sub
Private Sub UserForm_Activate()
With pacientes
    TextBox1.Text = .Label6
    TextBox2.Text = .Label7
    TextBox3.Text = .Label8
    TextBox4.Text = .Label9
    TextBox5.Text = .Label10
    Label7 = .Label11
End With
End Sub

Hola!

En primer lugar muchas gracias por responderme. Lo he probado pero no me sale... no sé si es porque estoy haciendo algo mal o por otra razón. Si quieres te puedo mandar la base de datos (sin datos) para que veas como está estructura y así te haces una idea....

Espero tu respuesta.

Gracias!

Sube tu información a un servicio de nube como google drive y pega el link aquí, lo ideal seria que fuera con la información filtrada además no tienen que ser datos reales puedes inventarte un ejemplo como la hoja de excel que yo subí

https://drive.google.com/open?id=1uOLqDJ1_rWoqwj1JwTg7IjJy-_r5n-9s

Buenos días de nuevo:

He subido el archivo a Google.drive. Te dejo el enlace arriba. Si tienes algún problema dímelo

Gracias!! 

De hecho después de varias peripecias que tuve con tu código he aquí los resultados tu misma tenias la respuesta solo le faltaban unas líneas, en el formulario modificar borras todo lo que tengas y pones este código, pudo ser menos código solo que esta bastante revuelto tu formulario, te explico como funciona al momento que hace el filtro la macro en vez de señalar la celda como venia haciendo ahora señalara toda la columna y el formulario mostrar leerá esa selección cargando los datos en los campos para que puedan ser modificados, una vez hecho esto lo grabas en la hoja la macro lo hará sobre la fila que esta seleccionada.

Private Sub Btnregistrar_Click()
Set DATOS = Selection
With DATOS
    .Cells(1, 1) = TextBox14.Text
    .Cells(1, 2) = TextBox1.Text
    .Cells(1, 3) = TextBox2.Text
    .Cells(1, 4) = TextBox3.Text
    .Cells(1, 5) = ComboBox1.Value
     .Cells(1, 6) = ComboBox2.Value
    .Cells(1, 7) = TextBox4.Text
    .Cells(1, 8) = TextBox5.Text
    .Cells(1, 9) = TextBox6.Text
    .Cells(1, 10) = TextBox7.Text
    .Cells(1, 11) = ComboBox3.Value
    .Cells(1, 12) = ComboBox4.Value
    .Cells(1, 15) = ComboBox5.Value
    .Cells(1, 13) = TextBox8.Text
    .Cells(1, 14) = TextBox9.Text
    .Cells(1, 19) = TextBox13.Text
    .Cells(1, 16) = ComboBox4.Value
    .Cells(1, 17) = TextBox10.Text
    .Cells(1, 18) = TextBox11.Text
    .Cells(1, 19) = TextBox12.Text
End With
set datos=nothing
End Sub
Private Sub UserForm_Initialize()
Set DATOS = Selection
With DATOS
    TextBox14.Text = .Cells(1, 1)
    TextBox1.Text = .Cells(1, 2)
    TextBox2.Text = .Cells(1, 3)
    TextBox3.Text = .Cells(1, 4)
    ComboBox1.Value = .Cells(1, 5)
    ComboBox2.Value = .Cells(1, 6)
    TextBox4.Text = .Cells(1, 7)
    TextBox5.Text = .Cells(1, 8)
    TextBox6.Text = .Cells(1, 9)
    TextBox7.Text = .Cells(1, 10)
    ComboBox3.Value = .Cells(1, 11)
    ComboBox4.Value = .Cells(1, 12)
    ComboBox5.Value = .Cells(1, 15)
    TextBox8.Text = .Cells(1, 13)
    TextBox9.Text = .Cells(1, 14)
    TextBox13.Text = .Cells(1, 19)
    ComboBox4.Value = .Cells(1, 16)
    TextBox10.Text = .Cells(1, 17)
    TextBox11.Text = .Cells(1, 18)
    TextBox12.Text = .Cells(1, 19)
End With
set datos=nothing    
End Sub

y en el formulario buscar cambias lo que tengas en este modulo Private Sub Listbox1_Click por esto:

Private Sub Listbox1_Click()
Range("a2").Activate
Cuenta = Me.ListBox1.ListCount
Set rango = Range("A1").CurrentRegion
C = rango.Columns.Count
For i = 0 To Cuenta - 1
    If Me.ListBox1.Selected(i) Then
        Valor = Me.ListBox1.List(i)
        rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Resize(1, C).Select
    End If
Next i
End Sub

y en el commandbutton5 le hice algunos cambios para hacer un poco mas agil el proceso, ahora cargara solo las filas con datos descartando las vacias.

    u = H2.Range("A1").CurrentRegion.Rows.Count
    If u = 1 Then
        MsgBox "No existen registros con ese filtro", vbExclamation, "FILTRO"
        Exit Sub
    End If
    ListBox1.RowSource = H2.Name & "!A2:Z" & u
End Sub

Buenas tardes de nuevo!!

He hecho  lo que me has dicho y cuando hago la búsqueda, al dar al botón comando modificar me abre el formulario_modificar pero  está vacío, no me traslada los datos de la fila seleccionada del listbox. Seguramente algo estoy haciendo mal..... Esta es mi primera base de datos utilizando el vba y soy una novata.... En cuanto a la modificación que has hecho en el comando buscar... FENOMENAL!!! Ahora va directo y no tarda tanto en seleccionar la fila de la hoja de datos.

Te mando el archivo nuevamente para que lo revises y me digas que estoy haciendo mal

Gracias y perdona por ser tan "torpe"

https://drive.google.com/open?id=1OUd4SksdxlnXAOQinZDLgKceIO5qoMKj 

Ya vi tu programa y de entrada no tiene los cambios que te mande es decir el formulario modificar no tiene las instrucciones para cargar y modificar, y en el formulario busqueda no hay ninguna de las modificaciones que te hice, dejame te explico esta linea  rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).Activate la instruccion esta para que se posicione en la celda de la columna que tenga el valor que busca, esta linea auqneu esta bien no te sirve, la cambien por esta  rango.Find(What:=Valor, LookAt:=xlWhole, After:=ActiveCell).resize(1,c).select, que ahora te va a seleccionar todos loc campos para dejarlos listos para ser cargados por el formulario 2, la c viene de lineas mas atras con la instruccion c=rango.columns.count que representa la cantidad de columnas de la fila seleccionada que tienen datos, luego cuando das abres el formulario modificar lo primero que hace es buscar la seleccion con la instruccion set datos=selection e inmediatamente hace la carga de esa fila seleccionada a los textbox, haces las modificaciones y al guardar vuelve a leer la fila seleccionada y ahi en es fila guarda las modificaciones, no sale como dije porque hay instrucciones que le digan a los formularios que hacer o quiza mandaste un archivo que no es, este es el resultado de las modificaciones que te envie ademas en los errores esta el aprendizaje.

Buenas noches: 

Efectivamente, no había hecho todas las modificaciones. He vuelto a revisar todo y he hecho las modificaciones que me has indicado. Lo que te decía torpeeeee. No me sale???

Otra cosa que he visto (hasta ahora no me había dado cuenta) es que el formulario búsqueda en el Combobox que hace de filtro está pensado (obviamente) para que coja  los encabezados de la tabla de DATOS. Sin embargo, cuando abres la base de datos a través del formulario de contraseña (esta es la idea) habrás visto que a continuación se abre un formulario (menú) con varios "submenús" : registrar, buscar, modificar, salir. Pues bien, si doy a BUSCAR me aparece el formulario de búsqueda pero al desplegar el combobox del filtro me aparece  las etiquetas del formulario de acceso (usuario y contraseña)???; sin embargo tendría que aparecer las de la tabla de DATOS. Otro problema..... Se podría arreglar de alguna manera???? (imagino que sí).

Abusando de tu paciencia y confianza... sería mucho pedir que me enviaras el archivo xlms con las modificaciones hechas que funcionen???? La verdad es que me harías un gran favorrr (te puedo facilitar mi correo electrónico).

Te adjunto el link con el archivo para que veas tu mismo lo que te comento... Mil gracias!!

https://drive.google.com/file/d/1BYZD_C1JlSgX58lCCzhowwFZZXWfjVZ7/view?usp=sharing 

https://1drv.ms/u/s!Akk6UzVzGlI_hALbJiZWLwv_xoGq 

Buenas noches:

  Respecto a esto que te he comentado anteriormente "Otra cosa que he visto (hasta ahora no me había dado cuenta) es que el formulario búsqueda en el Combobox que hace de filtro está pensado (obviamente) para que coja  los encabezados de la tabla de DATOS. Sin embargo, cuando abres la base de datos a través del formulario de contraseña (esta es la idea) habrás visto que a continuación se abre un formulario (menú) con varios "submenús" : registrar, buscar, modificar, salir. Pues bien, si doy a BUSCAR me aparece el formulario de búsqueda pero al desplegar el combobox del filtro me aparece  las etiquetas del formulario de acceso (usuario y contraseña)???; sin embargo tendría que aparecer las de la tabla de DATOS. Otro problema..... Se podría arreglar de alguna manera???? (imagino que sí)."  OLVIDALO.... Lo acabo de probar ahora mismo y esta bien salen los encabezados de la tabla datos... No se por qué antes lo he mirado y no me salía bien..... Sin embargo ahora sí.... imagino que tanto darle vueltas y vueltas... no sabe uno lo que hace...

   En cuanto a lo primero, me sigue sin salir …. Por favor, si me lo puedes revisar y mandarme el archivo con las correcciones te lo agradecería mucho...

   Ya me contaras!!

    Buenas noches.

descargalo desde este link https://1drv.ms/x/s!Aqt18sdMf2xXiRYnpGs686c8Ny0v 

¡Gracias! Muchísimas gracias por todo!!

Funciona perfectamente.... me has sido de gran utilidad y he aprendido cosas..... 

Y perdona por ser tan pesada.

Gracias de nuevo!!!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas