Combobox a otro Combobox filtrandose

24/06/2005 - 21:07 por José A. Castrejón | Informe spam
Buenas tardes, tengo en un archivo 2 hojas : listas y cheques
en la hoja listas tengo defuinido el rango "Cuentas" que abarca de a3 hasta
a13
ejem BBVA, Scotia, Banamex y en la hoja cheques tengo columnas :

A b c d e
Cuenta Cheq Mes Fecha Importe

en un combobox de userform deseo que aparezcan las cuentas del rango
cuentas, hasta ahí voy bien. lo que deseo es que al seleccionar una cuenta,
en el siguiente combobox me aparezcan los cheques que correspondan solo a la
cuenta seleccionada... como lo puedo hacer ?

Como Siempre gracias

Preguntas similare

Leer las respuestas

#6 José A. Castrejón
28/06/2005 - 18:22 | Informe spam
Gracias funciona muy bien, solo cambie los rangos de datos pues los titulos
estan en a12 y los datos comienzan en a13 , ahora viendo esto me surge otra
pregunta :

Ya esta filtrando el combobox1 al combobox2, como podria hacer para :
que el combobox1 tambien me hiciera un filtro para el combobox 3 veras :
el cobox 1 tiene la cuenta en el 2 se presentan las fechas (modifique el
offset a 1 ) si quisiera que el combox3 trajera los importes como tendria que
modificarlo ? probe a poner :
ComboBox2.AddItem Celda.Offset(, 1)
ComboBox3.AddItem Celda.Offset(, 4)
y funciona pero me trae los datos de "abajo de la seleccion".
Si esto no se puede me conformo con saber ¿como puedo saber en que numero de
fila esta el dato seleccionado que corresponde al cbox1 y 2 ?
¿como puedo poner en una celda (digamos a1 de la hoja "LIstas") el numero de
fila en donde estan estos datos seleccionados ?

Si yo puedo saber el numero de fila entonces puedo hacer modificaciones a
los demas campos de depositos con Cells(Renglon, x)=
Lo que quiero es asegurarme que al cambiar los datos se haga en el renglon
correcto.
Si no te queda muy claro puedo enviarte el archivo para que lo veas y sepas
como funciona

Saludos y mil gracias



"Héctor Miguel" escribió:

hola, José !

> ... 2 userforms para capturar cheques y depositos... cheques creo que ya lo solucione... para los depositos te expongo.
> ... 3 hojas inicio, cheques y depositos... en la hoja depositos tengo... cuentas fecha importe concepto
> ... userform con 2 combobox uno... las cuentas de banco que se usan (rowsource "CUENTAS")
> al seleccionar una... que en el segundo... aparezcan los importes de los depositos... que tengan como cuenta... el primer combobox.

suponiendo [segun comentas] que en el segundo combo SOLO necesitas los importes de la cuenta seleccionada en el primero...
=> tambien estoy suponiendo que la fila 1 de la hoja depositos SON titulos y que los datos inician desde la columna 'A' -???-
copia las siguientes lineas que corresponden al evento '_change' del primer combobox [el de las cuentas]
en el modulo de codigo del formulario ==> Private Sub ComboBox1_Change()
ComboBox2.Clear
Dim Celda As Range
With Worksheets("depositos")
If .[a1].AutoFilter Then .[a1].AutoFilter
.Range(.[a1], .[a65536].End(xlUp)).AutoFilter Field:=1, Criteria1:="=" & ComboBox1
For Each Celda In .Range(.[a2], .[a65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
ComboBox2.AddItem Celda.Offset(, 2)
Next
.[a1].AutoFilter
End With
End Sub

creo que hara falta 'afinar' detalles adicionales [que no he 'adivinado'] pero... comentas?
saludos,
hector.



Respuesta Responder a este mensaje
#7 Héctor Miguel
28/06/2005 - 20:49 | Informe spam
hola, José !

... solo cambie los rangos... pues los titulos estan en a12 y los datos comienzan en a13... otra pregunta:
... filtrando el combobox1 al combobox2... que el combobox1 tambien me hiciera un filtro para el combobox 3 veras:
... cobox 1 tiene la cuenta en el 2 se presentan las fechas (... el offset a 1)... que el combox3 trajera los importes [...]
... me conformo con saber... en que numero de fila esta el dato seleccionado que corresponde al cbox1 y 2 [...]



no se como lo hayas 'resuelto' para el caso de los cheques -?- [quizas lo que te expongo sea diferente] :))
un comentario 'previo'... si estas usando DOS combos [el 2 y el 3] para seleccionar UN SOLO movimiento...
[no te puedo asegurar que nunca sucedera o que sucedera con cierta 'frecuencia'... pero creo que]...
-> estas 'corriendo el riesgo' de que el indice de la seleccion en ambos combos sea 'distinta' -???- [te sugiero]...
-> cambia a un solo control de lista [NO combo] con 3 columnas [o mas] que 'reciban' los datos de cada fila 'filtrada'
-> el numero de fila del elemento seleccionado [en el ListBox] lo podras 'detectar' en el evento '_click' de la lista ;)
te expongo un ejemplo al final

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
-> utilizando un combo para la seleccion de las cuentas
-> y un control de lista [NO combo] para seleccionar 'el movimiento'
copia las siguientes lineas
en el modulo de codigo del formulario ==Private Sub ComboBox1_Change()
ListBox1.Clear
Dim Celda As Range, Fila As Integer
With Worksheets("depositos")
If .[a12].AutoFilter Then .[a12].AutoFilter
.Range(.[a12], .[a65536].End(xlUp)).AutoFilter Field:=1, Criteria1:="=" & ComboBox1
For Each Celda In .Range(.[a13], .[a65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem
ListBox1.List(Fila, 0) = Celda.Offset(, 1)
ListBox1.List(Fila, 1) = Celda.Offset(, 2)
ListBox1.List(Fila, 2) = Celda.Offset(, 3)
Fila = Fila + 1
Next
.[a1].AutoFilter
End With
End Sub
Private Sub ListBox1_Click()
Dim Fila As Long, Fx As Long, Dato
Fx = Worksheets("depositos").[a65536].End(xlUp).Row
With ListBox1
Dato = ComboBox1 & "\" & .List(.ListIndex, 1) & "\" & .List(.ListIndex, 2)
End With
Fila = Evaluate("Match(""" & Dato & _
""",Depositos!a1:a" & Fx & _
"&""\""&Depositos!c1:c" & Fx & _
"&""\""&Depositos!d1:d" & Fx & ",0)")
MsgBox "La fila en la hoja de depositos con el dato seleccionado es la numero: " & Fila
End Sub
Respuesta Responder a este mensaje
#8 José A. Castrejón
28/06/2005 - 23:39 | Informe spam
Muchas gracias por tu contìnuo interes, mira para el caso de los cheques es
distinto, (estamos hablando de modificar un registro previo) lo que hago es
que en un combobox obtengo la lista ed los cheques (numero) que siempre son
distintos. En el evento change del combox hago primeramente una ordenacion
por cheques y luego sheets("LISTAS").CELLS(1,1)=COMBOBOX1.TEXT , en las celda
de listas (1,2) tengo una formula de COINCIDIR(A1,CHEQUES,1)+12 y me dice en
que renglon esta ubicado mi cheque (mas 12 pues los datos empizan en la fila
13).
Una vez que se en que renglon está el cheque hago
FilaNumero=cells(1,2)
y asi en los textbox traigo los datos
textbox1.text=sheets("CHEQUES").CELLS(FilaNumero,3) y asi sucesivamente, si
el usuario cambia algun dato lo unico que hago es que los grabo de nuevo en
su ubicacion.
Pero para la modificacion de depositos es diferente pues no hay un numero
unico, puede haber varios depositos en las mismas fechas e importe, por eso
estoy tratando de filtrar, aunque realmente no se si es la mejor solución.
Se que la solución en Cheques no es elegante o eficiente del todo pero no
tengo experiencia en programacion o sintaxis de VBA.
Voy a probar tu solucion y te aviso como va
Saludos y gracias

"Héctor Miguel" escribió:

hola, José !

> ... solo cambie los rangos... pues los titulos estan en a12 y los datos comienzan en a13... otra pregunta:
> ... filtrando el combobox1 al combobox2... que el combobox1 tambien me hiciera un filtro para el combobox 3 veras:
> ... cobox 1 tiene la cuenta en el 2 se presentan las fechas (... el offset a 1)... que el combox3 trajera los importes [...]
> ... me conformo con saber... en que numero de fila esta el dato seleccionado que corresponde al cbox1 y 2 [...]

no se como lo hayas 'resuelto' para el caso de los cheques -?- [quizas lo que te expongo sea diferente] :))
un comentario 'previo'... si estas usando DOS combos [el 2 y el 3] para seleccionar UN SOLO movimiento...
[no te puedo asegurar que nunca sucedera o que sucedera con cierta 'frecuencia'... pero creo que]...
-> estas 'corriendo el riesgo' de que el indice de la seleccion en ambos combos sea 'distinta' -???- [te sugiero]...
-> cambia a un solo control de lista [NO combo] con 3 columnas [o mas] que 'reciban' los datos de cada fila 'filtrada'
-> el numero de fila del elemento seleccionado [en el ListBox] lo podras 'detectar' en el evento '_click' de la lista ;)
te expongo un ejemplo al final

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
-> utilizando un combo para la seleccion de las cuentas
-> y un control de lista [NO combo] para seleccionar 'el movimiento'
copia las siguientes lineas
en el modulo de codigo del formulario ==> Private Sub ComboBox1_Change()
ListBox1.Clear
Dim Celda As Range, Fila As Integer
With Worksheets("depositos")
If .[a12].AutoFilter Then .[a12].AutoFilter
.Range(.[a12], .[a65536].End(xlUp)).AutoFilter Field:=1, Criteria1:="=" & ComboBox1
For Each Celda In .Range(.[a13], .[a65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem
ListBox1.List(Fila, 0) = Celda.Offset(, 1)
ListBox1.List(Fila, 1) = Celda.Offset(, 2)
ListBox1.List(Fila, 2) = Celda.Offset(, 3)
Fila = Fila + 1
Next
.[a1].AutoFilter
End With
End Sub
Private Sub ListBox1_Click()
Dim Fila As Long, Fx As Long, Dato
Fx = Worksheets("depositos").[a65536].End(xlUp).Row
With ListBox1
Dato = ComboBox1 & "\" & .List(.ListIndex, 1) & "\" & .List(.ListIndex, 2)
End With
Fila = Evaluate("Match(""" & Dato & _
""",Depositos!a1:a" & Fx & _
"&""\""&Depositos!c1:c" & Fx & _
"&""\""&Depositos!d1:d" & Fx & ",0)")
MsgBox "La fila en la hoja de depositos con el dato seleccionado es la numero: " & Fila
End Sub



Respuesta Responder a este mensaje
#9 José A. Castrejón
29/06/2005 - 00:19 | Informe spam
Ya lo probe pero pasa lo siguiente : hago click en el listbox y aparece un
errror 13 en tiempo de ejecucion "No coinciden los tipos" en el listbox
aparece solo el titulo de una columna que es Fecha y al depurar me manda a la
linea :

Fila = Evaluate("Match(""" & Dato & _
""",Depositos!a1:a" & Fx & _
"&""\""&Depositos!c1:c" & Fx & _
"&""\""&Depositos!d1:d" & Fx & ",0)")



"Héctor Miguel" escribió:

hola, José !

> ... solo cambie los rangos... pues los titulos estan en a12 y los datos comienzan en a13... otra pregunta:
> ... filtrando el combobox1 al combobox2... que el combobox1 tambien me hiciera un filtro para el combobox 3 veras:
> ... cobox 1 tiene la cuenta en el 2 se presentan las fechas (... el offset a 1)... que el combox3 trajera los importes [...]
> ... me conformo con saber... en que numero de fila esta el dato seleccionado que corresponde al cbox1 y 2 [...]

no se como lo hayas 'resuelto' para el caso de los cheques -?- [quizas lo que te expongo sea diferente] :))
un comentario 'previo'... si estas usando DOS combos [el 2 y el 3] para seleccionar UN SOLO movimiento...
[no te puedo asegurar que nunca sucedera o que sucedera con cierta 'frecuencia'... pero creo que]...
-> estas 'corriendo el riesgo' de que el indice de la seleccion en ambos combos sea 'distinta' -???- [te sugiero]...
-> cambia a un solo control de lista [NO combo] con 3 columnas [o mas] que 'reciban' los datos de cada fila 'filtrada'
-> el numero de fila del elemento seleccionado [en el ListBox] lo podras 'detectar' en el evento '_click' de la lista ;)
te expongo un ejemplo al final

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
-> utilizando un combo para la seleccion de las cuentas
-> y un control de lista [NO combo] para seleccionar 'el movimiento'
copia las siguientes lineas
en el modulo de codigo del formulario ==> Private Sub ComboBox1_Change()
ListBox1.Clear
Dim Celda As Range, Fila As Integer
With Worksheets("depositos")
If .[a12].AutoFilter Then .[a12].AutoFilter
.Range(.[a12], .[a65536].End(xlUp)).AutoFilter Field:=1, Criteria1:="=" & ComboBox1
For Each Celda In .Range(.[a13], .[a65536].End(xlUp)).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem
ListBox1.List(Fila, 0) = Celda.Offset(, 1)
ListBox1.List(Fila, 1) = Celda.Offset(, 2)
ListBox1.List(Fila, 2) = Celda.Offset(, 3)
Fila = Fila + 1
Next
.[a1].AutoFilter
End With
End Sub
Private Sub ListBox1_Click()
Dim Fila As Long, Fx As Long, Dato
Fx = Worksheets("depositos").[a65536].End(xlUp).Row
With ListBox1
Dato = ComboBox1 & "\" & .List(.ListIndex, 1) & "\" & .List(.ListIndex, 2)
End With
Fila = Evaluate("Match(""" & Dato & _
""",Depositos!a1:a" & Fx & _
"&""\""&Depositos!c1:c" & Fx & _
"&""\""&Depositos!d1:d" & Fx & ",0)")
MsgBox "La fila en la hoja de depositos con el dato seleccionado es la numero: " & Fila
End Sub



Respuesta Responder a este mensaje
#10 Héctor Miguel
29/06/2005 - 02:09 | Informe spam
hola, José !

... hago click en el listbox y aparece un errror 13 en tiempo de ejecucion "No coinciden los tipos"
en el listbox aparece solo el titulo de una columna que es Fecha y al depurar me manda a la linea :
Fila = Evaluate("Match(""" & Dato & _
""",Depositos!a1:a" & Fx & _
"&""\""&Depositos!c1:c" & Fx & _
"&""\""&Depositos!d1:d" & Fx & ",0)")



1) [posiblemente] el error 13 se debe a que [en mis supuestos]...
-> asumi que el arreglo de los datos en la hoja 'depositos' es/era como sigue...
colA -> las cuentas -> se 'cargan/selecconan' en el combobox1 -> desde la hoja 'inicio' [o como se llame]
cobB -> las fechas -> que estoy 'omitiendo' en la comparacion y busqueda de la fila por 'convencionalismos regionales'
colC -> los importes -> esta SI la estoy incluyendo en la comparacion y busqueda de la fila
colD -> los conceptos -> esta tambien la incluyo
-> si alguna de las columnas es diferente en la realidad de lo que 'tuve que' suponer... la linea que causa el error se forma +/- asi...
a) usa la misma formula que empleas para localizar los cheques [coincidir()] pero por codigo y en ingles que es 'Match' ;)
b) el dato que se busca [Dato] es una variable que se 'construyo' de concatenar el combobox1 y las columnas 2 y 3 del listbox
c) 'el resto' es 'comparar' el dato 'resultante' con el rango de las columnas 'A', 'C' y 'D' de la hoja 'depositos'
-> 'repito'... si alguna es diferente... habra que adaptarla en el codigo, en la linea donde se presenta el error 13 :-(

2) el que solo 'veas' en el listbox los datos-fecha... [probablemente] no viste el comentario de que el listbox era de 3 columnas -?-
si no lo quieres establecer en tiempo de diseño... puedes [ademas] establecerlo en tiempo de ejecucion ;)
modifica la linea en el evento '_change' del combobox1...
de -> ListBox1.Clear
a -> ListBox1.Clear: ListBox1.ColumnCount = 3

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida