Cambiar el valor de 2 celdas de un gruppo de 3 cuando se cambia una de las tres

Pues Necesito un macro que se ejecute y cambie el valor de las otras dos del grupo

Ejemplo : Tengo A1, A2 y A3 quiero que cuando cambie cualquiera de ellas las otra dos se pongan a 0 o cualquier otro valor designado por mi.

H he desarrollado la siguiente macro :

--------------------------------------------------------------------------------------------------------------------

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' Variable KeyCells contiene las celdas  a controlar
Set KeyCells = Range("A1:A3")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Codigo en caso de cambio en A1
If Target.Address = "$A$1" Then
       Range("$A$2").Select
       ActiveCell.FormulaR1C1 = "0"
       Range("$A$3").Select
       ActiveCell.FormulaR1C1 = "0"
       Exit Sub
       End If
' Codigo en caso de cambio en A2
'If Target.Address = "$A$2" Then
 '       Range("$A$1").Select
  '      ActiveCell.FormulaR1C1 = "10"
   '     Range("$A$3").Select
    '    ActiveCell.FormulaR1C1 = "10"
     '   Exit Sub
      '  End If
' Codigo en caso de cambio en A3
'If Target.Address = "$A$3" Then
 '      Range("$A$1").Select
  '     ActiveCell.FormulaR1C1 = "20"
   '    Range("$A$2").Select
    '   ActiveCell.FormulaR1C1 = "20"
     '  Exit Sub
      ' End If
End If
End Sub

------------------------------------------------------------------------------------------------------------

Si dejo que se ejecute cualquiera de los 3 grupos funciona bien, pero cuando dejo que se ejecute más de uno siempre me da "error 28 pila insuficiente"

¿Dónde me equivoco?

¿Hay otra forma más sencilla?

1 respuesta

Respuesta
1

Utiliza este código que modifiqué:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' Variable KeyCells contiene las celdas  a controlar
Set KeyCells = Range("A1:A3")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
' Codigo en caso de cambio en A1
    If Target.Address = "$A$1" Then
            Application.EnableEvents = False
            Range("$A$2").Select
            ActiveCell.FormulaR1C1 = "0"
            Range("$A$3").Select
            ActiveCell.FormulaR1C1 = "0"
            Application.EnableEvents = True
    ' Codigo en caso de cambio en A2
    ElseIf Target.Address = "$A$2" Then
            Application.EnableEvents = False
            Range("$A$1").Select
            ActiveCell.FormulaR1C1 = "10"
            Range("$A$3").Select
            ActiveCell.FormulaR1C1 = "10"
            Application.EnableEvents = True
    ' Codigo en caso de cambio en A3
    ElseIf Target.Address = "$A$3" Then
        Application.EnableEvents = False
           Range("$A$1").Select
           ActiveCell.FormulaR1C1 = "20"
           Range("$A$2").Select
           ActiveCell.FormulaR1C1 = "20"
           Application.EnableEvents = True
    End If
End If
End Sub

Te causaba error porque tenias que deshabilitar los eventos y activarlos de nuevo una vez que se cumple una condición, además de que los If estaban mal estructurados.

Funciona muy bien eres un genio pero he cometido un error. Lo siento
Para facilitar la ayuda utilice A1, A2 y A3 que rectifico a mano y funciona muy bien
Pero mi problema es que en mi caso las celdas cambian de valor dependiendo de un obleto COMBO al que están vinculadas
Cada una de las tres a un combo diferente
Entonces pensé pues lo pongo en el evento "Worksheet_Calculate" en lugar del "Worksheet_Change"
Aquí me da error : Error en tiempo de ejecución se requiere objeto
Si es fácil de arreglar te estaría muy agradecido
Si es complicado, dejalo no quiero molestar más, buscare otra solución
GRACIAS

Deben plantear desde un principio el objetivo de su macro y los objetos o elementos que actúan en esta, ya que los que tratamos de ayudar pues buscamos la solución de lo que plantean.

¿Ahora me surgen las dudas?

¿Por qué cambiar al evento Calculate? ¿En qué momento necesitas que se ejecute el código?

Los combos están incrustados en la hoja y cuando seleccionas un valor lo pasan a sus celdas A1, ¿A2 y A3 cada uno?

Si me pudieses explicar la mecánica de lo que haces en tu archivo, podría ayudarte mejor.

El evento debe ejecutarse cada vez que cambie el valor en cualquiera de los 3 combos
Muchas GRACIAS por su paciencia

Si cada vez que se modifica el combo varia el valor de A1, A2 o A3

(Son los indices de cada una de la tablas)

He hecho un fichero, si me dicen como, podría subirlo

"Si cada vez que se modifica el combo varia el valor de A1, A2 o A3

(Son los indices de cada una de la tablas)"

Por ejemplo si en el combo A1 seleccionas "Blanco" en la celda A1 ¿Qué valor pone o debe poner?

"He hecho un fichero, si me dicen como, podría subirlo"

No sé como debas subirlo, pero subelo a otra plataforma y pones el link (por ejemplo: Google Drive)

https://drive.google.com/file/d/18HprGeitCNttzEKHe-oPXQvLtaM8neb7/view?usp=sharing

Cada vez me explico peor :

Mi idea es :

Solo se pueden modificar los combos

Los valores A1, A2 y A3 son automaticos y salen solos al modificar los combos son los indices de las tablas

la idea es que cuando modifico uno cualquiera,  los otros 2 se pongan a 0

ejemplo :

Si modifico el combo 1 deberia salir A1=1 combo 1 = blanco

combos 2 y 3 en vacio y A2 y A3 en 0

Igual con el resto de los valores del combo 1

Tiene que ocurrir lo mismo cuando modifico el combo 2 que debe salir con sus valores y los otros dos combos en vacio y los indice A en 0

MUCHAS GRACIAS por tu paciencia

Si esta vez no consigo explicarme, lo dejo

te adjunto fichero

Te paso el link del archivo modificado, prueba y espero tus comentarios.

https://drive.google.com/open?id=1wCia3FJ8x9rDGSyUI5K-EfxQlEwUib2i

Cambié los controles he hice ajustes, cualquier cosa estoy al pendiente...

¡Gracias! 

Menuda currada te has pegado.

Lo has echo todo nuevo

Ya funciona, no exactamente lo que andaba buscando pero el resultado final el bueno

GRACIAS

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas