Mantener las celdas iguales al ejecutar una macro

Resuelto
Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   -  
Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   -

Hola,

estoy creando una macro. Sé cómo hacerlo. Bueno, no del todo, ya que estoy recurriendo a ustedes. :-)

Durante la macro, quiero hacer una clasificación. Pero algunas celdas tienen los caracteres en rojo, otras en verde. Cuando miro lo que ha dado la macro, encuentro los colores, pero no en las celdas correctas.

¿Qué estoy haciendo mal?

Gracias por sus respuestas

13 respuestas

  1. Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   2
     

    Gracias Bruno

    He conseguido. He estado tocando la macro a partir de tu información y funciona.

    No sabría muy bien cómo lo hice, pero el resultado está ahí.

    Otra vez, gracias.

    1
  2. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    Hola,

    Si puedes mostrarme :

    tu código de ordenación
    cómo se aplican los colores

    te puedo decir exactamente dónde se atasca...


    0
  3. Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   2
     

    Hola

    No sé si es esto lo que deseas.

    He hecho una captura de la hoja de excel después de usar la macro. Puedes notar que los colores no corresponden a la celda correcta.

    Y la captura de la macro correspondiente, con la esperanza de que sea esto lo que deseas.

    Gracias por tu ayuda.

    0
  4. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    Reanudando...

    Gracias por la captura, es muy ilustrativa
    Y aquí podemos ser mucho más precisos.

    Lo que observas confirma en un 99% lo siguiente:

    Estás ordenando los valores, pero NO toda la gama (o no está correctamente vinculada)

    El error clásico en VBA

    Muy a menudo, tenemos un código del tipo:

    Range("B2:B20").Sort Key1:=Range("B2"), Order1:=xlDescending

    Eso solo ordena la columna de puntajes

    PERo NO los nombres al lado

    Lo que hay que hacer

    Debes ordenar toda la zona, por ejemplo:

    Range("A2:B20").Sort Key1:=Range("B2"), Order1:=xlDescending, Header:=xlNo


    Aquí:

    los nombres
    los valores
    los colores

    todo permanece alineado

    Versión limpia (recomendada)

    Aún mejor:

    With ActiveSheet.Sort .SetRange Range("A2:B20") .SortFields.Clear .SortFields.Add Key:=Range("B2:B20"), Order:=xlDescending .Header = xlNo .Apply End With

    Prueba simple

    Para verificar en tu caso:

    Toma tu tabla
    Haz un ordenamiento manual en Excel (menú Datos → Ordenar)
    Si todo queda bien → tu VBA es el problema
    Si también se rompe → problema de estructura


    0
  5. Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   2
     

    Entiendo lo que me dices, pero no puedo hacerlo.

    Cuando lo hago manualmente, los nombres tienen su buena puntuación pero no el color correcto.

    Hago col 1-2 Clt c, luego 4-5 pegar especial valor

    0
  6. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     


    ¿Por qué no funciona?

    Cuando haces:

    pegado especial → valores

    Excel copia:

    los números
    el texto
    NO los formatos (por lo tanto, no los colores)

    Entonces:

    las puntuaciones son correctas
    los nombres son correctos
    los colores permanecen los de antes

    LAS SOLUCIONES (según tu necesidad)
    Solución 1 — Copiar CON los formatos (lo más simple)

    En lugar de:

    Pegado especial → Valores

    haz:

    Pegado especial → Valores + formatos

    Solución 2 — Copiar únicamente los formatos después

    Pegar los valores
    Luego hacer:

    Pegado especial → Formatos

    LA VERDADERA BUENA MÉTODO (recomendado)

    No copies más en absoluto

    Haz tu ordenación directamente sobre la tabla final

    Ejemplo:

    Trabajas directamente en las columnas 4-5
    Haces la ordenación sobre eso

    Así:

    sin más copias
    sin problemas de color

    Si quieres

    Te puedo:

    corregir tu macro completa

    Envíame tu código


    0
  7. Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   2
     

    De hecho, te voy a pedir que corrijas mi macro.
    Para que lo sepas, y quizás esa sea la razón, el valor de las celdas proviene de otra hoja.

    Te envío, por lo tanto, la hoja 1, la hoja 2 con la indicación para una celda de la fórmula (las otras debajo son similares y utilizan la macro que desesperadamente no quiere conservar los colores correctos.

    Y

    por supuesto, la macro.

    Gracias

    0
  8. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    ¡Gracias!

    Tus errores:

    Tu macro hace esto:

    Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats

    Problema:

    Copias los valores + formatos numéricos
    PERO NO los colores de fuente

    Y hay un segundo problema

    Haces un .Select + Selection

    Eso es:

    frágil
    fuente de errores
    innecesario

    CORRECCIÓN SIMPLE (tu macro corregida)

    Sub Macro4() Dim ws As Worksheet Set ws = ActiveWorkbook.Worksheets("resultados") ' Copia completa (CON colores) ws.Range("G2:H19").Copy Destination:=ws.Range("K2") ' Ordenación limpia With ws.Sort .SortFields.Clear .SortFields.Add Key:=ws.Range("L2:L19"), _ SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal .SetRange ws.Range("K2:L19") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub


    IMPORTANTE (en TU caso específico)

    Dices:

    los valores vienen de otra hoja

    Entonces:

    los colores NO vienen de las fórmulas
    ya están en G:H

    por lo tanto, la copia completa es la buena solución

    Si quieres ir más allá

    También puedes:

    automatizar los colores según la puntuación (mucho más robusto)
    o
    simplificar todo tu sistema (menos columnas intermedias)

    Ya estás muy cerca de algo limpio

    Si necesitas ayuda, ¡dímelo!


    0
  9. Philbert29 Mensajes publicados 48 Fecha de registro   Estado Miembro Última intervención   2
     

    Buenas tardes

    Definitivamente, no lo estoy logrando, sea cual sea el método.
    No consigo fijar el color para las 2 celdas lado a lado.
    Si funciona para el color, entonces los valores de los números son erróneos y si los números son correctos, los colores verdes y rojos se mueven por todos lados, ¡y eso agrega más confusión!?

    https://docs.google.com/spreadsheets/d/1G8uUYFA4qVpF71UWx_v9nc_Y3SZhTgeAW921CxSoJkk/edit?usp=sharing 

    Te dejo el enlace del archivo. Si puedes escribir la macro. Gracias

    0
  10. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    Hola,

    Ok, entiendo tu frustración... y voy a ser directo contigo:

    Estás luchando contra Excel en vano, porque tu enfoque actual es inestable por naturaleza.

    Pero vamos a solucionar esto de una vez por todas.

    En cuanto tenga un momento, te daré otro método para reformular tu hoja. ¡Hasta luego!


    0
  11. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    Re hola,

    El verdadero problema de fondo

    Tú haces:

    Fórmulas entre hojas
    Colores manuales
    Una copia
    Un ordenamiento

    Resultado:

    ya sea que los valores sean correctos
    o que los colores sean correctos
    nunca los dos al mismo tiempo

    Es NORMAL, no es un error de tu parte.

    LA solución robusta (la que funciona al 100%)

    Dejamos de copiar completamente los colores

    Y hacemos esto correctamente:

    Principio
    Los colores deben depender de una regla
    NO de un copiar/pegar

    Paso 1 — ELIMINAR los colores actuales

    En tu hoja de resultados:
    quita todos los colores manuales

    Paso 2 — Formato condicional

    En la columna de las puntuaciones (ej: L2:L19):

    Regla 1 (rojo)
    = L2 < 10

    Regla 2 (verde)
    = L2 >= 10

    Aplicar a:
    K2:L19 (para colorear nombre + puntuación juntos)

    Paso 3 — Macro SIMPLIFICADA (sin copia de formatos)

    Aquí está TU macro limpia:

    Sub Clasificación_Limpia() ``` Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("resultados") ' Copiar únicamente los valores (¡no los formatos!) ws.Range("K2:L19").Value = ws.Range("G2:H19").Value ' Ordenar With ws.Sort .SortFields.Clear .SortFields.Add Key:=ws.Range("L2:L19"), _ Order:=xlDescending .SetRange ws.Range("K2:L19") .Header = xlNo .Apply End With ``` End Sub 


    Por qué funciona (y por qué a ti te falla)

    Antes:

    copiabas colores → se desajustaban
    o los perdías → incoherencia

    Ahora:

    copias únicamente los datos
    los colores se recalculan automáticamente
    el ordenamiento no rompe nada

    Resultado final

    Puedes:

    ordenar 100 veces
    cambiar los valores
    volver a ejecutar la macro

    Los colores estarán SIEMPRE correctos


    0
  12. danielc0 Mensajes publicados 2191 Fecha de registro   Estado Miembro Última intervención   287
     

    Hola,

    ¿En qué hoja estás haciendo la clasificación? Al leer tu código, te basas en las columnas J y K que no contienen color. Explica exactamente qué quieres hacer.

    Daniel


    0
  13. Bruno83200_6929 Mensajes publicados 725 Fecha de registro   Estado Miembro Última intervención   170
     

    re,

    EJEMPLO


    0