Seleccionar, activar celda y cargar información en formulario, si se cumplen 2 condiciones, por medio de una macro.

Tengo en un formulario dos botones y cada uno tiene su respectivo código, así:

Private Sub BtnAnterior_Click()
Rem Carga los datos del Participante y sus Evaluadores, si tiene Autoevaluación o Evaluación Pendiente.
ActiveCell.Offset(-1, 0).Select
BtnSiguiente.Enabled = True
If ActiveCell.Offset(-7, 0) = "Relación" Then
ActiveCell.Offset(-6, 0).Select
BtnSiguiente.SetFocus
BtnAnterior.Enabled = False
Cargar
MsgBox "Este es el Primer registro en la Planilla", vbInformation, "Evaluación°"
Else
Cargar
End If
End Sub
Private Sub BtnSiguiente_Click()
Rem Carga los datos del Participante y sus Evaluadores, si tiene Autoevaluación o Evaluación Pendiente.
ActiveCell.Offset(7, 0).Select
BtnAnterior.Enabled = True
If ActiveCell.Value = "" Then
ActiveCell.Offset(-7, 0).Select
BtnAnterior.SetFocus
BtnSiguiente.Enabled = False
MsgBox "No hay más registros en la Planilla", vbInformation, "Evaluación°"
Cargar
Else
Cargar
End If
End Sub

La idea es que con estos procedimientos, si en la columna "C" dice "Pendiente" y en la Colmna "D" dice "Participante", entonces, que se seleccione  la celda que tiene el valor "Pendiente" en la columna "C" y de una vez se cargue la información en un formulario (lo del cargue de la informacion ya está solucionado). Solo necesito que la macro cada vez que yo le de Clic en el botón Sieguiente o Anterio, navegue hasta la siguiente fila donde se cumpla la condicion de que diga en "C" "Pendiente" y en "D" "Participante" en la misma fila y así sucesivamente.

1 respuesta

Respuesta
1

Yo lo haría de la siguiente forma

Con un filtro y los datos lo cargue en un listbox

Seria así de la siguiente manera

1- Un userform

2- Un botón

3- Dos textbox

En el botón iría esta macro

Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Hoja3.Select
UF = Sheets("reporte").Range("a10000").End(xlUp).Row
On Error Resume Next
If TextBox1 = "" Then Exit Sub
If TextBox2 = "" Then Exit Sub
ListBox1.Clear
 

valor1 = textbox1.value

valor2=textbox2

Hoja3.Range("a9").AutoFilter Field:=3, Criteria1:=">=" & valor1.value, Operator:=xlAnd, Criteria2:="<=" & valor1
Hoja3.Range("a9").AutoFilter Field:=4, Criteria1:=">=" & valor2, Operator:=xlAnd, Criteria2:="<=" & valor2
For Each celda In Range("a10:a" & UF).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem celda
i = ListBox1.ListCount - 1
ListBox1.List(i, 1) = celda.Offset(0, 1)
ListBox1.List(i, 2) = celda.Offset(0, 2)
ListBox1.List(i, 3) = celda.Offset(0, 3)
Next
'este vuelve la base de dato a su estado original
ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=3
ActiveSheet.ListObjects("Table3").Range.AutoFilter Field:=4
Application.ScreenUpdating = True
End Sub

hoja3 = a tu numero de hoja en el editor vba

reporte = el nombre de tu hoja

a9 = donde estan los encabesado de tu base de datos

el 3 y 4 = a la columna "c" y "d"

Si te silve no olvide valorar para cerrar la pregunta

¡Gracias! 
Aneudys Martinez, pero la verdad, haciéndolo así, dejaría de utilizar la hoja donde estan todos los datos y necesitamos trabajar sobre esa hoja.

Es imperioso lograr que funcione sobre la hoja actual y con el formulario ya diseñado para eso.

de todas formas muchas gracias por tu dedicación.

Si gustas te puedo enviar el fichero, para que comprendas mejor lo que necesito.

[email protected] este es mi correo

Te acabo de enviar el fichero. Gracias.

Sigo necesitando de la ayuda para solucionarlo. Muchas gracias por su apoyo.

Luis prueba y me deja saber que más te podemos ayudar

No olvide valorar la pregunta para cerrar el tema

¡Gracias! ,  voy a revisar el fichero haber que me ayudaste a implementar y te cuento en un rato. 

Aneudys, muchas gracias por el cambio implementado, es muy buena opción.

Solo necesito hacer un pequeño cambio.

Que en el ListBox2, se cargue el listado de personas, pero solo si se cumplen 2 criterios: 1. Que en la columna C diga "Pendiente" y en la columna DE diga "Participante".

2. Que al dar click sobre un nombre de esos que se cargaron en el ListBox2 porque se cumplen las dos condiciones, entonces, en el ListBox1, se carguen las siguientes seis (6) posiciones, es decir, las seis personas que están en la lista debajo de ese nombre, ejemplo: Si en C8 dice "Pendiente" y en D8 dice "Participante", entonces, que en el ListBox1 aparezcan los datos de las personas que están en las celdas C9, C10, C11, C12, C13, C14.

Y que me permita hacer lo que ya hace, que es cargar la información del seleccionado en el formulario para editarlo y en fin todo eso.

Te agradezco enormemente el trabajo que has echo, es muy bueno y me ha dado mejor visión de lo que necesito.

Quedo atento y a la espera de tu valiosa ayuda.

Luis Carlos

Listo cualquier inquietud solo preguntas

¡Gracias! ,  tu solución me funciona muy bien.  Muchas gracias por tu amabilidad y por tu disponibilidad para ayudarme. 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas