¿Como asignar valor a un combobox dependiendo de la selección de un combobox previo?

Quisiera saber si me pueden ayudar con este problemilla, en una hoja de excel (hoja1) tengo en la columna A unas claves de proyecto y en la columna C los nombres de las personas responsables. En muchas ocasiones estas personas tienen mas de 1 proyecto asignado. En mi userform1 tengo un combo de "Responsable" y otro de "Clave de proyecto". Lo que quiero hacer es que al seleccionar algún responsable del combo1, en el combo 2 me muestre sólo las claves de los proyectos asignadas a esa persona.

3 Respuestas

Respuesta
1
Respuesta
2

En mi blog dejé desarrollados varios casos con controles relacionados o dependientes que podrás descargar. Desde allí también podrás acceder a los videos explicativos.

https://elsamatilde.blogspot.com/2018/06/listas-dependientes.html 

Ahora, como verás se necesita tener las listas previamente 'armadas' para tal fin. En tu caso sería el responsable como título y debajo todos sus proyectos.

Si no tenés esas listas ya preparadas y optarás por ir recorriendo la col A se pueden seguir 2 modos:

- Ir recorriendo col A alimentando el combobox2 por cada coincidencia de responsable (solo te lo aconsejaría si la lista de registros no es demasiado extensa)

- Filtrar la hoja por el responsable y alimentar el segundo combo con la col A resultante. Este modo requiere que la hoja 'permita' los autofiltros.

Como verás, para cada macro se requiere más información: nombre de la hoja si no es la hoja activa, rango de títulos, fila inicio de datos y si la hoja está protegida como para filtrar.
Por lo tanto espero tengas las tablas y te sirvan algunos de los ejemplos de mi blog, sino aclara todos los detalles.

Sdos.

Elsa

Respuesta
2

Según entiendo, (corrígeme si me equivoco), buscas algo como esto, como puedes ver en el ejemplo de la imagen en el combo 1 salen los nombres y en el combobox2 los proyectos que tiene asignados, la macro es bastante simple.

esta es la macro

Private Sub combobox1_Change()
Dim funcion As WorksheetFunction
Set datos = Range("responsables")
Set funcion = WorksheetFunction
responsable = combobox1.Value
With datos
    cuenta = funcion.CountIf(.Columns(3), responsable)
    fila = funcion.Match(responsable, .Columns(3), 0)
    matriz = .Rows(fila).Resize(cuenta, 1)
    ComboBox2.List = matriz
End With
Erase matriz
Set datos = Nothing: Set funcion = Nothing
End Sub
Private Sub UserForm_Activate()
With UserForm1
    .Caption = "ASIGNACION DE PROYECTOS"
    .Move 200, 15
End With
End Sub
Private Sub UserForm_Initialize()
cuenta = WorksheetFunction.CountA(Range("a:a"))
Set datos = Range("a2").Resize(cuenta - 1, 3)
With datos
    .Sort key1:=Range(.Columns(3).Address), order1:=xlAscending
    Set tabla = .Cells(cuenta + 3, 3).Resize(cuenta - 1, 1)
    .Name = "responsables"
End With
With tabla
    .CurrentRegion.ClearContents
    .Value = datos.Columns(3).Value
    .RemoveDuplicates Columns:=1
    Set tabla = .CurrentRegion
    matriz = tabla
    combobox1.List = matriz
    .ClearContents
End With
Erase matriz
Set datos = Nothing: Set tabla = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas