Inserimento righe in tabelle consecutive



  • Inserimento righe in tabelle consecutive
    di Massi data: 20/01/2016 08:50:37

    Buon giorno,
    ho un problema con l'inserimento di più righe aggiuntive al fondo di una tabella tramite macro.
    premendo un pulsante vorrei aggiungere una riga a fondo tabella, copiando l'ultima riga precedente.
    vorrei che premendo ogni volta lo stesso pulsante la macro si ripetesse.

    esempio
    -Ultima riga della tabella è la 10
    -premo il pulsante e aggiungo nella riga 11 la copia della riga 10
    -(L'ultima riga della tabella ora è la 11)
    -premendo nuovamente il pulsante deve aggiungere nella riga 12 la copia della riga 11
    - ecc...
    in oltre vorrei che tutto il resto del foglio dopo l'ultima riga della tabella slittasse una riga più in basso e non venisse sovrascritto dall'esecuzione della macro.

    (Vi allego il file)

    Nel file nel foglio 1 c'è la tabella1 con il pulsante1 e la tabella2 con il pulsante2.
    indipendentemente dalla sequenza con cui premo il pulsante1 o il pulsante 2, vorrei che il risultato fosse quello presente nel foglio 2.
    nel foglio 3 invece si vede il risultato delle macro così come funzionano in questo momento, ipotizzando di aver premuto 3 volte il pulsante1 e poi 3 volte il pulsante2.
    (foglio2 e foglio3 sono puramente descrittivi e non interagiscono con nessun codice)

    Allego anche il codice scritto fino ad ora.

    Grazie
    Massi 
     
    Sub Pulsante1_Click()
    
        Rows("10:10").Select
        Selection.Copy
        Rows("11:11").Select
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
        Range("D11:F11").Select
        
    End Sub
    
    Sub Pulsante2_Click()
    
        Rows("20:20").Select
        Selection.Copy
        Rows("21:21").Select
        Selection.Insert Shift:=xlDown
        Application.CutCopyMode = False
        Range("D21:F21").Select
        
    End Sub
    



  • di Luca73 data: 20/01/2016 09:35:27

    Ciao il tuo codice è scritto in maniera rigida ovvero punta sempre alla stesse righe (per esempio riga 10)
    Devi renderlo "dinamico"
    Una soluzione dovrebbe essere quella sotto riportata.
    Il comando End(xlDown) parte dalla cella in esame e va all'ultima occupata o alla prima libera (vedi help)
    Il comando Offset(3, 0) sposta la cella/range in esame di un certo numero di righe e colonne

    Nel mio programmino cerca l'ultima cella scritta e la copia di uno sotto...

    Ciao
    Luca
     
    Sub Pulsante1_Click()
    
        Range("A2").End(xlDown).EntireRow.Copy
        Range("A2").End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
        Application.CutCopyMode = False
        Range("A2").End(xlDown).Formula = Range("A2").End(xlDown) + 1
        Range("A2").End(xlDown).Select
        
    End Sub
    
    Sub Pulsante2_Click()
    
        Range("A2").End(xlDown).Offset(3, 0).End(xlDown).EntireRow.Copy
        Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Offset(1, 0).EntireRow.Insert Shift:=xlDown
        Application.CutCopyMode = False
        Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Formula = Range("A2").End(xlDown).Offset(3, 0).End(xlDown) + 1
        Range("A2").End(xlDown).Offset(3, 0).End(xlDown).Select
        
    End Sub






  • di Mister_x (utente non iscritto) data: 20/01/2016 10:11:49

    ciao

    modifica alle tue sub()

    riallego il tuo file

    ciao
     
    Option Explicit
    Sub Pulsante1_Click()
     Dim i As Long
     For i = 3 To Cells(Rows.Count, 1).End(xlUp).Row
        If Cells(i, 1) = "" Then
        Range("A" & i & ":I" & i).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("A" & i - 1 & ":I" & i - 1).Select
        Selection.Copy
        Range("A" & i).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        Exit For
        End If
     Next i
    End Sub
    
    Sub Pulsante2_Click()
    Dim i As Long
    i = Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A" & i & ":I" & i).Select
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Range("A" & i - 1 & ":I" & i - 1).Select
        Selection.Copy
        Range("A" & i).Select
        ActiveSheet.Paste
        Application.CutCopyMode = False
        
    End Sub
    






  • di Massi data: 21/01/2016 08:36:24

    Grazie Mister_X, fa esattamente quello di cui avevo bisogno.

    Potresti spiegarmi le stringhe per favore?