¿Como insertar una línea en un albarán sin modificar la estructura del mismo?

He creado en excel un albarán manual. Como principales pestañas tiene "ALBARÁN" "EDITAR" "MODIFICAR" "HISTÓRICOALBARANES" "FILTRO", además de otras que no son relevantes para el caso.

En ALBARÁN puedo crear el albarán con numeración automática. En EDITAR puedo editarlo para imprimirlo. En MODIFICAR puedo modificarlo usando mediante macros la pestaña FILTRO. En HISTÓRICOALBARANES me archiva todos los albaranes creados.

Cuando edito un albarán me lo edita en el mismo orden que creé el albarán

Por como he creado el programa, una vez que creo los albaranes, me los archiva en HISTÓRICOALBARANES de forma descendente (M4, M3, M2, M1 con varias líneas de cada albarán). Cuando pensé en poder modificar algún albarán para incluir, modificar o quitar algún dato, pensé en crear una macro que borrase el albarán que ya tenía creado y grabar este nuevo con las modificaciones correspondientes (siempre con el mismo nº de albarán). El problema viene porque cuando yo guardo las modificaciones se elimina el albarán (por ejemplo) M2, y después me lo vuelve a crear con el M2, pero al hacerlo me lo lleva al inicio de HISTÓRICOALBARANES, por lo que me desestructura toda la base de datos de HISTÓRICOALBARANES.

Me he dado cuenta del error y para lo que os pido ayuda es para lo siguiente. Si la estructura de HISTORICOALBARANES es (en orden descendente) M4 tiene 4 líneas, M3 tiene 3 líneas, M2 tiene 2 líneas, M1 tiene una línea. Necesito una macro para que cuando yo lo edite en MODIFICAR (se edita todo como datos) y modifique algún campo, me cree o inserte una línea en HISTÓRICOALBARANES y en la posición que le corresponda, para que cuando guarde el albarán y lo vuelva a editar, esté todo tal y como lo creé, inclusive con la modificación que he hecho.

Actualmente, cuando modifico, me desestructura todas las líneas del albarán.

Por favor, si no entendéis algo, si necesitáis pantallas o el fichero en cuestión, lo que haga falta, pedidlo.

1 Respuesta

Respuesta
3

Tendrías 2 opciones dependiendo de cómo es la numeración o en todo caso la fecha

- Tal como lo tienes ahora, eliminando el anterior y guardando el nuevo al inicio. Aquí necesitas una macro para ordenar por nro o por fecha para que se coloque en su lugar original.

- Una macro que inserte/quite filas en la posición en que está actualmente el registro.

Si necesitas ayuda para alguna de las 2 opciones, envíame el libro para tomar todas las referencias necesarias. Los correos aparecen en mi sitio que dejo al pie.

Hola Elsa, lo primero gracias por contestar y por lo que me has aportado.. 

He optado por utilizar la primera opción que me dices y me ha salido genial, salvo por un detalle. Lo que me falta en esta opción, para mostrarme las lineas del albarán en la plantilla tal cual las creé. Necesito una macro que ordene un rango de celdas, (ej que necesito), de la AA13 a la AF36, pero que tenga en cuenta los espacios en blanco, ya que actualmente me muestra las lineas ordenadas pero al final del albarán, es decir, cuando ordena el rango, tiene en cuenta las lineas  en blanco y me baja las líneas con datos al final de la página. Te añado una imagen para que veas el resultado. Por favor, si tienes alguna duda dímelo. Además te copio la macro que creado para ordenar el rango. Si ves algo extraño no te asustes jjjjj, soy neófito en esto del excel, pero me apasiona y lo que hago es copiar macros y adaptarlas a mis necesidades.

Te adjunto la macro que tengo para ordenar el rango y la imagen que te puede ayudar a comprender mejor lo que necesito.

Sub ordenar()

    ActiveWorkbook.Worksheets("MODIFICAR").Sort.SortFields.Clear

    ActiveWorkbook.Worksheets("MODIFICAR").Sort.SortFields.Add Key:=Range("AF13:AF36"), _

        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("MODIFICAR").Sort

        .SetRange Range("AA13:AF36")

        .Header = xlGuess

        .MatchCase = False

        .Orientation = xlTopToBottom

        .SortMethod = xlPinYin

        .Apply

    End With

End Sub

Y mil gracias por tu tiempo y las molestias.

No se comprende tu imagen. Tenés un rango de datos desde M:Q que supuestamente debieras volcarlo al formato de impresión.

¿No comprendo porqué solo ordenas la col AF..?

De todos modos, si quisieras ordenar el rango M:Q sin tener en cuenta las filas vacías que quedan al final, podrías utilizar alguna de estas 2 instrucciones para encontrar la última con datos y luego ordenar solo el rango de celdas allí:

finx = Range("M13").End(xlDown). Row 'busca el final hacia abajo
finx = Range("M37").End(xlUp). Row 'busca el final hacia arriba a partir de 37

Por supuesto que para esto se necesita que haya una fila vacía entre el último dato y la celda que tiene el texto 'Observaciones'.

Suponiendo que sea la col AF, las instrucciones serían:

    ActiveWorkbook.Worksheets("MODIFICAR").Sort.SortFields.Add Key:=Range("AF13:AF" & finx), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("MODIFICAR").Sort
        .SetRange Range("AA13:AF" & finx)
'siguen las otras instrucciones

Si algo no queda resuelto enviame copia de la hoja Modificar para que pueda trabajar allí, la imagen es muy borrosa.

Hola Elsa. Éste problema lo conseguí resolver ordenando automáticamente en la página "FILTRO", justo antes de pasar los datos a la página "MODIFICAR". Ahora me surge otro problema y es que cuando modifico un albarán, en la pestaña "HISTÓRICOALBARANES" me elimina todos los registros del albarán y me crea los nuevos, pero necesito que justos cuando termine de incluir todos los registros nuevos, me ordene la página "HISTÓRICOALBARANES" con una macro que ordene por dos campos distintos, primero por la columna 1 y luego por la columna 11, de tal forma que los registros en "HISTÓRICOALBARANES" queden de la siguiente forma, primero ordenados por la columna albarán y segundo ordenados por la columna orden. No sé crear ésta macro: Adjunto pantalla. Gracias de nuevo por tu tiempo. Eres muy amable

: (adjunto pantalla)

Yo tengo la siguiente macro, que ordena por un solo campo, pero además me da error y no sé por qué...

Disculpa pero estoy sin tiempo para el foro.

Además como ya se trata de otra macro tendrás que iniciar una nueva consulta en el tablón.

Sdos!

Gracias de todas formas. No obstante, ¿te puedo enviar el fichero y le echas un vistazo cuando puedas?. Si puede ser, dímelo y te lo envío y a ver si así te puedo comentar dos problemáticas que tengo con él. Si no puedes no pasa nada, te agradezco tu tiempo de todas formas.

Mis correos aparecen en mi sitio que dejo al pie... allí encontrarás modelos para descargar, instrucciones de macro, ejemplos de nuevas funciones, etc.

Si aún así no encuentras solución puedes enviarme tu libro pero no me comprometo a revisarlo en esta semana.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas