Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo pių facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.

Copia&Incolla su altri fogli con If

  • FILE ALLEGATI:
  • Copia&Incolla su altri fogli con If (Excel 2010) di Valerio (Utente non iscritto) data: 04/01/2017 12:06:30 



    Buongiorno a tutti, purtroppo non sono un esperto, ma un becero neofita ;)
    Vorrei copiare alcune celle ed inserirle in tabelle presenti in fogli diversi a seconda dell'intestazione.
    Ho provato a scrivere un linguaggio secondo quanto studiato dieci anni fa, ma ovviamente non funziona.
    Vi posto di seguito il linguaggio per cercare di farvi comprendere la logica, potete aiutarmi nel trovare una soluzione?
    Vi ringrazio di cuore.
    Valerio
     
    Sub Dati()
    
    'Immetto dati a seconda del tipo di strumento
    
    
    Dim a, b, c, d, e As Integer
    a = 10
    b = 10
    c = 10
    d = 10
    e = 10
    
    If Sheets("Inserimento_Dati").Range("C2") = "Azioni" Then
    
        Sheets("Inserimento_Dati").Range("C3") = Sheets("Log_Azioni").Range("Ca")
        Sheets("Inserimento_Dati").Range("C4") = Sheets("Log_Azioni").Range("Da")
        Sheets("Inserimento_Dati").Range("C5") = Sheets("Log_Azioni").Range("Ea")
        Sheets("Inserimento_Dati").Range("C6") = Sheets("Log_Azioni").Range("Fa")
        Sheets("Inserimento_Dati").Range("C7") = Sheets("Log_Azioni").Range("Ja")
        Sheets("Inserimento_Dati").Range("C8") = Sheets("Log_Azioni").Range("La")
        Sheets("Inserimento_Dati").Range("C9") = Sheets("Log_Azioni").Range("Ma")
        Sheets("Inserimento_Dati").Range("C10") = Sheets("Log_Azioni").Range("Pa")
        
        a = a + 1
         
    Else
            If Sheets("Inserimento_Dati").Range("C2") = "Indici" Then
    
                Sheets("Inserimento_Dati").Range("C3") = Sheets("Log_Indici").Range("Cb")
                Sheets("Inserimento_Dati").Range("C4") = Sheets("Log_Indici").Range("Db")
                Sheets("Inserimento_Dati").Range("C5") = Sheets("Log_Indici").Range("Eb")
                Sheets("Inserimento_Dati").Range("C6") = Sheets("Log_Indici").Range("Fb")
                Sheets("Inserimento_Dati").Range("C7") = Sheets("Log_Indici").Range("Jb")
                Sheets("Inserimento_Dati").Range("C8") = Sheets("Log_Indici").Range("Lb")
                Sheets("Inserimento_Dati").Range("C9") = Sheets("Log_Indici").Range("Mb")
                Sheets("Inserimento_Dati").Range("C10") = Sheets("Log_Indici").Range("Pb")
                
                b = b + 1
            
            Else
                    If Sheets("Inserimento_Dati").Range("C2") = "Commodities" Then
                
                        Sheets("Inserimento_Dati").Range("C3") = Sheets("Log_Commodities").Range("Cc")
                        Sheets("Inserimento_Dati").Range("C4") = Sheets("Log_Commodities").Range("Dc")
                        Sheets("Inserimento_Dati").Range("C5") = Sheets("Log_Commodities").Range("Ec")
                        Sheets("Inserimento_Dati").Range("C6") = Sheets("Log_Commodities").Range("Fc")
                        Sheets("Inserimento_Dati").Range("C7") = Sheets("Log_Commodities").Range("Jc")
                        Sheets("Inserimento_Dati").Range("C8") = Sheets("Log_Commodities").Range("Lc")
                        Sheets("Inserimento_Dati").Range("C9") = Sheets("Log_Commodities").Range("Mc")
                        Sheets("Inserimento_Dati").Range("C10") = Sheets("Log_Commodities").Range("Pc")
                    
                        c = c + 1
                    
                    Else
                            If Sheets("Inserimento_Dati").Range("C2") = "Forex" Then
                        
                                Sheets("Inserimento_Dati").Range("C3") = Sheets("Log_Forex").Range("Cd")
                                Sheets("Inserimento_Dati").Range("C4") = Sheets("Log_Forex").Range("Dd")
                                Sheets("Inserimento_Dati").Range("C5") = Sheets("Log_Forex").Range("Ed")
                                Sheets("Inserimento_Dati").Range("C6") = Sheets("Log_Forex").Range("Fd")
                                Sheets("Inserimento_Dati").Range("C7") = Sheets("Log_Forex").Range("Jd")
                                Sheets("Inserimento_Dati").Range("C8") = Sheets("Log_Forex").Range("Ld")
                                Sheets("Inserimento_Dati").Range("C9") = Sheets("Log_Forex").Range("Md")
                                Sheets("Inserimento_Dati").Range("C10") = Sheets("Log_Forex").Range("Pd")
                                
                                d = d + 1
                                
                            End If
                    End If
            End If
    End If
    
    'Cancello dati tabella
    
    Sheets("Inserimento_Dati").Select
    Range("C3:C10").Select
    Selection.ClearContents
    Range("C3").Select
    
    End Sub
    
  • di patel (Utente esperto) data: 04/01/2017 12:11:54 



    non č molto chiaro cosa vuoi fare, a = a+1 implica un loop che non vedo, comunque la sintassi corretta č 
    Sheets("Inserimento_Dati").Range("C3") = Sheets("Log_Azioni").Range("C" & a)
    se alleghi un file di esempio con dati e risultato desiderato possiamo sviluppare un codice molto pių compatto
  • di Valerio (Utente non iscritto) data: 04/01/2017 15:27:26 



    Ti ringrazio molto.
    i valori: a,b,c,d,e sono solo per farlo scendere di riga ogni volta che inseriva un'operazione diversa.
    Ti allego una bozza del file che sto creando.
    Grazie ancora, sei davvero molto gentile.
    Valerio
  • di patel (Utente esperto) data: 04/01/2017 15:57:56 



    prova questa aggiungendo le righe che mancano 
     
    Sub Dati()
    
      If Sheets("Inserimento_Dati").Range("C2") = "Azioni" Then
        LR = Sheets("Log_Azioni").Cells(Rows.Count, "C").End(xlUp).Row + 1 ' prima riga vuota
        Sheets("Log_Azioni").Range("C" & LR) = Sheets("Inserimento_Dati").Range("C3")
        Sheets("Log_Azioni").Range("D" & LR) = Sheets("Inserimento_Dati").Range("C4")
      End If
      If Sheets("Inserimento_Dati").Range("C2") = "Indici" Then
        LR = Sheets("Log_Indici").Cells(Rows.Count, "C").End(xlUp).Row + 1
        Sheets("Log_Indici").Range("C" & LR) = Sheets("Inserimento_Dati").Range("C3")
        Sheets("Log_Indici").Range("D" & LR) = Sheets("Inserimento_Dati").Range("C4")
      End If
      If Sheets("Inserimento_Dati").Range("C2") = "Commodities" Then
        LR = Sheets("Log_Commodities").Cells(Rows.Count, "C").End(xlUp).Row + 1
        Sheets("Log_Commodities").Range("C" & LR) = Sheets("Inserimento_Dati").Range("C3")
        Sheets("Log_Commodities").Range("D" & LR) = Sheets("Inserimento_Dati").Range("C4")
      End If
      If Sheets("Inserimento_Dati").Range("C2") = "Forex" Then
        LR = Sheets("Log_Forex").Cells(Rows.Count, "C").End(xlUp).Row + 1
        Sheets("Log_Forex").Range("C" & LR) = Sheets("Inserimento_Dati").Range("C3")
        Sheets("Log_Forex").Range("D" & LR) = Sheets("Inserimento_Dati").Range("C4")
      End If
    
    'Cancello dati tabella
    
      Sheets("Inserimento_Dati").Select
      Range("C3:C10").ClearContents
    
    End Sub
    
  • di Luca73 (Utente esperto) data: 04/01/2017 16:00:25 



    Ciao ho provato a semplificarla un pelo.
    Prova vedere se funziona.
    Ciao
    Luca
     
    Sub Dati()
    
    'Immetto dati a seconda del tipo di strumento
    
    Dim a, b, c, d, e As Integer
    Dim FoglioMio As Worksheet
    Dim Scarto As Integer
    
    a = 10
    b = 10
    c = 10
    d = 10
    e = 10
    Dim Procedo As Boolean
    
    Procedo = True
    Select Case Sheets("Inserimento_Dati").Range("C2")
    
        Case "Azioni"
            Scarto = a
            a = a + 1
            Set FoglioMio = Sheets("Log_Azioni")
        Case "Indici"
            Scarto = b
            b = b + 1
            Set FoglioMio = Sheets("Log_Indici")
        Case "Commodities"
            Scarto = c
            c = c + 1
            Set FoglioMio = Sheets("Log_Commodities")
        Case "Forex"
            Scarto = d
            d = d + 1
            Set FoglioMio = Sheets("Log_Forex")
        Case Else
            Procedo = False
    End Select
    
    If Procedo Then
        Sheets("Inserimento_Dati").Range("C3") = FoglioMio.Range("C" & Scarto)
        Sheets("Inserimento_Dati").Range("C4") = FoglioMio.Range("D" & Scarto)
        Sheets("Inserimento_Dati").Range("C5") = FoglioMio.Range("E" & Scarto)
        Sheets("Inserimento_Dati").Range("C6") = FoglioMio.Range("F" & Scarto)
        Sheets("Inserimento_Dati").Range("C7") = FoglioMio.Range("J" & Scarto)
        Sheets("Inserimento_Dati").Range("C8") = FoglioMio.Range("L" & Scarto)
        Sheets("Inserimento_Dati").Range("C9") = FoglioMio.Range("M" & Scarto)
        Sheets("Inserimento_Dati").Range("C10") = FoglioMio.Range("P" & Scarto)
    End If
    
    
    'Cancello dati tabella
    
    Sheets("Inserimento_Dati").Select
    Range("C3:C10").Select
    Selection.ClearContents
    Range("C3").Select
    
    End Sub
  • di patel (Utente esperto) data: 04/01/2017 16:28:06 



    l'idea di Luca73 mi sembra buona, ma credo che non abbia guardato bene il file allegato, quindi propongo questa modifica
     
     
    Sub Dati2()
    Procedo = True
    Select Case Sheets("Inserimento_Dati").Range("C2")
        Case "Azioni"
            Set FoglioMio = Sheets("Log_Azioni")
        Case "Indici"
            Set FoglioMio = Sheets("Log_Indici")
        Case "Commodities"
            Set FoglioMio = Sheets("Log_Commodities")
        Case "Forex"
            Set FoglioMio = Sheets("Log_Forex")
        Case Else
            Procedo = False
    End Select
    If Procedo Then
        LR = FoglioMio.Cells(Rows.Count, "C").End(xlUp).Row + 1 ' prima riga vuota
        FoglioMio.Range("C" & LR) = Sheets("Inserimento_Dati").Range("C3")
        FoglioMio.Range("D" & LR) = Sheets("Inserimento_Dati").Range("C4")
        FoglioMio.Range("E" & LR) = Sheets("Inserimento_Dati").Range("C5")
        FoglioMio.Range("F" & LR) = Sheets("Inserimento_Dati").Range("C6")
        FoglioMio.Range("J" & LR) = Sheets("Inserimento_Dati").Range("C7")
        FoglioMio.Range("L" & LR) = Sheets("Inserimento_Dati").Range("C8")
        FoglioMio.Range("M" & LR) = Sheets("Inserimento_Dati").Range("C9")
        FoglioMio.Range("P" & LR) = Sheets("Inserimento_Dati").Range("C10")
    End If
    
    'Cancello dati tabella
    
      Sheets("Inserimento_Dati").Select
      Range("C3:C10").ClearContents
    
    End Sub
  • di Valerio (Utente non iscritto) data: 04/01/2017 16:42:48 



    Grazie ragazzi,
    ho provato con la formula di patel ma mi restituisce l'errore: Indice non incluso nell'intervallo,
    mentre su quello di Luca mi da errore: run-time '9'
  • di Luca73 (Utente esperto) data: 04/01/2017 16:48:22 



    Ciao A tutti e soprattutto a Patel

    Hai ragione non avevo neanche guardato il file....
    e poi avevo lasciato aperto il foglio da molto tempo pertanto non mi ero accorto che avevi scritto e commentato.

    La mia era sola la semplificazione della macro postata. nulla pių....

    Ciao
  • di Valerio (Utente non iscritto) data: 04/01/2017 16:51:10 



    Scusate, ora funziona tutto...Non so proprio come ringraziarvi.
    Grazie Grazie Grazie
  • torna su

Sostieni Excel VBA con una donazione! Con la tua donazione potrai contribuire al mantenimento del servizio.
Le donazioni sono eseguite con PayPal, il modo pių facile, comodo e sicuro per pagare online.
Paypal accetta anche carta di credito o carte prepagate.