Poner en dos celdas un "No", una vez que se seleccione un "Si" en otra celda, y que así mismo se escriba un texto en otra celda.

Tengo tres celdas (E54, E55, E56) que tienen lista desplegable (validación de datos). Los valores a seleccionar son "SI" y "NO". Quiero que una vez el usuario seleccione "SI", AUTOMATICAMENTE, en las otras celdas que tienen lista desplegable, se seleccione "NO". Pero, que adicionalmente, cuando se seleccione "SI" se escriba en la celda de la derecha un cierto mensaje, el cual dependerá de la celda que se ha seleccionado como "SI".

Por ejemplo, si en la celda E54 selecciono si, entonces el mensaje que quiero mostrar es "mensaje 1 ", si selecciono la celda E55, entonces el mensaje que quiero mostrar es "Mensaje 2", si selecciono la celda E56, entonces el mensaje que quiero mostrar es "Mensaje 3".

1 respuesta

Respuesta
1

.22.03.17

Buenas noches, Leonardo.

Aquí te comparto la rutina que armé para lograr lo que entendí que solicitas.

Ten en cuenta que las celdas donde están las listas desplegables deben permitir ingresar el dato a través de la rutina. Es decir, esta pestaña no debe tener marcada la casilla que te indico:

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y en el panel de la izquierda busca la hoja donde quieres que esto ocurra. Da doble click sobre ella. (Otra forma de llegar a este punto es hacer click derecho sobre la solapa de esta hoja y elegir la opción "Ver Código)

Allí pega el siguiente procedimiento de VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== LEONARDO, modifica estos datos de acuerdo a tu proyecto:
MatrizCeldas = Array("E54", "E55", "E56")
MatrizMensajes = Array("mensaje1", "mensaje2", "mensaje3")
'---- fin Variables
'
'---- inicio de rutina:
'  
For elem = 0 To UBound(MatrizCeldas)
    If Target.Address(False, False) = MatrizCeldas(elem) Then
        Application.EnableEvents = False
        Conte = UCase(Target.Value)
        For elemOK = 0 To UBound(MatrizCeldas)
            Range(MatrizCeldas(elemOK)).ClearContents
            If Target.Address(False, False) <> MatrizCeldas(elemOK) Then
                Range(MatrizCeldas(elemOK)).Value = IIf(Conte = "SI", "NO", "SI")
            End If
        Next
        Target.Offset(0, 1).Value = MatrizMensajes(elem)
        Application.EnableEvents = True
    End If
Next
End Sub

Nota que, al principio del código, hay dos matrices (Array) donde puedes agregar o modificar las celdas involucradas y sus respectivos mensajes a mostrar.

.

Estimado Fernando, 

De antemano agradezco tu disposición, sin embargo al correr el código que muy gentilmente me enviaste, no funciona de la forma en como pregunté, pues cuando selecciono por ejemplo en la celda E54 "SI", las celdas E55 y E56 no se en "NO". Adicionalmente, siempre se muestran los mensajes, independientemente de la elección hecha en estas celdas. 

Cordialmente, Leonardo.

.

Es correcto lo que dices.

Le hice una pequeña modificación para que haga lo que solicitabas.

Usa este código:

Private Sub Worksheet_Change(ByVal Target As Range)
'---- Variables modificables ----
'=== LEONARDO, modifica estos datos de acuerdo a tu proyecto:
MatrizCeldas = Array("E54", "E55", "E56")
MatrizMensajes = Array("mensaje1", "mensaje2", "mensaje3")
'---- fin Variables
'
'---- inicio de rutina:
'  
For elem = 0 To UBound(MatrizCeldas)
    If Target.Address(False, False) = MatrizCeldas(elem) Then
        Application.EnableEvents = False
        Conte = UCase(Target.Value)
        For elemOK = 0 To UBound(MatrizCeldas)
            Range(MatrizCeldas(elemOK)).Offset(0, 1).ClearContents ' sólo modifiqué esta línea
'  
            If Target.Address(False, False) <> MatrizCeldas(elemOK) Then
                Range(MatrizCeldas(elemOK)).Value = IIf(Conte = "SI", "NO", "SI")
            End If
        Next
        Target.Offset(0, 1).Value = MatrizMensajes(elem)
        Application.EnableEvents = True
    End If
Next
End Sub

Como verás en esta captura de pantalla, opera así:

Espero que ahora sí lo haga correctamente (debería)

Un abrazo
Fer

.

Fernando,

Aun persiste la dificultad. Sigue sin realizar la tarea que se quiere. Como dato que podría ser útil, estoy usando EXCEL 2016 para MAC.

.

Ah! Ese es un dato no menor.

Hasta donde sé no son compatibles.

Pero ayudaría que comentes si el tema es que dá error o que no hace lo esperado y, en tal caso, qué es lo que no hace.

De todos modos, no puedo probarlo porque tengo Office para Windows, donde hizo lo que pedías.

Saludos

Fer

.

Fer, 

Prove pasando el archivo a otro computador pero con sistema operativo Windows y EXCEL 2013, y el problema persiste. Por ende creo que en este caso, el tema no sería de compatibilidad. El asunto, es que cuando selecciono un "SI" en alguna de estas celdas (E54, E55, E56), no sucede nada. Nada en lo absoluto. El procedimiento que hago para copiar el codigo es el siguiente: 

  • Copio tal cual como esta el código (En estos casos de prueba, no escribo los mensajes que quiero que muestre tal como puedes ver en la foto), en la hoja donde quiero que se ejecute la acción, le doy guardar y realizo la selección en alguna de estas casillas. 

Adjunto envío fotos de esto: 

.

Hola, Leonardo

Antes de avanzar, debo preguntar lo obvio:

¿Estás seguro de que están activadas las macros, es decir que se haya seteado en Bajo el nivel de seguridad de tu MS Excel?

Prueba tratando de ejecutar una rutina simple como esta:

Sub TEST()

MsgBox "Hola"

End Sub

Porque si lo que seleccionas estuviese en las celdas que le indicas, debe funcionar como esperas.

Revisa esa configuración de seguridad. Si no estuviera en "baja" cámbiala. Luego cierra el archivo con la rutina y vuelve a abrirlo.

Tal vez sea eso. Pero me comentas.

Abrazo

Fer

.

Estimado Fer,

Además de lo que pretendo hacer, ya he incluido otras MACROS al libro de excel y funcionan perfectamente. Por ende, no puede ser el que el nivel de seguridad este en bajo. 

Gracias, 

Leonardo 

.

Hola, Leonardo

Me queda sólo pensar que las direcciones de celdas son imprecisas.

Tal vez tengas celdas combinadas, en tu imagen no puedo notarlo, pero en mi PC, aún usando selección por Lista de Validación funciona correctamente.

Esta imagen muestra lo que hace ese mismo código sin modificación alguna, en mi equipo:

Eventualmente puedes pasarme una imagen que incluya la referencia a filas y columnas o enviarme el archivo a:

Recuerda que no tengo Mac, por tanto grábalo compatible para ambas versiones.

Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas