¿Cómo alimentar una tabla a partir de otra estableciendo criterios?

En el trabajo necesito coordinar el trabajo de dos personas con un excel en línea. La primera llena los datos de la hoja 1 e indica si aplica o no cierto servicio a la segunda persona le deberían salir reflejados los datos de solo aquellas personas a las que aplica el servicio. En la hoja 1 la carga de datos es de forma continua a medida que van llegando los usuarios y copiar y pegar no funciona, pues se cometen muchos errores.

Lo había conseguido con funciones lógicas y buscarv, el asunto es que a la persona de la hoja 2 se le generan muchas celdas en blando, pues cuando no aplica el servicio este genera igual el campo vacío. El objetivo es que cuando se genere el item 9, 10.. Etc, y la persona de la hoja 1 indique "SI" estos datos de cliente (Nombre y cédula) se trasladen a la hoja de trabajo de la persona 2, sin crear espacios vacíos, los cuales son un verdadero problema, por la cantidad de registros que se realizan al día.

1 Respuesta

Respuesta

Lo puede conseguir de la siguiente manera

presiona alt + f11

En la ventana de la izquierda elige el nombre de la hoja1 dándole doble click y el cuadro de la derecho que estas en blanco pegas estos:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("c2:c1048576")) Is Nothing Then
    If Target = "si" Then
          Sheets("sheet2").Range("a1048576").End(xlUp).Offset(1, 0) = Target.Offset(0, -2)
           Sheets("sheet2").Range("b1048576").End(xlUp).Offset(1, 0) = Target.Offset(0, -1)
            Sheets("sheet2").Range("c1048576").End(xlUp).Offset(1, 0) = Target
    End If
End If

End Sub

Donde:

SHEET2 seria el nombre de tu hoja2

No olvides valorar si te silve para cerrar la pregunta 

Muchas gracias, dado que no conozco mucho código y dejo extrapolarlo a la hoja real ¿podrías explicarme un poco?

1. ¿Este número qué representa, el útlimo registro de excel=? 1048576

2. Esa instrucción Offset(1,0) ¿qué significa?

3. Idem, Target.Offset(0-2)

Una vez más, agradecido

1 - 1048576 es el ultimo registro y en la instrucción

Sheets("sheet2").Range("a1048576").End(xlUp).

Yo le digo que empiece en la ultima que 1048576 y valla subiendo hasta encontrar la ultima celda con datos

Con esta parte Offset(1, 0) le digo parate en la celda después de ultima con dato

Target es la celda donde estamos escribiendo

Como tu condición estas dada en la columna C uso el Target. Offset(0,-2) para la columna

A Target. Offset(0,-1) para la columna B

Saludos cualquier inquietud no duce en preguntar y si te Silvio no olvides valorar para cerrar la pregunta

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas