auto inserimento copia incolla



  • auto inserimento/ copia incolla
    di vm1984 (utente non iscritto) data: 22/05/2014 16:16:10

    Buongiorno,

    Ho usato qualche mese fa questo forum per un consiglio e sono rimasto stupito della gentilezza e professionalita degli user. Mi ritrovo nuovamente ad avere un problema che a me sembra irrisolvibile. Vi sarei grato poteste darmi un vostro parere. Vi spiego brevemente (facendo riferimento a file allegato).

    Ho un foglio di circa 500000 righe, il che rende impossibile fare quello che voglio fare 'a mano'. Cio che vorrei fare è copiare i valori in riga 1 (fino a colonna D compresa) nelle righe 2, 3 e 4. Lo stesso per la riga 5 la quale va copiata in riga 6 (sempre fino a colonna D) e riga 7 in riga 8,9,10,11. Va notato che purtroppo gli intervalli non sono regolari e che data la lunghezza del foglio non posso copiare a mano una formula per ogni cella . Mi rendo conto che il problema è complesso me se qualcuno avesse un idea su come procedere ve ne sarei infinitamente grato.

    Grazie



  • di nichicanta (utente non iscritto) data: 22/05/2014 17:02:15

    Ciao vm1984, io l'ho pensata in questo modo ( ti allego parta del codice che dovrai completare con i range di tuo interesse e che fa quello che vedi, il listato diventerebbe un po lungo ma penso che sia efficace.
    Ai più sperti altre possibili soluzioni.
     
    Option Explicit
    
    Public Sub copia_incolla()
     
        Dim sh As Worksheet
         
        Set sh = ThisWorkbook.Worksheets("Foglio1")
         
        With sh
             .Range("A1:D1").Copy
             .Range("A2:D4").PasteSpecial
             .Range("A5:D5").Copy
             .Range("A6:D6").PasteSpecial
         
         Application.CutCopyMode = False' questo lo devi aggiungere alal fien dei range da te inseriti e che serve a togliere il riquadro intorno alle celle da copiare
         
         End With
         
        Set sh = Nothing
    End Sub
    



  • di lepat (utente non iscritto) data: 22/05/2014 17:15:09

    io invece non ho capito, mi piacerebbe vedere un file di esempio con i dati nel primo foglio ed il risultato desiderato nel secondo foglio



  • di vm1984 (utente non iscritto) data: 22/05/2014 17:32:54

    Mi scuso per la poca chiarezza. Proverò al piu presto la soluzione di nichicanta per la quale lo ringrazio. Ciononostante da quanto ho capito la tua soluzione prevede l immissione del range manualmente, cosa che non posso fare dato la grandezza del foglio. Per quanto riguarda le colonne, il range è sempre uguale cioè fino a colonna D ma per le righe il discorso è diverso: non posso sapere il range nel quale incollare. Nella mia ignoranza pensavo ad un commando che copiasse in tutte le celle vuote il valore precedente, per cosi dire. Intanto allego file con soluzione desiderata. Grazie mille a tutti e due.



  • di lepat (utente non iscritto) data: 22/05/2014 18:34:44

    prova questa
     
    Sub FillCells()
    LR = Cells(Rows.Count, "E").End(xlUp).Row
        Set MyRange = Range("A1:E" & LR)
        
        MyRange.SpecialCells(xlCellTypeBlanks).Select
        Selection.FormulaR1C1 = "=R[-1]C"
        MyRange.Value = MyRange.Value
    
    End Sub



  • di vm1984 (utente non iscritto) data: 22/05/2014 18:44:19

    Wow, grazie mille lepat. Perdonami l ignoranza, ma come faccio ad inserire la formula? Grazie mille



  • di lepat (utente non iscritto) data: 22/05/2014 18:53:15

    non è una formula, è una macro vba
    h t t p://www.mrwebmaster.it/visual-basic/guide/guida-vba/



  • di vm1984 (utente non iscritto) data: 22/05/2014 19:00:12

    Grazie mille: la proverò appena ho il dataset sotto mano



  • di lepat (utente non iscritto) data: 22/05/2014 19:01:14

    allego il file mocklepat



  • di nichicanta (utente non iscritto) data: 22/05/2014 19:16:47

    Complimenti lepat, per favore poiché sono autodidatta ( mi aiuto molto con questo forum e ricerche varie su internet) potresti commentare rigo per rigo il codice da te postato, vorrei capire la logica da te seguita (anche se ti è stato chiesto questo).
    Grazie e buona serata.



  • di lepat (utente non iscritto) data: 22/05/2014 19:40:47

    LR = Cells(Rows.Count, "E").End(xlUp).Row ' ultima riga della colonna E
    Set MyRange = Range("A1:E" & LR) ' definisce il range su cui lavorare

    MyRange.SpecialCells(xlCellTypeBlanks).Select ' seleziona tulle le celle vuote del range
    Selection.FormulaR1C1 = "=R[-1]C" ' inserisce la formula per copiare la cella sopra su quella sotto
    MyRange.Value = MyRange.Value ' copia e incolla valori



  • di nichicanta (utente non iscritto) data: 23/05/2014 08:51:03

    Grazie lepat, sono molto affascinato dalle vostre esperienze, conoscenze e competenze nel ricercare e creare soluzioni veloci e risolutive di ogni nostro quesito.
    Vi stimo per tutto il vostro impegno e la vostra dedizione "prettamente gratuita".



  • di lepat (utente non iscritto) data: 23/05/2014 09:01:34

    Anche io sono un autodidatta come penso la maggior parte degli utenti del forum, in rete si trova di tutto, basta aver la volontà di cercare e soprattutto voler capire, come stai facendo tu.