Duda sobre macro para colorear un rango de filas

Hola Expertos.
Tengo un par de dudas y quisiera que me ayudaran, ya que me quiebro la cabeza y no le hayo.
Tengo un libro en excel con varias hojas que se denominan (ENERO, FEBRERO, ETC) en las cuales tengo una relación de facturas y quisiera que al momento de introducir un dato definido por mi (pagado, pendiente, a revisión, rechazada)me pinte o me ponga color en la linea en un rango establecido por mi.
Probé con formato condicional pero solo acepta 3 condiciones y solo se aplica a la columna en que se introducen los datos y no a toda la fila.
Tengo el ejemplo de un macro pero me pinta toda la fila desde la A hasta la ultima IV y solo quiero un rango por ejemplo de A hasta DE Les pongo el código que utilizo y me ha funcionado a excepecion que ilumina toda la fila y no el rango que yo quiero.
Saludos.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A,A"), Target) Is Nothing Then
Exit Sub
Else
If Target.Value = "PAGADA" Then
Target.EntireRow.Interior.ColorIndex = 3
ElseIf Target.Value = "RECHAZADA" Then
Target.EntireRow.Interior.ColorIndex = 4
ElseIf Target.Value = "PENDIENTE" Then
Target.EntireRow.Interior.ColorIndex = 6
ElseIf Target.Value = "A REVISION" Then
Target.EntireRow.Interior.ColorIndex = 10
End If
End If
End Sub
              A B C D
1 Proveedor Descripción Importe Status
2 Alencastre Transporte $ 1,200.00 PAGADA
3 Reforma Comida $ 800.00 A REVISIÓN
Y Así varias filas donde ocupo las 4 diferentes condiciones por ejemplo donde dice pagada que me coloree de Rojo de la A2 hasta la D2
donde dice a revisión que me ilumine de verde de la A3 hasta la D3 y así sucesivamente con la macro me ilumina toda la fila desde la A hasta la IV y no en el rango que yo quiero ójala me puedan ayudar, mi version de Office es 2003.

1 respuesta

Respuesta
1
tu codigo no esta mal solo debes hacer un pequeño cambio
reemplaza la linea Target.EntireRow.Interior.ColorIndex = 3
por esto:
Target.Range(Target.Address, "D" & Target.Row).Interior.ColorIndex = 3
bye
Ups!. Se me paso reemplaza por esto
Target.Range(Target.Address, "D" & Target.Row).Interior.ColorIndex = 3
Sin el "Target "
Así:
Range(Target.Address, "D" & Target.Row).Interior.ColorIndex = 3
Hola.-
Gracias por el tiempo que te tomas en resolver mi duda, pero tengo un problemita ahora me marca error en la primera instrucción.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Range("A,A"), Target) Is Nothing Then
Exit Sub
En la segunda linea. Y otra pregunta aprovechando :P
para que este código me funcione en las 12 hojas que componen el libro es decir el año (ene, feb,) ¿Tengo qué poner el código en cada hoja o la puedo poner en ThisWorkbook para que fusione en todo el libro o en un modulo?
Gracias de antemano por tu ayuda
En cuanto a esta linea If Intersect(Range("A, A"), Target) Is Nothing Then
no veo por que te daría problemas
respecto a tu "otra" pregunta, por lo general no contesto dos en uno, pero me caen bien los Mexicanos, así que para que puedas utilizar el código en cualquier hoja, debes utilizar el macro en un modulo pero ya no con la misma estructura ahora seria así:
Sub color(T As Variant, F As Long)
If Intersect(Range("A:A"), Range(T)) Is Nothing Then
Exit Sub
Else
On Error GoTo 1
If Range(T).Value = "PAGADA" Then
Range(Range(T), "D" & F).Interior.ColorIndex = 3
ElseIf Range(T).Value = "RECHAZADA" Then
Range(Range(T), "D" & F).Interior.ColorIndex = 4
ElseIf Range(T).Value = "PENDIENTE" Then
Range(Range(T), "D" & F).Interior.ColorIndex = 6
ElseIf Range(T).Value = "A REVISION" Then
Range(Range(T), "D" & F).Interior.ColorIndex = 10
End If
End If
1:
End Sub
En el evento Worksheet_Change de la hoja en donde deseas que aplique debes hacer la siguiente llamada:
Call color(Target.Address, Target.Row)
Lo probé y no da problemas ( si todavía no obtienes resultados, inidcame un mail a donde enviarte la planilla de prueba. Yo trabajo con versión 2007), a poco no
Eres un genio, funciona perfecto pero me vas a matar :( no sé si se me ovido comentarte que la columna que edito para que se ilumine el rango es la "D" (pagada, a revisión, etc) por que lo que sucede con el código que si funciona a la perfección es que solo me ilumina el rango siempre y cuando la modificación (pagada, a revisión, etc) la haga en la columna "A" y no en la "D"
Espero me puedas ayudar o a lo mejor estoy haciendo algo mal...
mi correo es funchp(a)hotmail.com
Por si el ejemplo que me mencionaste si esta bien.
Gracias y disculpa.
Saludos.
Ja!, bueno, bueno, para ello solo has una pequeña modificación
la linea If Intersect(Range("A:A"), Range(T)) Is Nothing Then
debe quedar así: If Intersect(Range("D:D"), Range(T)) Is Nothing Then
y en las sgtes Range(Range(T), "D" & F). Interior. ColorIndex = 3
reemplaza la D por A  y listo
Si eso había echo, y solo me marcaba la columna "D"
Pero pequeño gran detalle me faltaba sustituir DE por A
Range(Range(T), "A por D" & F).Interior.ColorIndex = 3
Mil gracias por tu valiosa ayuda, es excepcional aprender de expertos como tu.
Te envío un cordial saludo desde Mexico.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas