Realizar un procedimiennto de submit

Hola fer Omar te hizo la siguiente pregunta:
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?
Y al parecer le enviste por correo la respuesta de la misma yo quiero hacer algo similar poner un botón de submit y que los datos cargados me los envíe a otra hoja y me los coloque consecutivamente por filas.
De antemano Gracias
Gabriel Hernández

1 Respuesta

Respuesta
1
Efectivamente un tal Oscar me hizo una pregunta como la que mencionas.
Sin embargo, en ningún momento le envié archivo alguno, primero porque no tengo tal archivo (muchas veces contesto y luego borro el archivo de prueba) y segundo porque no tenía su dirección de e-mail (del mismo modo que no tengo la tuya).
Sin embargo, aquí te transcribo la macro final que le proporcioné.
Bastará que la pegues en un módulo en el Editor de VBA y acomodes las variables a tu planilla real.
Esta, precisamente, es la gran ventaja de la macro que le sugerí.
Tal rutina es:
Public CeldaIni
Sub FormCarga()
'================== Modificar de acuerdo a tus datos reales
HojaDest = "Hoja2"
Firstcell = "B2"
'==================
Valida = MsgBox("Confirma paso a Base de Datos?" & Chr(10) & "Luego serán borrados los datos de las celdas de carga", vbQuestion + vbOKCancel, "Macro de transferencia")
If Valida = vbOK Then
Application.ScreenUpdating = False
Set CeldaIni = Sheets(HojaDest).Range(Firstcell)
'Determina próxima celda disponible
If IsEmpty(CeldaIni) Then
drow = CeldaIni.Row
ElseIf CeldaIni.End(xlDown).Row > 50000 Then
drow = CeldaIni.Offset(1).Row
Else
drow = CeldaIni.End(xlDown).Offset(1).Row
End If
'Copiado 1ra celda
FilaOrigen = 2 'fila donde se ingresan los datos en hoja de carga
ColOrigen = 2 '<- columna (de la Hoja de carga ) donde está la celda con datos.
ColDestin = 1 '<- columna (dentro de la base de datos) donde debe dejar los datos (en hoja de Base)
Call Pasadat(FilaOrigen, ColOrigen, drow, ColDestin)
'Copiado 2da celda
FilaOrigen = 2 'fila donde se ingresan los datos en hoja de carga
ColOrigen = 4 '<- columna (de la Hoja de carga ) donde está la celda con datos.
ColDestin = 2 '<- columna (dentro de la base de datos) donde debe dejar los datos (en hoja de Base)
Call Pasadat(FilaOrigen, ColOrigen, drow, ColDestin)
'Copiado 3ra celda
FilaOrigen = 2 'fila donde se ingresan los datos en hoja de carga
ColOrigen = 6 '<- columna (de la Hoja de carga ) donde está la celda con datos.
ColDestin = 3 '<- columna (dentro de la base de datos) donde debe dejar los datos (en hoja de Base)
Call Pasadat(FilaOrigen, ColOrigen, drow, ColDestin)
'Copiado Nº celda
'... Repetir tantos bloques como celdas hay por copiar
'y cambiar los numeros de columnas respectivos
Set CeldaIni = Nothing
End If
End Sub
Private Sub Pasadat(FilaOrigenX, ColOrigenX, drowX, ColDestinX)
Cells(FilaOrigenX, ColOrigenX).Copy
CeldaIni.Cells(drowX - 1, ColDestinX).PasteSpecial xlPasteValues
CeldaIni.Cells(drowX - 1, ColDestinX).PasteSpecial xlPasteFormats
Application.CutCopyMode = False
Cells(FilaOrigenX, ColOrigenX).ClearContents
End Sub
---
Como verás esta macro prescinde de desplazamientos.
Desde cualquier celda de la hoja de carga puedes disparar el procedimiento.
Le agregué una instancia de control para que cofirmes si realmente quieres pasar los datos o lanzaste la macro por accidente.
Al igual que en la anterior deberás indicarle -dentro del código- cual es la hoja donde está la base y la celda donde se inicia la misma (esquina superior izquierda)
La macro se encarga de determinar cuál es la fila en la base donde debe dejar los datos, mientras que la columna y fila de origen y la columna de destino son datos que podrás indicar para cada caso. Esto te da absoluta libertad para decidir de dónde toma el dato y donde lo debe dejar.
Importante: Al ingresar el número de columna de origen, debes tomar la posiciónque tiene tal columna *en la hoja de carga*. Por ejemplo, si una celda con datos está en la columna "C" el valor de esa variable será 3.
PERO, en la hoja de destino el numero de columna se refiere a la posición *dentro de la base de datos*. Así si la base empieza en B2 y quieres dejar un dato en la columna "C", el valor de la variable de esta columna es 2.
En la macro adjunta, la rutina de copiado se repite para tres celdas. Si tuvieses más celdas que pasar copia uno de esos bloques y pégalo tantas veces como celdas necesites agregar. Luego cambia las referencias de columnas y fila de acuerdo a las posiciones correspondientes.
Notarás que hay una sub rutina al pie que es la encargada del copiado-pegado-borrado de acuerdo a las filas/columnas de origen/destino pasadas desde la macro principal.
---
Bueno, Gabriel, creo que estás en condiciones de incorporarla a tu archivo.
Si eventualemente quisieras leer todo el desarrollo de aquella respuesta puedes acceder a ella a través de esta dirección:
http://www.todoexpertos.com/herramientas/leermsgpublico.aspx?idproceso=638299
Pero supongo que ya la leíste, por los comentarios que me haces.
Espero que también sea de utilidad para ti.
Un abrazo!
Fernando
Excelente aplicación ya la aplique e hice algunas pruebas y esta buenísima ahora la voy a adapatr a una base que tengo saludos desde México

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas