macro di creazione nuova riga



  • 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...