Buenos días
el ejercicio es el siguiente tengo una hoja de excel donde tengo el formulario de pedidos y otra hoja donde debo almacenar los pedidos con su consecutivo necesito pasar estos datos a la hoja de consolidados con una macro y a la vez que pase los datos se cambie el numero de pedido
adjunto el archivo y agradezco su colaboración
Adjunto | Tamaño |
---|---|
![]() | 27.5 KB |
mira este otro envío del foro, que se parece bastante al problema que planteas
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
El número de pedido lo puedes calcular con la función MAX calculada sobre los pedidos que ya tengas creados y añadiéndole 1.
en el ejemplo al que te remití, se copiaba una fila entera y se pegaba tal cual en la hoja conjunta.
Si tu formulario tiene otro aspecto, tendrás que tomar los datos celda a celda e irlos colocando en su sitio al final de la lista conjunta.
Graba una macro que lo haga una vez y luego mira el código grabado para ver cómo lo ha hecho. después modifica la macro para que anote en la fila correcta.
Si quieres puedes adjuntar un archivo de ejemplo.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
los archivos adjuntos aparecen al final del mensaje.
para añadir un adjunto, fíjate que aparece un conjunto de opciones bajo la zona del cuerpo del mensaje donde puedes añadir adjuntos. pulsa sobre el texto Archivos adjuntos para desplegarlo en caso de que no se muestre.
pulsa examinar para elegir el archivo de tu equipo, luego pulsa adjuntar para subirlo.
por último, envía el comentario para publicarlo.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
Sólo los usuarios registrados pueden adjuntar archivos. Se pueden adjuntar archivos también en los comentarios.
Si contestas de manera anónima, no podrás adjuntar archivos. (aparte, los comentarios anónimos no se publican de inmediato, sino que pasan a la cola de aprobación y tengo que publicarlos manualmente después de haberlos leído, esto es para prevenir ataques de spam)
Inicia sesión antes de contestar. Puedes activar la opción recordarme para así recordar el inicio de sesión en tu equipo para que la próxima vez que entres en el sitio no tengas que volver a identificarte.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
justo encima de los botones para enviar el comentario, ahí pone "Archivos adjuntos"
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
En primer lugar tienes una cabecera del pedido que debe repetirse para cada líena del consolidado
luego, en cada pedido tienes una serie de artículos identificados por la referencia
tu macro debe leer los datos comunes del encabezado, y luego debe tener un bucle que recorra todas las filas del pedido, anotando cada una de estas filas en una fila del consolidado.
Lo que tiene que hacer tu macro es ir asignando valores en las celdas del consolidado
Te sugiero que localices la celda donde empezar a escribir, y luego utilizar Offset a partir de esta celda para indicar las posiciones respecto de esa primera celda.
Luego es sólo entretenerse en ir identiificando posiciones.
Te adjunto un ejemplo con el siguiente código de ejemplo, debes completar los datos que faltan por emparejar
Sub TransferirDatos()
' paco megía 2010.
' http://www.necesitomas.com/invitar
'
Const NombreHojaPedido = "Pedido"
Const NombreHojaConsolidado = "Consolidado"
Dim CeldaLibreConsolidado As Range
Dim Item
Dim ContadorFilas ' para saber las filas que se transfieren
' localizamos la celda libre
With Worksheets(NombreHojaConsolidado)
If IsEmpty(.Range("B3")) Then
Set CeldaLibreConsolidado = .Range("B3")
Else
Set CeldaLibreConsolidado = .Range("B2").End(xlDown).Offset(1, 0)
End If
End With
With Worksheets(NombreHojaPedido)
'activamos la primera línea de artículos
.Activate
.Range("B12").Select ' el campo Ref
ContadorFilas = 0
Do Until IsEmpty(ActiveCell)
' un bucle que se repita hasta que encuentre una fila con el campo "Ref" vacío
' datos comunes
CeldaLibreConsolidado.Offset(ContadorFilas, 1).Value = .Range("J6").Value ' nº pedido
CeldaLibreConsolidado.Offset(ContadorFilas, 2).Value = .Range("B6").Value ' fecha
'.....
' y así sucesivamente con el resto de tus datos comunes
' Ahora los datos de cada fila del artículo
CeldaLibreConsolidado.Offset(ContadorFilas, 0).Value = ActiveCell.Offset(0, -1).Value ' Item
CeldaLibreConsolidado.Offset(ContadorFilas, 8).Value = ActiveCell.Offset(0, 0).Value 'referencia
CeldaLibreConsolidado.Offset(ContadorFilas, 9).Value = ActiveCell.Offset(0, 1).Value ' única XS
'.....
' y así sucesivamente con el resto de tus datos
' pasamos a la siguiente fila del pedido
ActiveCell.Offset(1, 0).Select
ContadorFilas = ContadorFilas + 1
Loop
' ahora que los datos están transferidos, puedes borrarlos de la hoja pedido,
Range("B6").ClearContents
Range("B7").ClearContents
Range("B8").ClearContents
Range("B9").ClearContents
Range("F6").ClearContents
Range("F7").ClearContents
Range("F8").ClearContents
Range("I8").ClearContents
Range("B12:G51").ClearContents
' y asignar el número sigiente de pedido
.Range("J6").Value = .Range("J6").Value + 1
' y dejarlo preparado en la celda que queramos, para el siguiente pedido
.Range("B6").Select
End With
' para terminar no viene mál poner un mensaje
MsgBox "Transferidos " & ContadorFilas & " registros.", vbOKOnly, "necesitomas.com"
End Sub
Espero que con esto tengas pistas más que suficientes para hacer tu macro.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
' datos comunes
CeldaLibreConsolidado.Offset(ContadorFilas, 1).Value = .Range("J6").Value ' nº pedido
CeldaLibreConsolidado.Offset(ContadorFilas, 2).Value = .Range("B6").Value ' fecha
CeldaLibreConsolidado.Offset(ContadorFilas, 3).Value = .Range("B7").Value 'CLIENTE'
CeldaLibreConsolidado.Offset(ContadorFilas, 4).Value = .Range("B8").Value 'ALMACEN'
CeldaLibreConsolidado.Offset(ContadorFilas, 5).Value = .Range("F6").Value 'DIRECCCION'
CeldaLibreConsolidado.Offset(ContadorFilas, 6).Value = .Range("F7").Value 'telefono'
CeldaLibreConsolidado.Offset(ContadorFilas, 7).Value = .Range("F8").Value 'ciudad'
CeldaLibreConsolidado.Offset(ContadorFilas, 8).Value = .Range("B9").Value 'vendedor'
CeldaLibreConsolidado.Offset(ContadorFilas, 9).Value = .Range("I8").Value 'solicitado'
'.. Las columnas de vendedor y solicitados no estaban en el consolidado y las inserte y no me tomas los datos al pasarlos
He probado el código que pones en tu envío y no me genera ningún error.
La única precaución al insertar las columnas es que tienes que actualizar las posiciones de destino de la macro, para escribir cada dato en su sitio y no sobreescribir los datos del pedido con los datos de los artículos.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
Se puede bloquear la hoja, En las versiones nuevas está en la pestaña Revisar, en la 2003 y anteriores está en Herramientas>proteger, si no recuerdo mal.
Pero ten en cuenta que para que la macro pueda anotar nuevos datos deberá desbloquear la hoja y volver a bloquearla cuando termine (si pones una contraseña, ésta quedará visible en el código de la macro)
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
Supongo que lo que quieres es que puedan escribir pedidos nuevos, pero que no se pueda toquetear el contenido de la hoja donde está toda la información.
En este caso lo que tiene que estar protegida es la hoja con los datos.
De todas maneras, si la hoja va a estar al alcance de mucha gente, haz copias de seguridad periódicamente.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
ArAnItA
no lo hagas en Excel. Utiliza Word y combinar correspondencia para generar tu listado.
o eso, o programas una macro que te pregunte el número de pedido y lea todos los artículos del pedido y rellene la hoja que se imprimirá.
Otra opción es una consulta de datos externos que haga que el libro se consulte a sí mismo dentro de Excel.
Es que estás al límite entre una hoja de cálculo y una base de datos relacional, y para las bases relacionales Excel no es la herramienta.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
ArAnItA
Respecto al acceso a datos externos:
Datos>Obtener datos externos>de otras fuentes>desde MS Query
por cierto ¿qué versión de Excel utilizas? en las versiones anteriores a la 2007, esto estaba dentro del menú herramientas>obtener datos externos
Puedes combinar un BuscarV para los datos comunes del pedido, y la consulta de datos externos para el listado de los artículos.
En cuanto al libro, creo que no está a la venta en librerías de Colombia, sólo se podría adquirir a través de internet, aquí mismo o en alguna de esta librerías. Supongo que los gastos de envío son importantes.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
En word no hay que hacer ninguna macro (bueno, si no quieres) Se puede conseguir con combinar correspondencia.
Correspondencia>iniciar combinación de correspondencia
hay un asistente que te guía paso a paso para realizarlo.
Puedes partir de un documento tipo de hoja de pedido, al que luego le añadirás los campos que necesites.
respecto del cambio de divisas, no sé cómo está el tema, porque es paypal es que hace el cambio en cada compra.
Mira aquí antes.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.
ArAnItA
Supongo que con BuscarV no tendrás problema para leer los datos comunes.
hay varios resultados que cumplirán el criterio, pero todos ellos tienen los datos comunes iguales, que para eso son datos comunes. encontrará el primero que cumpla.
No olvides poner falso como último argumento de BuscarV para que encuentre los valores independientemente del orden (coincidencia exacta le llaman a esto).
Respecto al acceso a datos externos:
Datos>Obtener datos externos>de otras fuentes>desde MS Query
Elige tipo Excel y localiza el archivo con los datos.
------
Ya sé Excel, pero necesito más
------
Ya sé Excel, pero necesito más.