Eliminar contenido y bordes de celdas de un rango

Roland -  
ccm81 Mensajes publicados 11033 Estado Miembro -
Hola,

Me gustaría mediante una macro VBA eliminar el contenido y los bordes de las celdas de una parte del rango M37:AJ147, desde la celda que contiene el valor más alto de la columna AJ, hasta el final de este rango. Esto sin eliminar filas.

Ejemplo:
en el rango M37:AJ147 en la columna AJ, la celda AJ100 contiene el valor más alto
entonces el contenido y los bordes de M100:AJ147 se eliminan, manteniendo el mismo color de fondo.

Gracias

Configuración: Windows 7 / Firefox 42.0

13 respuestas

  1. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    Hola

    Una macro para adaptar

    Const plage = "A2:G22" Const coco = "G" Sub ok() Dim paef As Range, m, obj As Object Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long m = Application.WorksheetFunction.Max(Columns(coco)) Set obj = Columns(coco).Find(m, , , xlWhole) lideb = obj.Row lifin = Range(Split(plage, ":")(1)).Row codeb = Range(Split(plage, ":")(0)).Column cofin = Range(Split(plage, ":")(1)).Column Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin)) paef.Value = "" paef.Borders.LineStyle = xlNone End Sub

    Cdlmnt
    0
  2. Roland
     
    Hola

    Gracias por tu respuesta.

    Cuando intento aplicar la macro, aparece el siguiente mensaje: "Error de compilación: Se esperaba End Sub"

    La macro es la siguiente:

    Const plage = "M37:AJ147"
    Const coco = "AJ"

    Sub ok()
    Dim paef As Range, m, obj As Object
    Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
    m = Application.WorksheetFunction.Max(Columns(coco))
    Set obj = Columns(coco).Find(m, , , xlWhole)
    lideb = obj.Row
    lifin = Range(Split(plage, ":")(1)).Row
    codeb = Range(Split(plage, ":")(0)).Column
    cofin = Range(Split(plage, ":")(1)).Column
    Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
    paef.Value = ""
    paef.Borders.LineStyle = xlNone
    End Sub

    ¿Cómo resolver este problema?
    0
  3. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    Cuando quiero aplicar la macro, aparece el siguiente mensaje: "Error de compilación: Se esperaba End Sub"
    Raro, en mi caso, he copiado tu código en un módulo, pude compilarlo y ejecutarlo sin errores.
    ¿No tendrás otras macros en tu módulo?
    Si no, envía tu archivo a través de cjoint.com

    Saludos.
    0
  4. Roland
     
    Hola CCM81

    Adjunto el archivo. Estoy en Excel 2000.
    Al hacer clic en Herramientas Macros aparece una lista de 3 macros ("Deuxnuminsertion", "Numéros", "OK"), un clic en Editor de Visual Basic permite ver los módulos, de los cuales dos contienen macros (Módulo 6: "Deuxnuminsertion"; Módulo 5: "Numéros").
    Tengo 3 macros en la lista de macros y 2 en los módulos. ¿El problema viene de ahí?

    Atentamente

    http://www.cjoint.com/c/EKvopxAkGIY
    0
  5. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    Elimina estas líneas, que declaran un procedimiento del cual no hay ni el cuerpo (el código propiamente dicho) ni el final (end sub)

    Sub Deuxnuminsertion()
    '
    ' Deuxnuminsertion Macro
    ' Macro grabada el 21/11/2015 por Roland
    '
    '

    RQ. Tienes algunos módulos vacíos que puedes eliminar

    Cdlmnt
    0
  6. Roland
     
    Hola CCM 81

    He realizado las modificaciones presentadas en el archivo adjunto. Aparece el mensaje "Error de ejecución 91 - variable u objeto de bloque With no definida".
    El depurador resalta en amarillo la línea "libed = objeto.Row".

    Debo haber hecho en algún lugar una operación que bloquea la macro.

    Saludos cordiales

    http://www.cjoint.com/c/EKxksb7HEgY
    0
  7. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    Dim paef As Range, m As Date, obj As Object

    Cdlmnt
    0
  8. Roland
     
    Hola CCM81

    La macro funciona pero hay un problema expuesto en el archivo adjunto.

    Cordialmente

    http://www.cjoint.com/c/EKywbVeRHiY
    0
  9. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    1. En cuanto al color, añades la línea subrayada
    paef.Borders.LineStyle = xlNone
    paef.Interior.ColorIndex = 2
    End Sub

    2. En cuanto al error, creo que proviene del hecho de que en AI160 tienes un valor que no tiene nada que ver con las fechas del inicio de columna.
    Prueba esto
    Const Plage = "M37:AI147"
    Const coco = "AI1:AI150"

    Sub ok()
    Dim paef As Range, m As Date, obj As Object
    Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
    m = Application.WorksheetFunction.Max(Range(codate))
    Set obj = Range(codate).Find(m, , , xlWhole)
    lideb = obj.Row
    lifin = Range(Split(Plage, ":")(1)).Row
    codeb = Range(Split(Plage, ":")(0)).Column
    cofin = Range(Split(Plage, ":")(1)).Column
    Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
    paef.Value = ""
    paef.Borders.LineStyle = xlNone
    paef.Interior.ColorIndex = 2
    End Sub

    Cdlmnt
    0
  10. Roland
     
    Hola ccm81

    Para la supresión que buscas, siempre tenía mensajes de error cuando la rellenación a partir de la línea 837 estaba presente. Al final, moví el rango M162:AI2004 para dejar este rango vacío. La macro funciona de esta manera (¿por qué?).

    La macro transforma bien el color de fondo de las celdas coloreadas a fondo blanco.

    Atentamente
    0
  11. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    Había un error aquí (¡un pegado prematuro!)

    Const Plage = "M37:AI147"
    Const coco = "AI1:AI150"

    Sub ok()
    Dim paef As Range, m As Date, obj As Object
    Dim codeb As Long, cofin As Long, lideb As Long, lifin As Long
    m = Application.WorksheetFunction.Max(Range(coco))
    Set obj = Range(coco).Find(m, , , xlWhole)
    lideb = obj.Row
    lifin = Range(Split(Plage, ":")(1)).Row
    codeb = Range(Split(Plage, ":")(0)).Column
    cofin = Range(Split(Plage, ":")(1)).Column
    Set paef = Range(Cells(lideb, codeb), Cells(lifin, cofin))
    paef.Value = ""
    paef.Borders.LineStyle = xlNone
    paef.Interior.ColorIndex = 2
    End Sub

    Cdlmnt
    0
  12. Roland
     
    Hola ccm81

    El mensaje de error 1004 aparece: "No se puede leer la propiedad de la clase Worksheet.función"

    Saludos
    0
  13. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    ¿Has definido bien el rango coco?
    Const coco = "AI1:AI150"
    0