Formularios en Excel

Respuesta de
a
Usuario
Buen día, tengo una duda: ¿Es posible en excel crear un formulario que al llenar celdas específicas me alimente automáticamente una base de datos que se tenga en otra hoja? Y de ser posible, ¿cómo se hace?
Avatar
Experto
Hola, Oscar

En MS Excel, cuando dices "formularios", puedes estar refiriéndote a tres cosas distintas:
- Un UserForm creado con Visual basic.
- La herramienta "Formulario" de la Opción "Datos"
- Una hoja simple donde se ingresan los datos directamente en la celda

Asumo que lo que tienes es esta última opción, es decir una especie de máscara de entrada, de forma tal que al ingresar los datos en ella se transfieran a la segunda hoja *agregando las líneas una después de la otra*.

Para que alimente automáticamente -como solicitas- usaremos el evento Change, controlando que la celda final sea D2 (pero puedes cambiarlo si esa no fuera la celda final)
Vale decir que ingresas datos en A2, B2, C2 y al llegar a D2 esos datos se transfieren a la otra hoja dejando tales celdas disponbles para continuar la carga del registro siguiente.

Para que funcione, activa el editor de Visual Basic (presiona Alt+F11) y busca la hoja donde quieres que esto ocurra (donde harás la carga de datos). Da doble click sobre ella.
Copia el código siguiente y pégalo en el panel desplegado a la derecha de su Editor de Visual Basic:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address(False, False) = "D2" Then FormCarga
End Sub

Este código controla que estuvieras en la celda D2 y, si así fuera, dispara la macro FormCarga.

Inserta un módulo nuevo y allí pegarás el código siguiente:

Sub FormCarga()
OrigSheet = ActiveSheet.Name
Range("A2:D2").Copy
'================== Modificar de acuerdo a tus datos reales
HojaDest = "Hoja2"
Firstcell = "A1"
'==================
Sheets(HojaDest).Select
Range(Firstcell).Select
LCol = Selection.Column
LCell = Selection.Row
LCell = LCell + Selection.CurrentRegion.Rows.Count
Cells(LCell, LCol).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Cells(LCell, LCol).Select
Sheets(OrigSheet).Select
Range("A2:D2").ClearContents
Range("A2").Select
End Sub

(Hay dos variables entre las líneas de ==== que deberás reemplazar por tus datos propios. Corresponden a la hoja donde se deben volcar los datos y la primer celda superior de la derecha donde comienza tu tabla)

Esta macro sirve para identificar la última celda ocupada en la hoja de carga y allí pega los datos cargados, luego, borra la hoja original para una nueva carga.

Entiendo que tu caso podría llegar a ser diferente pero con una pregunta de tres líneas sin más especificaciones, tuve que imaginarme tu escenario.

Cierra el editor de Visual Basic y graba el archivo.

Pruébalo y dime si funciona OK.

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

Un 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.
(Considera que la valoración que figura predeterminada
es 3/5. Tal vez quieras cambiarla...)
En caso contrario, puedes preguntarme nuevamente
aclarando qué entendí mal o qué faltó. Gracias...
*====================================*
Usuario
Hola Fernando, muchas gracias por la atención prestada a mi pregunta y por tu tiempo y dedicación.

A continuación te aclaro mi situación para que visualices mejor mi pregunta:

Yo trabajo en el área de auditorias a proveedores de mi compañía, y estoy tratando de crear una base de datos que se alimente, a través de lo que tu llamas una "mascara". Entiendo por eso una hoja cualquiera que simplemente "Decoro" indicándole a los usuarios cuales son las celdas que deben rellenar y con que tipo de datos.
Muy parecido a los formatos cuando uno se suscribe a un correo electrónico y le piden a uno sus datos. Para este fin muchas veces utilizo la herramienta de Validación de Datos e incluyo una lista.
Pero no tengo ni la menor idea de como hacer una especie de "Submit" de manera de que los usuarios solo ingresen los datos en las celdas predeterminadas para ello, pulsen el botón "submit" y esos datos estén vinculados de algún modo a una base de datos de categorías por columnas. Más que todo los datos que recojo son una evaluación que va del 1 al 100, el nombre del proveedor, la fecha de realización, nombre de quienes realizaron la auditoria y comentarios u observaciones.

Espero me puedas ayudar con esto, ya que sería una excelente oportunidad de mejora.

Gracias una vez más.