Insertar una línea debajo y copiar con autocompletar

Resuelto
eltchico -  
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

4 respuestas

  1. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     
    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
    0
  2. eltchico26 Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
     
    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...
    0
  3. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    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
    0
    1. eltchico26 Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
       
      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.
      0
  4. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320
     
    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
    0
    1. eltchico26 Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
       
      Hola

      disculpa michel_m, pero cuando pruebo activecell.entirerow.insert, etc... eso me inserta una fila encima y no debajo.

      Sin embargo, si crees que es un código muy malo, entonces
      1/ me gustaría entender por qué para mejorar
      2/ estoy dispuesto a mejorarlo aún más si te parece.
      0
      1. michel_m Mensajes publicados 18903 Fecha de registro   Estado Colaborador Última intervención   3 320 > eltchico26 Mensajes publicados 3 Fecha de registro   Estado Miembro Última intervención  
         
        hola
        Escribí
        ligne = ActiveCell.Row
        Rows(ligne + 1).Insert


        y no
        activecell.entirerow.insert ....


        dicho de otro modo, ¿para qué ayudarte si?
        0