macro di creazione nuova riga
Hai un problema con Excel? 
macro di creazione nuova riga
di gianluigicz3 (utente non iscritto) data: 12/07/2014 23:29:33
Buongiorno a tutti
sto usando questa macro che crea una nuova riga copiandola da quella subito sopra e che contiene anche celle con formule.
Funziona bene solo se prima di eseguirla ci si posiziona sull'ultimissima riga.
Diversamente non funzionano più i riferimenti sulle formule !
MA:
la prima cella di ogni riga (a partire da A1) contiene un contatore che incrementa di 1 ogni nuova riga per cui l'ultima riga ha sempre il valore MAX della colonna A.
Mi aiutate ad aggiungere nella mia macro il codice che, prima di copiare e creare la nuova riga, posizioni automaticamente il cursore sulla riga che possiede, nella cella A della stessa riga, il valore più alto ?
Spero di essermi spiegato (disse il paracadute !)
Grazie anticipatamente a tutti coloro che mi vorranno dare una mano
Gianluigi
Sub Crea_Nuova_Riga()
ActiveSheet.Unprotect Password:="0000"
rig = ActiveCell.Row
Rows(rig).Select
Selection.Copy
Rows(rig + 1).Select
Selection.Insert Shift:=xlDown
Cells(rig + 1, 1).Select
ActiveSheet.Protect Password:="0000"
End Sub |
di lepat (utente non iscritto) data: 13/07/2014 09:22:20
il modo migliore di spiegarsi è quello che hai fatto tu completato da un file di esempio
di gianluigicz3 (utente non iscritto) data: 13/07/2014 10:58:55
Come suggerito,nel primo post, ho allegato un estratto del file.
posizionandosi su B4 (perchè nella realtà la cella A4 è protetta) e facendo "ctrl i" si crea correttamente un nuova riga che incrementa di 1 il valore di A5 e copia correttamente tutte le formule.
Se invece mi posiziono per errore su B2 e faccio "ctrl i" si genera una nuova riga ma con tutti i riferimenti delle formule sbagliate.
A questo punto basterebbe che la macro , prima di creare la nuova riga, posizioni il cursore sulla cella B4(o B5 o B6 o B7,ecc) verificando che la corrispondente A4 (o A5 o A6 o A7,ecc) abbia il valore MAX della colonna A
di lepat (utente non iscritto) data: 13/07/2014 12:37:18
prova così
Sub Inserisci_Righe()
rig = ActiveCell.Row
Rows(rig).Copy
Rows(rig + 1).Insert Shift:=xlDown
LR = Cells(Rows.Count, "A").End(xlUp).Row
For r = 3 To LR
Cells(r, 1) = Cells(r - 1, 1) + 1
Next
Application.CutCopyMode = False
Cells(rig + 1, 1).Select
End Sub |
di gianluigicz3 (utente non iscritto) data: 13/07/2014 15:05:30
ti ringrazio lepat ma purtroppo non funziona.
Se mi posiziono su B2 del mio file a lancio la tua macro mi crea una riga che non è aggiunta alla fine..
Infatti mi copia i dati della riga sopra e se vai a vedere p.e. la formula contenuta in B4 è sbagliata, invece di essere
=I4+G5-H5 è
=I3+G5-H5
poi, nelle celle della colonna A non c'è più la formulina (Ax+1)ma un numero asooluto. Ma questo potrebbe andare bene lo stesso
di lepat (utente non iscritto) data: 13/07/2014 16:24:56
no ho capito cosa vuoi ottenere, mi ci vorrebbe un file con la situazione prima e dopo
di gianluigicz3 (utente non iscritto) data: 13/07/2014 16:48:25
se usi il mio file allegato basta che ti posizioni in B4 e fai "ctrl i". Vedi che si crea una nuova riga che incrementa di 1 il valore di A5 e copia correttamente tutte le formule.
E' questo che voglio ottenere e vorrei che la macro, come prima cosa, si posizionasse da sola in B4 (dove però, ovviamente, B4 è l'ultima riga, altrimenti B5, poi B6, poi B7, ecc)
Spero di essermi spiegato (disse ancora il paracadute)
di ciccius_prime data: 18/07/2014 14:41:47
NON SONO RIUSCITO A TROVARE IL FILE ALLEGATO... MAGARI HAI GIA RISOLTO...
di gianluigicz3 (utente non iscritto) data: 18/07/2014 14:55:59
ciao ciccius_prime
non ho ancora risolto.
Il file lo puoi scaricare dal bottoncino in alto a destra del primo post, quello nel quale descrivo il problema
di ciccius_prime data: 18/07/2014 15:30:56
allora... io mi sono soffermato in quella parte dove dici ..basterebbe selezionare la cella b4... e inserendo il codice per cercare la prima cella vuota della colonna "B" il gioco è risolto...
ho anche modificato il contatore della colonna "A" ...in questo modo...per A2 [=SE(B2<>"";"1";"")] per A3 in poi usi invece é [=SE(B3<>"";A2+1;"")].... cosi facendo ti viene il contatore solo se inserisci la data.
provalo e fammi sapere se ti va bene!
Sub Inserisci_Righe()
Range("B:B").Find(blank).Select
rig = ActiveCell.Row
Rows(rig).Select
Selection.Copy
Rows(rig + 1).Select
Selection.Insert Shift:=xlDown
Cells(rig + 1, 1).Select
End Sub |
di Raffaele_53 (utente non iscritto) data: 18/07/2014 15:39:28
Riferimento circolare in H6...???
Invece della Tua tabella, fai inserire una tabella da excel 2003 non ricordo (dopo il 2007 menu/inserisci tabella con intestazioni. L'esempio è nell'allegato foglio3
Dopo gli abinerai i tasti da scelta rapida al codice
di gianluigicz3 (utente non iscritto) data: 18/07/2014 16:15:39
Caro ciccius_prime
complimenti ! hai centrato perfettamente il bersaglio !
Grazie100000 ! Sei un grande
di ciccius_prime data: 18/07/2014 16:21:42
...FIGURATI
l'importante è che hai risolto!!!
...la soluzione più semplice è sempre la più efficace...
Vuoi Approfondire?