Busco una macro, o alguna función para obtener datos de una hoja, si en determinada celda se cumple una condición.

Me encuentro con un pequeño problema y espero me puedan ayudar.

Tengo un documento en Excel, con dos Hojas (EN PROCESO y PRESENTADAS). En la hoja "EN PROCESO" tengo una tabla, con una macro para cargar datos y que automáticamente desplace una fila hacia abajo, y además, que cuando en una celda aparece la palabra "FINALIZADA" se pinte la fila en color verde.

Necesito que cuando aparece la palabra "FINALIZADA", Se agreguen en la hoja "PRESENTADAS" algunos datos de la tabla original.

2 Respuestas

Respuesta
1

[Ho la y bienvenido a TodoExpertos!

Podrías proporcionar más detalle.

- Pon aquí tu macro para actualizarla, supongo que cuando hace la carga quieres que también se agreguen datos en la hoja "PRESENTADAS".

- En cuál columna escribes o aparece la palabra "FINALIZADA".

- Qué datos (fila, columna) quieres agregar en la hoja "PRESENTADAS".

- En cuál fila, columna quieres poner los datos.

- Sería genial si acompañas tu explicación con imágenes.


Visita:

Cursos de Excel y Macros - YouTube


Para insertar una imagen:


Sal u dos

Hola! Gracias por la respuesta. Te paso la macro:

Sub AGREGAR2()
'
' AGREGAR2 Macro
'
'
    Rows("13:13").Select
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 3
    ActiveWindow.ScrollColumn = 2
    ActiveWindow.ScrollColumn = 1
    Range("A13:J13").Select
    Selection.ListObject.ListRows.Add (2)
    Range("G13").Select
    ActiveCell.FormulaR1C1 = "=VLOOKUP([@ETAPA],R4C4:R9C5,2,FALSE)"
    Range("G5:G7").Select
    Selection.Copy
    Range("B13").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Range("B13:D13").Select
    Application.CutCopyMode = False
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=$A13=""FINALIZADO"""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

Esta es la Tabla de la hoja "EN PROCESO":

En la celda A13, correspondiente a la columna "Estado", hay una lista desplegable, donde elijo las opciones que aparecen arriba en diferentes colores. 

Los datos que quiero agregar en la otra tabla son: Obra y Cliente. 

Esta es la tabla donde quiero que se agreguen los datos:

Visita:

Cursos de Excel y Macros - YouTube


Entonces ya tienes una macro para agregar una fila en la tabla de la hoja "En proceso".

---

Quieres otra macro, cuando selecciones "FINALIZADO", en automático copie los datos Obra y Cliente y los pegue en la tabla de la hoja "PRESENTADAS".

Si lo anterior es correcto, entonces pon el siguiente código en los eventos de tu hoja "EN PROCESO"

Private Sub Worksheet_Change(ByVal Target As Range)
'Por Dante Amor
  If Not Intersect(Target, Range("A13:A" & Rows.Count)) Is Nothing Then
    If Target.Count > 1 Then Exit Sub
    '
    Dim sh2 As Worksheet
    Dim lobj As ListObject
    '
    Set sh2 = Sheets("PRESENTADAS")
    Set lobj = sh2.ListObjects(1)
    '
    If Target.Value = "FINALIZADO" Then
      With lobj.ListRows.Add(AlwaysInsert:=True).Range
        .Cells(1, 1) = Target.Offset(, 2).Value   'Obra
        .Cells(1, 2) = Target.Offset(, 3).Value   'Tipo
      End With
    End If
  End If
End Sub

Sigue las Instrucciones para poner la macro en los eventos de worksheet

  1. Abre tu libro de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
  4. En el panel del lado derecho copia la macro

Para que funcione, primero debes llenar los datos de Obra y tipo, después seleccionas "FINALIZADO". En ese momento los valores se copian a la tabla de la hoja "PRESENTADAS".


Vídeo recomendado:

Consejos para desarrollar macros . curso de excel, curso de macros, excel, macros - YouTube


Sal u dos.

Muchas gracias! Me sirvió. Solo tuve que modificar una parte del código ya que se me copiaba la celda Obra Y Tipo, y yo necesitaba que se copien las celdas Obra y Cliente, pero lo pude solucionar. 

Te hago la ultima consulta. Se puede hacer que cuando en la hoja "En Proceso" seleccione "Finalizado", se elimine la fila o se oculte? 

Gracias

Hola Dante! Estoy teniendo un problema. Venía funcionando bien, solo que ahora, al intentar seleccionar la opción "finalizado", Excel se cierra automáticamente. 

Pon aquí la macro o macros que estás utilizando.

Dejame tu correo así te envío el archivo por favor.

Puedes ver mi correo en la información de mi canal:

Cursos de Excel y Macros - YouTube

Respuesta
3

Para el formato te sugiero utilizar un Formato Condicional. Porque hacerlo por macro hará que al modificar o borrar el contenido de esa celda, necesites de otra macro para borrarle el color.

Si ya se sabe que el texto estará en cierta col, digamos E, desde menú Formato Condicional, opción 'Utilizar una fórmula' y allí copiá la fórmula y el rango 'Se aplica a' según tus referencias.

Hace unos días respondí una consulta similar, solo que el texto podía estar en cualquier columna. Y la fórmula es la que se encuentra de color.

Podés leer la consulta completa aquí:

Sombrear y bordear automáticamente en Excel

Con respecto al pase a la otra hoja, si ya tenés una macro que pasa datos a cierta fila en hoja EN PROCESO, seguramente se puede identificar esa fila con una variable, digamos 'x'.

Entonces, a continuación (antes de cambiar el valor de la fila por la siguiente **) agregá estas instrucciones ajustando origen y destino según tu hoja:

Set hop = Sheets("PRESENTADAS")
y = hop.Range("A" & Rows.Count).End(xlUp).Row + 1   'ubica la primer fila libre
'pase de datos
Range("A" & x).Copy Destination:=hop.Range("A" & y)    'de col A a col A
Range("D" & x).Copy Destination:=hop. Range("B" & y) 'de col B a col D

Espero te sirvan estas sugerencias. Cualquier duda me podrás ubicar copiando alguno de los correos que dejo en mi sitio, sección CONTACTOS.

Sdos.

Elsa

Olvidé el último párrafo: '... Necesito que cuando aparece la palabra "FINALIZADA", ...'

Entonces el código que te pasé quedaría así:

If Range("E" & x) = "FINALIZADA" Then
    Set hop = Sheets("PRESENTADAS")
    y = hop.Range("A" & Rows.Count).End(xlUp).Row + 1   'ubica la primer fila libre
    'pase de datos
     Range("A" & x).Copy Destination:=hop.Range("A" & y)    'de col A a col A
     Range("D" & x).Copy Destination:=hop. Range("B" & y) 'de col B a col D
    'otros pases
End If

Por supuesto que debes ajustar a tus referencias. En lugar de letra E será la que corresponda a la col donde esté esa palabra, y así con el resto de las instrucciones.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas