Insertar una línea debajo y copiar con autocompletar
Resuelto
eltchico
-
michel_m Mensajes publicados 18903 Fecha de registro Estado Colaborador Última intervención -
michel_m Mensajes publicados 18903 Fecha de registro Estado Colaborador Última intervención -
Hola,
Consulto muy regularmente su foro y encuentro muchas respuestas, y por eso gracias, pero ahora estoy en una “bucle” si se permite.
Aquí está mi necesidad:
Quiero insertar una línea debajo de la selección, para eso ya lo consigo
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown
A partir de ahí comienza mi problema, me gustaría hacer un copiar-pegar (tipo arrastrar con autofill) únicamente de las celdas de la fila activa de las columnas C a I
Así que probé escribir
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown
ActiveCell.Range("C1:I1").Select
Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
ActiveCell.Range("C1:I2").Select
Problema
1/ ActiveCell.Range("C1:I1").Select selecciona desde la 3ª hasta la 9ª columna desde la celda activa que es mi referencia (activeCell) así que si no estoy en la columna A para ActiveCell no funciona (por ejemplo, si mi celda activa está en la columna C entonces activecell.range("C1:I1") me selecciona las columnas E a K en lugar de C a I como quisiera
2/ Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
La método autofill de la clase Range falló
¿Tendría usted por favor una pequeña ayuda para que sin importar la celda activa esto me seleccione bien las celdas de las columnas C a I de esa fila activa para hacer un copiar/pegar hacia abajo en la fila recién insertada
El objetivo es mantener la incrementación automática del tipo lunes martes... o 1.1 se convirtiera en 1.2 etc...
De antemano gracias.
Configuración: Windows 7 / Chrome 54.0.2840.99
Consulto muy regularmente su foro y encuentro muchas respuestas, y por eso gracias, pero ahora estoy en una “bucle” si se permite.
Aquí está mi necesidad:
Quiero insertar una línea debajo de la selección, para eso ya lo consigo
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown
A partir de ahí comienza mi problema, me gustaría hacer un copiar-pegar (tipo arrastrar con autofill) únicamente de las celdas de la fila activa de las columnas C a I
Así que probé escribir
ActiveCell.Range("A2").EntireRow.Insert Shift:=xlDown
ActiveCell.Range("C1:I1").Select
Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
ActiveCell.Range("C1:I2").Select
Problema
1/ ActiveCell.Range("C1:I1").Select selecciona desde la 3ª hasta la 9ª columna desde la celda activa que es mi referencia (activeCell) así que si no estoy en la columna A para ActiveCell no funciona (por ejemplo, si mi celda activa está en la columna C entonces activecell.range("C1:I1") me selecciona las columnas E a K en lugar de C a I como quisiera
2/ Selection.AutoFill Destination:=ActiveCell.Range("C1:I2"), Type:=xlFillDefault
La método autofill de la clase Range falló
¿Tendría usted por favor una pequeña ayuda para que sin importar la celda activa esto me seleccione bien las celdas de las columnas C a I de esa fila activa para hacer un copiar/pegar hacia abajo en la fila recién insertada
El objetivo es mantener la incrementación automática del tipo lunes martes... o 1.1 se convirtiera en 1.2 etc...
De antemano gracias.
Configuración: Windows 7 / Chrome 54.0.2840.99
4 respuestas
-
Hola
intenta esto
Range("A2").EntireRow.Insert Shift:=xlDown
Range("C1:I1").Select
Selection.AutoFill Destination:=Range("C1:I2"), Type:=xlFillDefault
Range("C1:I2").Select
Cdlmnt -
Hola,
No tengo el mismo usuario porque tuve que crear una cuenta de miembro para poder responder, pero soy yo.
Gracias por la respuesta, sin embargo, el hecho de escribir Range("A2") hará que se inserte sistemáticamente una fila respecto a la celda A2 de mi hoja, cuando yo quiero insertar una fila debajo de la fila activa
Si por ejemplo estoy en la fila 9, quiero insertar una fila debajo de la fila 9, por eso había escrito ActiveCell.Range("A2")
El problema es que si se selecciona una celda en la columna D, entonces VBA entiende que mi referencia ActiveCell es la primera columna.
Estoy tratando de encontrar un equivalente a ActiveCell como el tipo activar filas pero al parecer eso no existe
Gracias de todas formas por haber probado, si hay otras propuestas... -
Hola Eltchico, CCM ¿para qué sirve range("A2")? porque ActiveCell.EntireRow.Insert Shift:=xlDown insertar una línea debajo de la fila de la celda activa, independientemente de su columna también puedes escribir Rows(ActiveCell.Row + 1).Insert Para C1:I1 puedes usar la función offset
Dim ligne As Byte ligne = ActiveCell.Row Rows(ligne + 1).Insert Range(Cells(ligne, "C"), Cells(ligne, "I")).Copy ActiveCell.Offset(1, 0)
Michel-
RE, Primero gracias por vuestras respuestas rápidas Michel_m, he conseguido sortear entre lo que me propusiste y mi código base para finalmente llegar a esto: Public Sub insertionligneCCM2() Dim ligne As Byte ligne = ActiveCell.Row Rows(ligne + 1).Insert Range(Cells(ligne, "C"), Cells(ligne, "I")).Select Selection.AutoFill Destination:=Range(Cells(ligne, "C"), Cells(ligne + 1, "I")), Type:=xlFillDefault End Sub Y ahí encuentro todo lo que quiero. No importa la celda seleccionada en la fila activa, realmente me crea una inserción de fila debajo y luego me hace un copiar/pegar (Autofill) de las celdas C a I de la fila activa a la fila activa +1. Atención michel_m, activeCell.EntireRow.Insert Shift:=xlDown inserta una fila por encima de la fila activa y no debajo. Además, para responder a tu pregunta, mi Range("A2") me servía de referencia para decir justamente insertar una fila debajo de A1 (referencia de mi fila activa) pero soy bastante novato en VBA, así que hacemos como podemos al principio... Con estas ayudas aún, gracias. Para mí tema cerrado. Con la esperanza de que sea útil para otros.
-
-
Atención michel_m, activeCell.EntireRow.Insert Shift:=xlDown inserta una fila por encima de la fila activa y no por debajo.
¡Cualquier cosa!!!
Con la esperanza de que sea útil para otros
¡Sobre todo no! Muy mal código
Michel