selezione area



  • selezione area
    di Gianni1975 data: 01/10/2014 09:25:49

    Salve, sono nuovo del forum, per cui mi perdonerete se le risposta è già stata fornita in precedenza.
    ho questo problema:
    ho un file con un foglio come di seguito
    CODICE XX YY RE VA SA RAGSOC1
    3100419 ASURG 484 482 1500,00 2 PIPPO
    3100419 BIN01 526 519 350,00 7 PIPPO
    3100440 ASURG 14 12 1500,00 2 PLUTO
    3100440 BIN01 147 26 6050,00 121 PLUTO
    3100452 ASURG 498 496 1500,00 2 MINNI
    3100452 BIN01 358 339 950,00 19 MINNI
    3100452 BIN02 180 177 75,00 3 MINNI
    3100484 ASURG 22 1 15750,00 21 PAPERINO
    3100484 BIN01 117 4 5650,00 113 PAPERINO
    3100484 Z3CPR 12 516,00 12 PAPERINO
    3100485 ASURG 317 319 -1500,00 -2 PAPERINO
    ........ e così via
    considerate che le righe possono anche essere 1000, 2000 ecc..
    ad ogni cambio di codice, dovrei selezionare dalla prima alla settima colonna, per poi incollare sul foglio 2 la prima selezione, poi sul foglio 3 la seconda selezione, sul foglio 4 la 4 selezione .... e così fino alla fine del file.
    come posso fare ?? con una macro?? ma come non sono pratico assolutamente di macro di excel. vi ringrazio dell'aiuto e se non sono stato chiaro fatemi sapere.
    saluti





  • di Lucas87 data: 01/10/2014 10:00:14

    Ciao
    Prova questo codice
    In pratica elimina i fogli dal secondo in poi
    aggiunge un nuovo foglio per ogni gruppo di codici
    imposta come nome del nuovo foglio il codice in questione
    inserisce i valori

    leggi le note per modificarlo in maniera appropriata
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False   'questa parte elimina i fogli
    For i = Sheets.Count To 2 Step -1   'escluso il primo
        Sheets(i).Delete                'cioè quello con i valori iniziali
    Next                                'se non ne hai bisogno
    Application.DisplayAlerts = True    'metti l'apostrofo (') all'inizio
    c = 1
    i = 1           'se i valori non iniziano dalla prima riga devi cambiare c e i
    Do While i <= Range("a" & Rows.Count).End(xlUp).Row
        If Cells(i, 1) <> Cells(i + 1, 1) Then
            Sheets.Add after:=Sheets(Sheets.Count)
            ActiveSheet.Name = Cells(c, 1)
            'comincia a scrivere da A1 nel foglio nuovo. Per cominiciare da un'altra riga dovrai cambiare A1 e c+1
            'con la cella di partenza e il umero di riga Es. A5 e c+5
            ActiveSheet.Range("a1:g" & i - c + 1) = Range(Cells(c, 1), Cells(i, 7)).Value
            c = i + 1
        End If
        i = i + 1
    Loop
    Application.ScreenUpdating = True



  • di Gianni1975 data: 01/10/2014 11:11:07

    Ciao ... scusami ma devi esserre molto comprensivo ... non mastico affatto vba e le macro ...
    mi potresti guidare passo passo per inserire il codice che mi suggerisci per poi lanciare la macro e provarla???
    grazie per la pazienza



  • di Lucas87 data: 01/10/2014 11:37:59

    Ok...
    Questo vale per le versioni da excel 2007
    Innanzitutto devi attivare la scheda "Sviluppo" (per questo cerca con Google)
    Nella scheda "Sviluppo" trovi "Inserisci". Seleziona il pulsante (pulsante di controllo) tra i "Controlli ActiveX". Disegna il pulsante sul foglio. Clicca con il DX sul pulsante e poi su "Oggetto pulsante di comando"-->"Modifica". Cambia la dicitura sul pulsante.
    Sulla barra degli strumenti controlla che lo strumento "Modalità progettazione" sia attivo (serve per spostare o modificare l'oggetto). Fai doppio click sul pulsante creato. Si Apre l'editor di VBA con già una parte di codice pronta. Incolla il codice. Ora disattiva la "Modalità progettazione" e prova il pulsante.



  • di Gianni1975 (utente non iscritto) data: 01/10/2014 12:10:49

    ok ... grande funziona perfettamente
    ti chiedo solo una ultima cosa,
    se volessi portarmi dietro per ogni foglio che crea l'intestazione
    (nel mio file sarebbe: CODICE XX YY RE VA SA RAGSOC1 ) come dovrei modificare l'istruzione??
    grazie ancora



  • di Lucas87 data: 01/10/2014 14:15:03

    Ecco qua

     
    ActiveSheet.Rows(1) = Rows(1).Value



  • di Gianni1975 (utente non iscritto) data: 01/10/2014 14:48:15

    mitiiicooo .... ok molte grazie funziona tutto.
    grazie per la ripidità nel rispondere.....!!!!



  • di Gianni1975 (utente non iscritto) data: 06/10/2014 09:50:15

    CIAO HO CONTROLLATO MEGLIO IL RISULTATO INSERENDO L'ULTIMA ISTRUZIONE CHE MI AVEVI SUGGERITO:
    ActiveSheet.Rows(1) = Rows(1).Value
    IN PRATICA PER TUTTI I FOLGI CHE CREA TOGLIE LA PRIMA RIGA E LA SOSTITUISCE CON L'INTESTAZIONE, MENTRE INVECE DOVREBBE TENERE TUTTO E INSERIRE L'INTESTAZIONE, NON INSERISCE L'INTESATAZIONE MA CANCELLA IL CONTENUTO DEL PRIMO RIGO E METTE L'INTESTAZIONE.
    IL CODICE CON L'INSERIMENTO DELL'ULTIMA ISTRUZIONE MI VIENE IN QUESTO MODO:
    Private Sub CheckBox1_Click()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False 'questa parte elimina i fogli
    For i = Sheets.Count To 2 Step -1 'escluso il primo
    Sheets(i).Delete 'cioè quello con i valori iniziali
    Next 'se non ne hai bisogno
    Application.DisplayAlerts = True 'metti l'apostrofo (') all'inizio
    c = 1
    i = 1 'se i valori non iniziano dalla prima riga devi cambiare c e i
    Do While i <= Range("a" & Rows.Count).End(xlUp).Row

    If Cells(i, 1) <> Cells(i + 1, 1) Then
    Sheets.Add after:=Sheets(Sheets.Count)
    ActiveSheet.Name = Cells(c, 1)
    'comincia a scrivere da A1 nel foglio nuovo. Per cominiciare da un'altra riga dovrai cambiare A1 e c+1
    'con la cella di partenza e il umero di riga Es. A5 e c+5
    ActiveSheet.Range("a1:g" & i - c + 1) = Range(Cells(c, 1), Cells(i, 7)).Value
    c = i + 1
    End If
    ActiveSheet.Rows(1) = Rows(1).Value
    i = i + 1
    Loop
    Application.ScreenUpdating = True

    End Sub

    SBAGLIO QUALCOSA???
    GRAZIE PER LA RISPOSTA
    CIAO





  • di Gianni1975 (utente non iscritto) data: 06/10/2014 12:26:37

    ho una ulteriore richiesta, questo codice crea tanti fogli all'interno di un singolo file, sarebbe possibile invece creare tanti file diversi sempre con lo stesso principio??
    grazie per la risposta