Domanda Macro per spostare una riga qualsiasi da una tabella a un'altra

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Buonasera a tutti,
vorrei chiedere un vostro parere sulla fattibilità o meno di una macro che consenta di selezionare una riga qualsiasi (non necessariamente la prima o l'ultima) di una tabella e spostarla in fondo a un'altra tabella, posta in un altro foglio.

Se effettivamente possibile, mi piacerebbe anche imparare a farla, col vostro aiuto.
Vi allego un file con un paio di tabelle: mi piacerebbe spostare una riga dalla tabella "db_daAnalizzare", che si trova nel foglio "DB_ToBeAnalyzed", alla tabella "db_Analizzati", che si trova nel foglio "DB_Analyzed.

Vi ringrazio!
 

Allegati

alfrimpa

VBA Expert
Supermoderatore
18 Dicembre 2015
33.747
1.845
67
Napoli
2019 Pro Plus
980
La prima cosa da fare è trovare l'ultima riga piena di una colonna del foglio di destinazione (guarda QUI)

Poi sul foglio di origine, una volta individuata la riga ti ci posizioni e usi ActiveCell ed EntireRow per tagliare la riga ed incollarla sulla prima cella vuota del foglio di destinazione.
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Ciao L @lukereds , grazie per la tua risposta!
Nel mio piccolo ci ho già provato, ma in tal caso il registratore di macro mi dice come spostare solo la riga che ho selezionato (ad esempio la 18). Tuttavia mi potrebbe servire anche la riga 4, per dire...
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
La prima cosa da fare è trovare l'ultima riga piena di una colonna del foglio di destinazione (guarda QUI)

Poi sul foglio di origine, una volta individuata la riga ti ci posizioni e usi ActiveCell ed EntireRow per tagliare la riga ed incollarla sulla prima cella vuota del foglio di destinazione.
Grazie per la dritta, alfrimpa @alfrimpa ! Stasera provo e vi aggiorno.
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
la macro "registrata" è uno spunto, da questa modifichi righe o colonne in base alle esigenze.
Da cosa capisci se una riga debba essere spostata o no?
Avevo pensato di fare una tabella con lavori da analizzare e un'altra con lavori già analizzati.
Una volta che un lavoro è completato, lo vorrei spostare nella sua relativa tabella. Il punto è che se oggi seleziono una riga (poniamo sempre la 18), non è detto che domani domani dovrò selezionare sempre quella.
Riconosco di essermi espresso male, nel commento alla tua prima risposta.

Edit: specifico che sono meno che un novellino con il VBA e che non escludo che non sia in grado di intuire cosa fare, né capire tutto quello che leggo con il registratore di macro. ;)
 

lukereds

Excel/VBA Expert
Staff
17 Luglio 2018
3.484
115
Milano
www.formazione-milano.net
2013, 2016, Ol
282
mini macro per copiare la riga specificata tramite inputbox

NB ho tolto la definizione di tabella e trasformato in intervallo quanto presente in to be analyzed

Visual Basic:
Sub copia()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Sheets("DB_ToBeAnalyzed")
Set sh2 = Sheets("DB_Analyzed")
riga = InputBox("riga da copiare")
sh1.Select
Rows(riga & ":" & riga).Copy
Sheets("DB_Analyzed").Select
lr = Range("a1").End(xlDown).Row
Range("A" & lr + 1).Select
ActiveSheet.Paste
End Sub
 
Ultima modifica:
  • Like
Reactions: Ifrit61

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Fantastica L @lukereds , grazie !
Proverò a completarla con un paio di cose e posterò anche la mia versione!
 
  • Like
Reactions: lukereds

Rubik72

Excel/VBA Expert
Supermoderatore
12 Dicembre 2015
9.467
345
48
Cosenza
Excel 2016
655
Un saluto a tutti.
Macro con l'uso delle tabelle:
Visual Basic:
Sub AddRowsListObject()
'dichiarazione variabili
Dim aLo As ListObject
Dim bLo As ListObject
Dim aLr As ListRow
Dim bLr As ListRow
Dim rr As String

'variabili tabelle
Set aLo = Sheets("DB_Analyzed").ListObjects(1)
Set bLo = Sheets("DB_ToBeAnalyzed").ListObjects(1)

'variabbile nuova riga tabella di destinazione
Set bLr = bLo.ListRows.Add

rr = InputBox("riga da copiare")

'verifica valore in InputBox
If IsNumeric(rr) Then   
    'variabile riga di origine
    Set aLr = aLo.ListRows(rr)
   
    'copia riga
    aLr.Range.Copy bLr.Range
   
    'eleimina riga tabella origine
    aLr.Delete
End If

'distruzione variabili
Set aLo = Nothing
Set bLo = Nothing
Set bLr = Nothing
Set aLr = Nothing

End Sub
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Grazie Rubik72 @Rubik72 !

Purtroppo stasera ho avuto un imprevisto, che mi ha impedito di giocare come avrei voluto, ma ho appena provato la tua macro e funziona! L'unica pecca è che sposta la riga dalla tabella "finale" alla tabella "iniziale". Nella sezione "variabili tabelle" del tuo codice ho provato banalmente a invertire i nomi delle tabelle, ma devo aver fatto un'idiozia, perché mi dà errore. :LOL:
Pazienza, domani mi rimetto sotto.

Buona notte!
 

Rubik72

Excel/VBA Expert
Supermoderatore
12 Dicembre 2015
9.467
345
48
Cosenza
Excel 2016
655
basta invertire il nome delle variabili assegnate ai fogli:
Visual Basic:
[...]
'variabili tabelle
Set aLo = Sheets("DB_ToBeAnalyzed").ListObjects(1)
Set bLo = Sheets("DB_Analyzed").ListObjects(1)
[...]
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
basta invertire il nome delle variabili assegnate ai fogli:
Visual Basic:
[...]
'variabili tabelle
Set aLo = Sheets("DB_ToBeAnalyzed").ListObjects(1)
Set bLo = Sheets("DB_Analyzed").ListObjects(1)
[...]
Ciao, ho fatto proprio così e mi dà "Errore di run-time' 9: Indice non incluso nell'intervallo".
 

Rubik72

Excel/VBA Expert
Supermoderatore
12 Dicembre 2015
9.467
345
48
Cosenza
Excel 2016
655
Probabilmente hai inserito un numero di riga NON presente nella tabella! Quante righe contiene la tabella?!?
In questo caso bisogna prevedere una verifica con una condizione:

Visual Basic:
[...]
If IsNumeric(rr) Then
    'verifica indice richiesto
    If aLo.DataBodyRange.Rows.Count < rr Then
        MsgBox "Indice non incluso nella tabella"
        Exit Sub
    End If
[...]
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Ah ecco perché!
Il fatto è che la tabella "vera" a cui assocerei la macro contiene già una 60ina di righe, che variano di minuto in minuto.
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Ciao Rubik72 @Rubik72 , abbi pazienza, ma non riesco proprio a far lavorare la tua macro. Sicuramente faccio un errore io da qualche parte, ma onestamente non capisco dove.
Ti sarebbe possibile aggiornare il file che ho condiviso? Almeno (forse) riesco a superare questo limite che ho.

Edit: aggiungo, perché oggi ho collezionato una notevole quantità di fallimenti e mi sto un po' scoraggiando, che mi piacerebbe anche spostare i valori della colonna "K" alla "H" e sostituire la voce "To be Analyzed" con "Analyzed". Taggo anche L @lukereds , visto che avevo superbamente preannunciato una mia piccola aggiunta alla sua macro. :confusostelle:Stranito_pazzo

Scherzi a parte, non fatevi problemi a dirmi che sto chiedendo troppo.
 
Ultima modifica:

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Grazie infinite, Rubik72 @Rubik72 . Col senno di poi e con più serenità mentale, ho scoperto che la macro non conta la riga dell'intestazione della tabella. Ieri mi ero inconsciamente intestardito con l'ultima, sbagliando tutte le volte e convincendomi di aver fatto errori da qualche parte...
 

Ifrit61

Utente junior
30 Novembre 2020
25
3
365
0
Ho ancora intenzione di aggiungere un paio di chicche (semplici per voi, ma per me non troppo) al codice e di condividere il tutto qui. Poi chiuderò il thread. ;)
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!