Copia incolla intervallo celle



  • Copia incolla intervallo celle
    di pao361 (utente non iscritto) data: 13/03/2015 12:53:10

    buongiorno
    non essendo molto ferrato sull'argomento, sopratutto perchè da molti anni non mi cimentavo più in queste cose, cercando su web e su quanto fatto anni fa, ho buttato giù quanto allego

    ho la necessità di creare una macro che mi permetta, dato un database, di estrarre un'intervallo di celle continue se in una determinata cella vi sia una X.
    quanto scritto funziona bene, solo che mi estrae tutta la riga e non solo la sezione di celle dalla colonna "O" alla colonna "S" che mi occorrono

    inoltre, se potete, nel caso in cui avessi la necessità di estrarre altra cella (o altre celle) non continue a quelle indicate sopra potete consigliarmi come comportarmi?

     
    Sub Estrai_attività()
    
    Dim FOGLIO1, FOGLIO2, COLONNA, VALCELLA As String
    Dim a, b, c, d, e As String
    Dim RIGA, RIGHE, NRRIGHE, RIGHEd, NRRIGHEd As Integer
    
    FOGLIO1 = "Modifiche" 'nome del foglio con i dati da copiare
    FOGLIO2 = "Riepilogo" 'nome del foglio dove copio i dati
    COLONNA = "V" 'colonna contenente le x
    NRRIGHE = 1000 'numero righe totali del foglio con i dati da copiare
    NRRIGHEd = 1000 'numero righe totali del foglio con i dati da copiare
    Sheets(FOGLIO1).Select
    On Error GoTo fine
    For RIGHE = 1 To NRRIGHE
    Cells.Find(What:="x", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
    Selection.ClearContents
    RIGA = Selection.Row
    Rows(RIGA).Select
    Selection.Copy
    Range(COLONNA & "1").Select
    Sheets(FOGLIO2).Select
    Range("A2").Select 
    For RIGHEd = 2 To NRRIGHEd
    VALCELLA = Range("O" & CStr(RIGHEd)).Value
    If VALCELLA = "" Then
    Rows(RIGHEd).Select
    ActiveSheet.Paste
    Range("A1").Select
    Exit For
    End If
    Next RIGHEd
    Sheets(FOGLIO1).Select
    Range(COLONNA & "1").Select
    Next RIGHE
    Sheets(FOGLIO1).Select
    Range("a1").Select
    fine:
    Range("o3").Select
    End Sub
    
    



  • di Vecchio Frac data: 13/03/2015 15:23:10

    Un primo appunto: occhio a dimensionare correttamente!
    Dim FOGLIO1, FOGLIO2, COLONNA, VALCELLA As String
    Solo VALCELLA è di tipo String, le altre sono Variant perchè ogni variabile deve essere espressamente tipizzata.





  • di Vecchio Frac data: 13/03/2015 15:26:53

    - Cells.Find è un mostro, cerca in TUTTE le celle del foglio di lavoro (in Excel 2003 sono 65535 righe per 256 colonne in Excel >= 2007 sono 1048576 righe x 16384 colonne... fai due conti :)

    - preselezionare spesso non serve

    - on error per terminare di brutto senza segnalare che qualcosa è andato storto è un po' inutile






  • di Vecchio Frac data: 13/03/2015 15:28:58

    cit. "dato un database, di estrarre un'intervallo di celle continue"
    ---> se circoscrivi il problema e dici il range esatto del database, il codice ne risulterà più efficiente e snello (es. O3:V1000)





  • di Vecchio Frac data: 13/03/2015 15:39:01

    Non hai detto dove deve andare a finire il subrange di celle da O a S.
    Presumo nel foglio Riepilogo ma in che posizione?
    Non hai allegato neanche un esempio di file e non è che posso inventarmi uno scenario completo.





  • di pao361 (utente non iscritto) data: 13/03/2015 16:28:47

    file allegato
    grazie dell'aiuto.
    ricapitolando, quello che vorrei ottenere sarebbe riepilogare quanto segnato nel foglio 1 e 2 con X (foglio 1 > colonna j - foglio 2 > colonna v)
    le colonne da copiare al verificarsi di quanto sopra sarebbero, per il foglio 1 > colonne e,f,g,h,i
    per il foglio 2 > colonne o,p,q,r,s
    copiato questo, le X dovrebbero sparire dal foglio 1 e 2
    nel foglio 4, in corrispondenza di ogni riga dovrebbe apparire un numero progressivo nella colonna a partendo dalla riga 2
    spero di aver chiarito bene :)
    bene o male quello che avevo messo giù faceva gran parte di quel che necessitavo ma selezionava l'intera riga e non solo il range che avevo bisogno.
    grazie per l'aiuto ;)



  • di pao361 (utente non iscritto) data: 16/03/2015 07:57:31

    dopo un weekend sono ancora arenato alla stessa situazione :(
    vediamo se la settimana nuova mi porta fortuna :)