Excel - Combobox dependientes de un valor

 
Vista:
Imágen de perfil de Jorge

Combobox dependientes de un valor

Publicado por Jorge (39 intervenciones) el 20/08/2021 05:41:00
Hola buenas noches, continuo haciendo la aplicación referente a expedientes y nuevamente recurro a la ayuda mega profesional y experimentada. Comienzo explicando como es la mecánica y como espero que funcione. Tengo un pequeño formulario que se abre al ingresar datos en un campo llamado "cargo_laboral", esto va inspirado a que el involucrado pertenece a una unidad, la unidad tiene un destacamento, el destacamento tiene una compañía y la compañía tiene un pelotón o puesto. Para facilitar la transcripción de todos estos datos elabore un pequeño formulario llamado "frmUbicacion" donde hay un campo especifico para cada una de estas informaciones. Tengo una hoja aparte donde están todos los destacamentos de cada unidad, la cinta de título de esa hoja llamada "destacamentos" corresponde al menú combobox llamado "unidad", es decir que en una columna de esta mencionada unidad tiene sus respectivos destacamentos.

Al seleccionar una unidad con el combobox "unidad", el combobox "destacamento" debe mostrar los destacamentos relacionados a esa unidad seleccionada, debido a que son muchas unidades, colocar una condición If al combobox "unidad" especificando que si se selecciona la unidad X, combobox "destacamento" debe mostrar la lista de destacamentos correspondientes, es algo que veo como que no es la mejor opción.

De tal manera que implemente un bucle "For each" donde me busca en la hoja, en la primera fila que son los títulos, para lograr hacer una relación, la celda que contiene mencionada unidad seleccionada, efectivamente el bucle funciono pero ahora viene el detalle. Una vez encontrada la celda, el código tiene que añadirme toda la información que se encuentra debajo del título que en conclusion son los destacamentos de la unidad seleccionada. Quería hacerlo con otro bucle pero la verdad ya he hecho pruebas y pruebas de diferentes maneras y no e dado con la solución. Anexo captures y el código que estoy usando y nuevamente pido su ayuda porque estoy trancado en esto.

Screenshot_1
Screenshot_2
Screenshot_3
Screenshot_4
Screenshot_5
Screenshot_6
Screenshot_7

1
2
3
4
5
6
7
8
9
10
11
12
Private Sub unidad_change(): On Error Resume Next
Dim valor
Dim Celda As Range
 
For Each Celda In Hoja6.Range("A1:AI1") 'Establezco mi rango de búsqueda
    If UCase(unidad) Like "*" & UCase(Celda) & "*" Then 'Comparo el valor de unidad con la búsqueda de Celda
 
        MsgBox Celda & " es la columna " & Celda.Column 'Compruebo que la comparación fue verdadera mediante un mensaje
    End If
Next
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Combobox dependientes de un valor

Publicado por Antoni Masana (2477 intervenciones) el 20/08/2021 15:20:00
Adjunta el libro y explica en que formulario y en que ComboBox esta el problema y como llegar a ellos.

As a groso modo te cuento:

Si Los combos están relacionados por: unidad - destacamento - compañía - pelotón o puesto.

Paso 1 - Todos los combos vacíos. Relleno el primer Combo con las Unidades sin repetir
Paso 2 - El el momento que se selecciona una opción del Combo 1 se rellena el Combo 2 con filtro Combo 1. Combo3 y Combo 4 vacíos.
Paso 3 - El el momento que se selecciona una opción del Combo 2 se rellena el Combo 3 con filtro Combo 1 y Combo 2. Combo 4 vacío.
Paso 4 - El el momento que se selecciona una opción del Combo 3 se rellena el Combo 4 con filtro Combo 1 y Combo 2 y Combo 3

Puede parecer muy complicado pero es bastante sencillo.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

Combobox dependientes de un valor

Publicado por Jorge (39 intervenciones) el 20/08/2021 16:07:29
El formulario se llama "frmUbicacion" y por ahora solo estaríamos hablando del Paso 2:

Paso 2 - En el momento que se selecciona una opción del Combo 1 se rellena el Combo 2 con filtro Combo 1. Combo3 y Combo 4 vacíos.

Screenshot_8
Screenshot_9
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Combobox dependientes de un valor

Publicado por Antoni Masana (2477 intervenciones) el 23/08/2021 15:31:21
Veo que el ComboBox Unidad se alimenta de la columna C de la hoja "Opciones".
En primer lugar es mejor cambiar esto:

1
2
3
unidad = ""
    lista_unidad = Hoja2.Range("C2").End(xlDown).Row
    unidad.RowSource = "opciones!C2:C" & lista_unidad

Por esto:

1
unidad.RowSource = "opciones!C2:C" &  Sheets("Opciones").Range("C2").End(xlDown).Row

Y ahor la pregunta:

El ComboBox Destacamento ¿De donde se alimenta? ¿Cuales son los destacamentos de cada unidad?

Creo que los datos los tiene que sacar de la Hoja Destacamento y cada columna corresponde a una Unidad.
En el libro veo que no todas las unidades tienes un Destacamento por que o no lo tiene o no esta toda la información.

Voy a realizar unas pruebas y te envío el libro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jorge

Combobox dependientes de un valor

Publicado por Jorge (39 intervenciones) el 23/08/2021 18:44:09
Muchas gracias profesor Antoni, ya hacia que no respondería pero aquí siempre al tanto de nosotros. De hecho también pude resolverlo de otra manera, en vez de colocar los títulos en horizontal, en dos columnas anexe las unidades y los destacamentos, asi como que si se trabajara con FileMaker o Access, que en ocasiones para generar una lista anidada debes colocar en la primera columna el origen, la columna "A" contiene el nombre de la unidad y la columna "B" contiene el nombre del destacamento. Comparto el código que use:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
'Muestra los destacamentos de las unidades
'
Private Sub unidad_Change()
 
destacamento.Clear
Dim Lista As Object
Dim x, info
 
Set Lista = CreateObject("System.Collections.ArrayList")
 
With Hoja2
    For x = 2 To .UsedRange.Rows.Count
        If .Range("R" & x) = unidad.Text Then
            If .Range("S" & x) <> "" Then
                Lista.Add CStr(.Range("S" & x))
            End If
        End If
    Next
End With
 
For Each info In Lista
   destacamento.AddItem info
Next
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar