Insertar Filas

Respuesta de
jbf99
a
Usuario
Antes de nada muchas gracias por tu ayuda... si saco esto me ponen de director general!...
A ver:
Tengo un archivo excel con distintas hojas de calculo.
En la hoja 1 tengo una tabla con columnas de datos. En la hoja 2 tengo otra tabla que toma algunas de las columnas de datos de la Hoja 1. El Problema es que cuando inserto una Fila en la Hoja 1 para añadir algún valor, la hoja 2 no muestra este cambio. Es decir, quiero que cunado el la Hoja 1 inserto una fila, en la hoja 2 también se inserte. Además, en la Hoja 2 hay columnas, no linkadas con la Hoja 1, que contienen fórmulas. Al insertar una Fila en la H.1, y en consecuencia también en la H.2, la fila insertada en la H2 tendría que tener también las fórmulas de las celdas que tiene encima y debajo.

Gracias por vuestra ayuda.

Joan.
Experto
Utiliza referencias relativas con INDIRECTO para referirte a las celdas de otras hojas, así cuando insertas filas en cualquiera de ellas solo deberás arrastrar la ultima linea de fórmulas hacia abajo tantas lineas como filas insertadas.
Ejemplo
Si te refieres a la celda A4 de la hoja1
=INDIRECTO("Hoja1!A4")
Así consigues que cuando se inserten filas la celda siga haciendo relación a A4 y tomara el nuevo valor que tome.
Lo único sera que al haber insertado una fila, tendrás que crear una fila más en la hoja resumen.

Enhorabuena por el ascenso

Un saludo
Usuario
Bueno... de momento no me van a ascender... la solución ha sido buena pero no óptima.
En la Hoja "Resumen", (la llamaremos así a pesar de no ser ningún resumen) también entro datos a mano. Al utilizar la función Indirecto, se me inserta una celda en la celda que tiene la función indirect, hasta aquí bien, el problema es que el resto de la fila no se desplaza, y por lo tanto, aquellas celdas que tienen valores entrados manualmente, quedan atrasados.

Gracias otra vez.

Joan
Experto
Eso no puedes hacerlo por fórmulas, hay que hacerlo por código.
Como ejemplo
Sub macro1()
ActiveCell.EntireRow.Select
Selection.Insert
fila = Selection.Row
Sheets("Hoja2").Select
Rows(fila).Select
Selection.Insert
Range("A" & fila + 1 & ":B" & fila + 1).Copy
Range("A" & fila).Select
ActiveSheet.Paste
Sheets("Hoja1").Select
End Sub

Posicionándose en la celda donde se quiere insertar una fila, ejecutar la macro.
Lo que hace es insertar una fila encima de la celda seleccionada, va a la hoja 2, inserta una fila en el mismo sitio que se inserto en la hoja 1, después copia las celdas de las columnas A y B de la fila inferior y las copia en la fila recién insertada y vuelve a la hoja 1.
Tendrás que adecuarla a tus necesidades que serán :
Si en la hoja 2 no empiezan las filas en el mismo numero, sumarle a la variable fila la diferencia, y cambiar el rango de las celdas de donde debe cambiar las fórmulas según tu necesidad.

Un saludo
Usuario
Perfecto... funciona.
Ahora necesito otra macro que cuando borre una fila en la hoja 1 también me la borre de la dos. De lo contrario las celdas de la tabla 2 que tienen la función Indirect, se actualizan, pero las que tienen valores entrados manualmente quedas desfasadas.

Gracias.

Joan
Experto
Sub macro2()
ActiveCell.EntireRow.Select
fila = Selection.Row
Selection.Delete Shift:=xlUp
Sheets("Hoja2").Select
Rows(fila).Select
Selection.Delete Shift:=xlUp
Sheets("Hoja1").Select
End Sub

Posiciónate en una celda de la fila a eliminar y te eliminara esa fila y la misma de la Hoja2

Un saludo
Experto
No tienes que poner celda por celda, los rangos se definen como:
Range(celda inicial:celda final)
SI tienes que copiar un rango continuo desde A1 a FJ1 es
Range("A" & fila + 1 & ":FJ" & fila + 1).Copy
Usuario
La solución ha sido muy buena. He hecho una prueba con un archivo creado por mi, y ha funcionado perfectamente. Ahora tengo que pasarlo al archivo definitivo. El único problema que veo es que en la hoja 2 tengo una fila muy larga.. hasta la celda FJ. Si tengo que decirle en la macro que me copie el contenido de todas estas celdas, me va a salir una macro muy larga:...

Range("A" & fila + 1 & ":B" & fila + 1 ....... hasta la FJ..) podría decirle que me lo haga en todas las celdas de la fila)...

Si no es posible no hay problema, lo escribo manualmente y ya está. Te agradezco de verdad tu ayuda!... estoy en periodo de prueba y aportar este tipo de soluciones me ayuda muchísimo.

Saludos.

Joan.
Usuario
Muchas gracias por tu ayuda. Mi jefe está la mar de contento, y yo.. todavía más.

Saludos.

Joan