Pasar datos de una hoja a varias hojas

Respuesta de
a
Usuario
Soy Chofi, y mi pregunta es la siguiente Tengo una hoja en la cual registro movimientos de entrada y salida, en cada una de ellos esta referida a una persona, como hago para pasar de esta hoja, las hojas con el nombre de la persona que realizo el movimiento. Gracias...
Avatar
Experto

Hola, Chofi!

Realmente no sé si he entendido cabalmente tu pregunta.

Pareciera, en principio, que cada persona tiene su hoja y quieres reflejar los datos ingresados en la primer hoja a sus respectivas páginas...(?)

La solución trivial es copiar las celdas pertinentes y usar la opción "pegado especial" y presionar el botón "Pegar Vínculos" para que deje en cada hoja una referencia a la celda que se copió.
De esta manera, si el dato de aquella celda cambia, esto se verá automáticamante reflejado en la hoja de la Persona.
Esto, claro está, puede ser un procedimiento tedioso.

Por ello una alternativa sería utilizar Filtros aAutomáticos".

Antes de usar "filtros automáticos" asegúrate que tienes títulos para cada columna en la tabla

Entonces, el procedimiento es:

Selecciona todos su lista, los títulos incluidos.
Click en "Datos" encontrados en la barra del menú principal, selecciona "Filtros" y luego "Filtros Automáticos."
Verás, por cada titulo, una flecha hacia abajo en un botón.
Si pulsas cualquiera de ellos, verás las opciones que existen para esa columna.
En tu caso, puedes seleccionar una persona determinada y elegirla, de esta manera, sólo las líneas donde ella aparezca serán mostradas.

Ahora bien si quieres llevar esas filas filtradas a otra hoja, selecciona el área filtrada y aprieta F5 (Atajo para Ir a). En la ventana desplegada, clickea el botón "Especial". En la nueva ventana, marca "sólo celdas visibles". Pulse el botón Aceptar.

Así habrás seleccionado sólo las filas visibles. Ahora, cópialas y pégalas en la hoja que decidas.

Realmente no sé si esto es lo que buscas, pero con los datos proporcionados, sólo puedo intentar esto.
Pregúntame de nuevo, dando más información, si es que no hubiera acertado.

Un gran abrazo!
Fernando





*==========================================*
La presente respuesta ha demandado un tiempo de lectura,
análisis, elaboración y redacción. A cambio, simplemente,
pretendo que te tomes un minuto para FINALIZARLA, si
hubiera satisfecho -en alguna medida- tu requerimiento.
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó. Gracias...
*==========================================*
Usuario
Disculpame soy Chofi de nuevo pero no me quedo claro de repente no lo explique bien. Tengo una hoja en la cual existen movientos, esos movimientos le pertenecen a personas diferentes y quiero que los pase automáticamente a las hojas con sus nombres. La tabla es A5:D15, lo que quiero es que si aparece Chofi va a la hoja de chofi, toda la fila.
Pero cuando al otro día tenga que borrar para pasar nuevos datos las hojas individuales los datos del día anterior no se borren. Aprecio mucho el tiempo que dispones para mi. Gracias
Avatar
Experto

Hola, Chofi!

Disculpame la demora pero tuve una semana bastante agitada.
Además lo que solicitas tiene algún grado de complejidad.

Con el uso de una serie de fórmulas. Suelo preferir esta última opción dado que cualquier cambio en la base de carga es replejado instantáneamente en cada hoja. El problema es que si borras los datos originales perderías los de cada hoja también.
Me preguntaba sin no existe la posibilidad de acumular los datos en la entrada, como una gran base y así conservar los datos originales.

---

Pero también puede resolverse sobre la base de mi respuesta anterior, automatizando la función con una macro.

Activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:


Sub Mandadato()
'
Dim x As Object
Dim sname, origname As String

origname = ActiveSheet.Name
sname = ActiveCell.Value

On Error Resume Next
Set x = ActiveWorkbook.Sheets(sname)
If Err <> 0 Then
MsgBox "No existe hoja con el nombre elegido: " & sname, vbCritical, "ERROR DE NOMBRE"
Exit Sub
End If
On Error GoTo 0
Selection.CurrentRegion.Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets(sname).Select

Range("B9").Select '<- Chofi, Reemplaza esta celda con la primera ocupada que tengas en la hoja de destino.

Selection.End(xlDown).Select
ActiveCell.Offset(1).Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets(origname).Select
End Sub

'--- pega hasta la línea anterior (esta ya no)

Sólo necesito que en la línea que dice:

Range("B9").Select

Reemplaces la dirección de la celda B9, por la de la primera que tengas con datos en tu hoja "Chofi" u otras.

Esto le indicará desde dónde tiene que buscar los datos pegados anteriormente y agregar los nuevos a partir de la línea siguiente.

Cierra el editor de Visual basic y guarda el archivo.

De vuelta en tu hoja de carga, utiliza los filtros automáticos como te expliqué, eligiendo del menú descolgable una de las personas (Chofi, por ejemplo)
Luego selecciona una celda cualquiera donde esté el nombre de la persona y ejecuta la macro para enviar sus datos a la hoja correspondiente. Claro está, debe tener el mismo nombre.

De todos modos la macro controla que exista la hoja, si no, te avisará.

Esto resuelve tu pregunta. Si así fuera, agradeceré un comentario y que la finalices.
Si no, pregúntame de nuevo.

Un abrazo!
Fernando



Usuario
Muy buena tu idea, me ha solucionado el problema.
Muy agradecido
Chofi