problema con un codice



  • problema con un codice
    di Daniela (utente non iscritto) data: 23/08/2012 10:04:17

    Buongiorno, ho trovato ed adattato questo codice che mi permette di copiare ed incollare alcuni campi del foglio scheda nel foglio dati nelle rispettive colonne.
    questo codice copia i valori per riga. Come posso fare per copiarli in colonna?

    nel senso:

    nel fogilo dati ho nella colonna A i nomi delle variabili. a partire dalla colonna b vorrei incollare i valori inseriti nelle celle del foglio scheda.
    quindi in dati.B1 mettere scheda.b4
    in dati.B2 mettere scheda.d4
    in dati.b3 mettere scheda b5
    eccc

    grazie mille
     
    Private Sub CommandButton1_Click()
    Dim NewLig As Long
     
    With Worksheets("DATI")
        NewLig = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .Range("A" & NewLig).Value = Worksheets("SCHEDA").Range("B4").Value
        .Range("B" & NewLig).Value = Worksheets("SCHEDA").Range("D4").Value
        .Range("C" & NewLig).Value = Worksheets("SCHEDA").Range("B5").Value
        .Range("D" & NewLig).Value = Worksheets("SCHEDA").Range("D5").Value
    
    
    End With
    Worksheets("SCHEDA").Range("B4").ClearContents
    Worksheets("SCHEDA").Range("D4").ClearContents
    Worksheets("SCHEDA").Range("B5").ClearContents
    Worksheets("SCHEDA").Range("D5").ClearContents
    
    End Sub



  • di Daniela (utente non iscritto) data: 23/08/2012 10:07:23

    scusate ho sbagliato volevo dire

    il valore di scheda.b4 inserirlo in dati.b2
    il valore di scheda.d4 inserirlo in dati b3
    il valore di scheda.b6 inserirlo in dati b3
    ecc.




  • di Vecchio Frac data: 23/08/2012 10:35:20

    Scusa, ma non è lo stesso problema dell'altro tuo thread?
    Hai visto la mia ultima risposta?
    Fai gli opportuni aggiustamenti e avrai risolto.
    Inoltre mi sembra che tu abbia sbagliato ancora a indicare "quale" valore va "dove", ma una volta capito questo il resto è facile.

     
    'Una nota di stile.
    'Invece di indicare una singola cella per volta, puoi raggruppare un intervallo
    'e scrivere quindi solo una riga di codice invece di quattro:
    
    Worksheets("SCHEDA").Range("B4:B5,D4:D5").ClearContents
    
    'oppure, più sinteticamente:
    
    [scheda!b4:b5,scheda!d4:d5].ClearContents






  • di Daniela (utente non iscritto) data: 23/08/2012 10:46:35

    Il problema che questo codice copia i valori per riga, quindi nelle colonne a, b, c, ecc., inserisce i valori delle caselle nel foglio scheda in riga.
    quello che vorrei fare io è inserire i valori del foglio scheda in una singola colonna. partendo da b e continuare b+1.



  • di Vecchio Frac data: 23/08/2012 11:16:07

    Se intendi "di seguito all'ultimo valore inserito" in colonna B, devi solo recuperare il valore dell'ultima riga compilata e aggiungere un'unità a questo valore per riprendere la copia da lì.

    Ti allego uno stralcio di codice che rispetta l'esempio che hai fatto, vedi tu se è giusto (non lo sarà perché dati B3 viene scritto due volte e quindi sovrascritto dall'ultima istruzione):
    "il valore di scheda.b4 inserirlo in dati.b2 "
    "il valore di scheda.d4 inserirlo in dati b3 "
    "il valore di scheda.b6 inserirlo in dati b3 "

    Rivedi quindi *cosa* vuoi scrivere e *dove* e modifica opportunamente il codice.
     
    Dim i as Integer
    
        'si suppone che a partire da B2 *non* ci sono righe vuote in mezzo
        'conta le righe piene quindi aggiunge uno
        i = [b2].currentregion.rows.count 
        i = i + 1
    
        'la cella i, 2 è la riga i, colonna B
        sheets("dati").cells(i, 2) = [scheda!b4]
    
        'prossima riga!
        i = i + 1
        sheets("dati").cells(i, 3) = [scheda!d4]
    
        'attenzione, qui non cambio la riga e quindi dati!B3 viene sovrascritto :)
        sheets("dati").cells(i, 3) = [scheda!b6]






  • di Daniela (utente non iscritto) data: 23/08/2012 12:23:43

    no rimane sempre nella stessa colonna.

    praticamente
    nel foglio scheda ho A1:nome B1: cognome
    poi ho un bottone inserimento

    nel foglio dati ho a1: nome
    a2: cognome

    quando clicco il bottone inserimento nel foglio scheda i dati scritti nelle celle a1 e b2 devono essere incollati in b1 e b2

    poi se vado di nuovo nel foglio scheda ed inserisco altri valori e clicco sul bottone inserimento i dati devono essere inseriti in c1 e c2 e cosi via.

    il codice che ho messo all'inizio permette di incollare i valori del foglio scheda in a1 e b1
    a2 e b2
    a3 e b3 ecc




  • di Vecchio Frac data: 23/08/2012 13:42:03

    Facciamo così.
    Scaricati l'allegato che ho predisposto e vedi se fa al caso tuo.
    Poi eventualmente lo commentiamo, comunque il codice associato al command button lo riporto qui sotto.
     
    Private Sub CommandButton1_Click()
    Dim ac As Range, i As Integer
    
        For Each ac In [scheda!a1].CurrentRegion.Offset(1).Resize(, 1)
            i = i + 1
            Range(ac, ac.Offset(0, 1)).Copy
            Sheets("dati").Cells(1, i).PasteSpecial Transpose:=True
        Next
        Application.CutCopyMode = False
    
    End Sub






  • di Daniela (utente non iscritto) data: 23/08/2012 14:28:49

    si ho scaricato il file, va bene solo che deve andare nella colonna successiva cioè ogni inserimento deve andare nella colonna dopo

    es 1 inserimento
    FOGLIO SCHEDA
    Nome Cognome
    x x

    FOGLIO DATI
    NOME X
    COGNOME X

    secondo inserimento
    Nome Cognome
    w w

    FOGLIO DATI
    NOME X w
    COGNOME X w


    terzo inserimento
    Nome Cognome
    z z


    FOGLIO DATI
    NOME X w z
    COGNOME X w z


    ecc.

    quello che mi hai dato te aggiorna solo i dati, quindi incolla sempre nella prima colonna e non è quello che serve a me. io devo alimentare il foglio dati



  • di Vecchio Frac data: 23/08/2012 15:01:48

    Allora è ancora più semplice (io compilavo in scheda un elenco di nomi e cognomi e poi li trasportavo in dati).

    In SCHEDA:
    A1 = "nome"
    B1 = "cognome"
    A2 = scrivo il nome
    B2 = scrivo il cognome

    In DATI:
    A1 = "nome"
    A2 = "cognome"
    A... = ritrovo tutti i nomi
    B... = ritrovo tutti i cognomi
     
    Private Sub CommandButton1_Click()
    Dim last_col As Integer
    
        last_col = [dati!a2].CurrentRegion.Columns.Count
        
        [scheda!a2:b2].Copy
        Sheets("dati").Cells(1, last_col + 1).PasteSpecial Transpose:=True
        
        Application.CutCopyMode = False
    
    End Sub






  • di Daniela (utente non iscritto) data: 23/08/2012 15:23:05

    no io semplicemente inserire dei dati dal foglio scheda al foglio dati partendo dalla colonna b.
    quindi mettere
    la casella scheda.a1 nella cella b1
    la casella scheda.b3 nella cella b2
    ecc

    cliccare sul bottone registra e i dati vengono inseriti nella colonna b

    poi se si vogliono inserire altri dati ripetere il procedimento e questa volta tutti i dati verranno inseriti nella colonna c

    poi se si vogliono inserire altri dati ripetere il procedimento e questa volta tutti i dati verranno inseriti nella colonna d

    e cosi via.




  • di Vecchio Frac data: 23/08/2012 15:47:43

    Il codice che ti ho postato fa quello che chiedevi.
    Inseriti dei valori in SCHEDA:A2 e B2, ogni volta che premi il command button associato ti ricopia questi valori nella prima colonna libera di DATI, in riga 1 e 2.
    Se non ti piace il trucco del Copy con il PasteSpecial Transpose:=True, puoi vederlo anche nel modo alternativo di cui sotto.
    Te lo commento così puoi adattarlo al tuo caso specifico.
    A questo punto basta solo che tu capisca cosa vuoi esattamente copiare e verso dove, perché è dall'inizio del thread che fornisci indicazioni diverse:

    "quindi in dati.B1 mettere scheda.b4 "
    "in dati.B2 mettere scheda.d4 "
    "in dati.b3 mettere scheda b5 "

    "il valore di scheda.b4 inserirlo in dati.b2 "
    "il valore di scheda.d4 inserirlo in dati b3 "
    "il valore di scheda.b6 inserirlo in dati b3 "

    "i dati scritti nelle celle a1 e b2 devono essere incollati in b1 e b2 "

    "inserire dei dati dal foglio scheda al foglio dati partendo dalla colonna b. "
    "quindi mettere "
    "la casella scheda.a1 nella cella b1 "
    "la casella scheda.b3 nella cella b2 "
     
    Private Sub CommandButton1_Click()
    Dim last_col As Integer
    
        last_col = [dati!a2].CurrentRegion.Columns.Count
        
        'copia a2 da scheda a dati in riga 1, colonna la prima disponibile
        [scheda!a2].Copy Sheets("dati").Cells(1, last_col + 1)    
        
        'copia b2 da scheda a dati in riga 2, colonna la prima disponibile
        [scheda!b2].Copy Sheets("dati").Cells(2, last_col + 1)
        
        Application.CutCopyMode = False
    
    End Sub






  • di Daniela (utente non iscritto) data: 24/08/2012 08:35:50

    ho trovato anche questo codice che funziona benissimo.

    grazie mille ho imparato un sacco di cose......


     
    Private Sub CommandButton1_Click()
    Dim NewCol As Integer
     
    With Worksheets("DATI1")
        NewCol = .Cells(4, .Columns.Count).End(xlToLeft).Column + 1
        .Cells(3, NewCol).Value = Worksheets("SCHEDA").Range("B4").Value
        .Cells(4, NewCol).Value = Worksheets("SCHEDA").Range("D4").Value
        .Cells(5, NewCol).Value = Worksheets("SCHEDA").Range("B5").Value
        .Cells(6, NewCol).Value = Worksheets("SCHEDA").Range("D5").Value
    
    
    
    
    
    End With
    
    
    Worksheets("SCHEDA").Range("B4").ClearContents
    Worksheets("SCHEDA").Range("D4").ClearContents
    Worksheets("SCHEDA").Range("B5").ClearContents
    Worksheets("SCHEDA").Range("D5").ClearContents