En este grupo En todos

Foro de Excel



Filtrado y eventos

J. Fortunato
Master en calidad y certificación de e...
Escrito por J. Fortunato Hontoria C.
el 03/08/2011

Hola , creía que sabía de Excel pero ante el problema sin resolver que tengo tendré que modificar mi autocalificación. :)

Bien se trata de lo siguiente (de manera simplificada).

Tengo valores de items en el rango A2:A20 donde no se repiten valores iguales pero si parte. Por ejemplo puedo tener "Item1" e "Item1. A". En otra celda, E4 en el ejemplo, tengo una validación de lista (List) asociada (Source) a un nombre definido en el name manager "=MIrango". En la definición del nombre tengo lo siguiente:

=OFFSET(Datos! A2;MATCH(Datos! E4&"*";Datos! A2:A20;0)-1;;COUNTIF(Datos! A2:A20;Datos! E4&"*"))

Todo está en la hoja Datos por simplicidad. Lo que hago es seleccionar el rango correspondiente para la lista de validación cuando el usuario escribe parte del nombre y da Enter. Así por ejempo al escribir "It" + Enter y abrir la lista de validación solo veo en ella los elementos que comienzan por "It". Esto es úitl cuado la lista de validación es muy larga pues evita presentar todos los elementos y tener que desplazarse por ellos hasta encontrar el que corresponde.

Bien, el problema viene cuando genero un evento asociado al cambio de la celda para hacer cualquier otra cosa (no importa para el ejemplo) pongamos is sumando 1 al valor la celda F1.

A la secuencia:

1. Escribir en E4 "It" y pulsar Enter

2. Abrir el desplegable, que solo presenta valores que comienzan con "It"

3. Seleccionar el "Item1" por ejemplo, que queda escrito en la celda E4.

La hoja Excel responde con 4 eventos que en orden son:

Calculate, Change. Change, Calculate

Creo que el primero es por la fórmula contenida en el nombre (obsérvese que da un error si no desmarco la casilla "Show error alert..... " en la pestaña Data Validatión/Error Alert)

El segundo debe ser al cambiar la celda al valor "It"

El tercero al cambiar la celda a "Item1"

El cuarto es porque al cambiar el valor de la celda se vuelve a recalcular la fórmula contenida en el source de la validación.

Lo que necesito es saber cual es el origen de cada evento por cuanto si asocio alguna accion al evento de cambio éste se produce 2 veces y la accion por tanto se duplica. En el ejemplo se sumaría de más al valor de F1. Tampoco me puedo fiar del orden de los eventos porque si el usuario selecciona directamente de toda la lista o introduce a mano el dato la secuencia es diferente.

Lo ideal sería disponer de un evento que se generara al seleccionar un valor de la lista de validación o al expandirla, para poder distinguir, pero supone (creo) hacer una clase nueva para el tratamiento de hojas y/o rangos. He jugado con cambiar colores de fondo según el evento es calculate o change pero tampoco me arregla nada.

Otra posibilidad sería correr una macro con el evento change de la hoja que detectara el contenido de la celda y si no coincide alguno de los del rango de búsqueda, saber que estoy en la fase de despliegue de la lista de validación y así no lanzar la suma de la celda F1. Creo que esto funcionaría pero me parece un tanto engorroso por cuanto ya la fórmula ha hecho su trabajo de filtrar.

Otra cosa que puede ser viable es el manejo del error que se produce (marcando previamente la casilla del alert error), pero sinceramente no he hecho nada al respecto y no sé como abordarlo.

Espero haberme explicado correctamente. Agradecería cualquier idea al respecto.

Saludos.

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 03/08/2011

Mmmm...
No sé si me quedó muy clara tu descripción. Sin embargo intenta con:
_______________

Private Sub Worksheet_Change(ByVal Target As Range)
If Target. Address = "$E$1" Then
On Error GoTo Fin
If WorksheetFunction. CountIf([miRango], Target) = 0 Then End
Application. EnableEvents = False
[F1] = 1 + [F1]
Application. EnableEvents = True
End If
Fin:
End Sub
_______________

Saludos, Cacho R

Servando Villalon
Licenciado en sistemas universidad del...
Escrito por Servando Villalon
el 03/08/2011

¿Y no te sirve usar un cuadro combinado de Controles ActiveX?
Hace lo que quieres, sin necesidad de código

J. Fortunato Hontoria C.
Master en calidad y certificación de e...
Escrito por J. Fortunato Hontoria C.
el 04/08/2011

Gracias, funciona como esperaba.

Saludos.

J. Fortunato Hontoria C.
Master en calidad y certificación de e...
Escrito por J. Fortunato Hontoria C.
el 04/08/2011

Prefería no usar controles ActiveX, pero gracias por tu respuesta que también es válida.

Saludos.

Cacho Rodríguez
Ing. electrónica u.n.r.
Escrito por Cacho Rodríguez
el 04/08/2011

Al contrario: gracias por avisar.
Saludos, Cacho R.