Macro copia valori



  • Macro copia valori
    di Andrea (utente non iscritto) data: 30/10/2014 18:59:51

    Buonasera a tutti,
    premessa con il vba sono un disastro. Sto cercando di adattare una macro che mi avete sviluppato tempo fa alla mia nuova esigenza.
    il mio file contiene un foglio chiamato "sintesi" e 36 fogli chiamati ognuno con la targa del veicolo.
    Allego un file di esempio per farvi capire come è strutturato il file.
    Quello che vorrei che facesse la macro è prendere il valore dei km e dei litri di ogni mese ed incollarlo nel foglio "sintesi" nella cella corrispondente alla targa esatta.
    Ovviamente questo tipo di lavoro deve essere fatto su tutti i 36 fogli che ho creato.

    Inserisco anche il codice vba che avevo scritto io ma che nn funziona
     
    Sub vai()
    With Sheets(1)
      nomefoglio = .Range("B3")
      End With
    Sheets(nomefoglio).Select
    km = .Range("E38")
    lt = .Range("F38")
    Sheets(sintesi).Select
    col = 2
    riga = 3
    Cells(riga, col) = km
    Cells(riga, col + 1) = lt
    End Sub
    



  • di lepat (utente non iscritto) data: 30/10/2014 21:03:10

    nella colonna A ci sono già i numeri di targa ? se non ci fossero sarebbe meglio, basta prenderli dai nomi dei fogli.
    Per testare la macro occorrerebbe un esempio con piu fogli compilati



  • di Andrea (utente non iscritto) data: 30/10/2014 23:11:04

    si, ci sono già tutte le targhe, domani mattina creo un altro file di esempio allora.
    grazie



  • di Zer0Kelvin data: 30/10/2014 23:22:17

    Ciao.
    Puoi provare questa macro: eseguirà l'aggiornamento della tabella leggendo i dati di tutte le schede per i dodici mesi
     
    Sub CompilaTabella()
    Dim Scheda As Worksheet
    Dim Targa As Range, Targhe As Range
    Dim Mese As Long, Ofs1 As Long, Ofs2 As Long
        With Worksheets("SINTESI")
            Set Targhe = Range(.Range("A3"), .Range("A" & .Range("A" & .Rows.Count).End(xlUp).Row))
            For Each Targa In Targhe
                If Targa <> "" Then
                    On Error Resume Next
                    Set Scheda = Worksheets(Targa.Value)
                    On Error GoTo 0
                    If Scheda Is Nothing Then
                        MsgBox "La scheda per la targa: " & Targa & " non esiste!", vbCritical
                    Else
                        For Mese = 1 To 12
                            Ofs1 = (Mese - 1) * 3 + 1
                            Ofs2 = (Mese - 1) * 5
                            Targa.Offset(0, Ofs1) = Scheda.Range("E38").Offset(0, Ofs2)
                            Targa.Offset(0, Ofs1 + 1) = Scheda.Range("E38").Offset(0, Ofs2 + 1)
                        Next Mese
                        Set Scheda = Nothing
                    End If
                End If
            Next Targa
        End With
    End Sub



  • di Andrea (utente non iscritto) data: 31/10/2014 11:02:14

    che dire... perfetta!!!
    come posso fare a imparare questo linguaggio? avete qualche libro, videoguida o altro materiale da consigliarmi?
    Ho già visto la guida presente su questo sito, solo leggendola dal pc mi si affatica molto la vista.
    Sono molto interessato ad imparare il vba accetto consigli



  • di Zer0Kelvin data: 31/10/2014 11:33:11

    Il web è la migliore fonte di informazioni che puoi avere, usa il tuo motore di ricerca preferito.
    Occorre solo un pò di pazienza per imparare ad usarlo in maniera fruttuosa.
    Prima ti occorre una buona infarinatura sulla programmazione in generale, per conoscere almeno i concetti di variabile, istruzione condizionale, cicli, subroutines e funzioni.
    Qui (ma ne esistono moltissime in rete) trovi un'altra guida al VBA

    www.mrwebmaster.it/visual-basic/guide/guida-vba/


    Per il VBA Excel ha anche un'ottima guida interna (tasto F1).
    L'argomento comunque è vasto e richiede tempo.

    PS: se hai difficoltà a leggere a schermo (dipende dal monitor probabilmente o da una postazione di lavoro inadeguata), puoi sempre stampare.



  • di Andrea (utente non iscritto) data: 31/10/2014 12:00:03

    Grazie per tutto! seguirò i consigli
    A presto, Andrea.