Excel Forum Per condividere esperienze su Microsoft Excel

Copiare celle non attigue

  • Messaggi
  • OFFLINE
    BG66
    Post: 126
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 19/03/2017 22:38
    Ciao a tutti,
    con questa macro riesco a copiare la cella A7 del foglio Modulo in A1 del foglio Archivio.

    Ma cosa devo implementare per fargli copiare anche le altre celle non attigue con alcune distinzioni:
    B7 -> singola come A7
    B12+B23 -> concatenate con spazio
    A48+B48 -> concatenate con spazio

    La macro che funziona solo per A7 è:
    Sub ArchiviaDato() ' 
    Set wsh = ThisWorkbook.Worksheets("Archivio") 
    Set wsh1 = ThisWorkbook.Worksheets("Modulo") 
    uriga = wsh.Range("A" & Rows.Count).End(xlUp).Row              
    If wsh1.Range("A" & 7) = "" Or wsh1.Range("B" & 7) = "" Or _ 
    wsh1.Range("B" & 12) = "" Or wsh1.Range("B" & 23) = "" Or _
    wsh1.Range("A" & 48) = "" Or _         
    wsh1.Range("B" & 48) = "" Then             
    MsgBox ("VERIFICA I DATI INSERITI"), vbInformation, "ATTENZIONE" 
    Exit Sub         
    End If     
    Range("A7").Select     
    Selection.Copy     
    Range("F10").Select     
    Sheets("Archivio").Select     
    Range("A1").Select     
    ActiveCell.Offset(uriga, 0).Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:= _         
    False, Transpose:=True     
    ActiveCell.Offset(1, 0).Range("A1").Select     
    Sheets("Modulo").Select     
    Application.CutCopyMode = False     
    
    Range("F4").Select 
    End Sub


    Grazie in anticipo per l'aiuto.

    [Modificato da BG66 19/03/2017 22:44]
    BG66
    Excel 2010
  • OFFLINE
    patel45
    Post: 3.778
    Registrato il: 13/03/2012
    Città: LIVORNO
    Età: 78
    Utente Master
    2010
    00 19/03/2017 23:13
    Re:
    B7 -> singola come A7 - vsh.Range("B7").Copy vsh1.Range("A7")

    B12+B23 -> concatenate con spazio - dove le vuoi copiare ?
    A48+B48 -> concatenate con spazio - dove le vuoi copiare ?


    ----------
    Win 10 - Excel 2010
    allega un file di esempio, guadagnerai tempo tu e lo farai risparmiare a chi ti aiuta
  • OFFLINE
    BG66
    Post: 126
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 20/03/2017 09:16
    Re: Re:
    Ciao Patel,
    patel45, 19/03/2017 23.13:

    B7 -> singola come A7 - vsh.Range("B7").Copy vsh1.Range("A7")

    B12+B23 -> concatenate con spazio - dove le vuoi copiare ?
    A48+B48 -> concatenate con spazio - dove le vuoi copiare ?




    Come da dato atteso nel file allegato ossia:
    A7 di "Modulo" in A2 di "Archivio"
    B7 di "Modulo" in B2 di "Archivio"
    B12+B23 di "Modulo" in C2 di "Archivio"
    A48+B48 di "Modulo" in D2 di "Archivio"

    Se puoi comunque dare un'occhiata anche alla macro perchè quando ho inserito:
     wsh.Range("B7").Copy wsh1.Range("B2")

    Il debug non ha gradito evidenziandomi la parte:
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:= _         
    False, Transpose:=True 


    Grazie se puoi.
    BG66
    Excel 2010
  • OFFLINE
    dodo47
    Post: 1.127
    Registrato il: 06/04/2013
    Utente Veteran
    2010
    00 20/03/2017 09:42
    Ciao
    usa delle variabili di appoggio:
    Sub ArchiviaDato() '
    Set wsh = ThisWorkbook.Worksheets("Archivio")
    Set wsh1 = ThisWorkbook.Worksheets("Modulo")
    uriga = wsh.Range("A" & Rows.Count).End(xlUp).Row
        
            If wsh1.Range("A" & 7) = "" Or wsh1.Range("B" & 7) = "" Or _
            wsh1.Range("B" & 12) = "" Or wsh1.Range("B" & 23) = "" Or _
            wsh1.Range("A" & 48) = "" Or _
            wsh1.Range("B" & 48) = "" Then
                MsgBox ("VERIFICA I DATI INSERITI"), vbInformation, "ATTENZIONE"
                Exit Sub
            End If
        mRif = Range("A7")
        dEmis = Range("B7")
        mProd = Range("B12") & " " & Range("B23")
        mDest = Range("A48") & " " & Range("B48")
        wsh.Cells(uriga + 1, 1) = mRif
        wsh.Cells(uriga + 1, 2) = dEmis
        wsh.Cells(uriga + 1, 3) = mProd
        wsh.Cells(uriga + 1, 4) = mDest
        
    End Sub


    Saluti

    Edit: per evitare che il riferimento 1/2017 venga interpretato come data, potresti modificare: mRif = "'" & (Range("A7")), oppure formattare l'intera colonna A del foglio Archivio come testo e lasciare: mRif = Range("A7")


    [Modificato da dodo47 20/03/2017 09:50]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    BG66
    Post: 127
    Registrato il: 13/12/2015
    Città: MILANO
    Età: 58
    Utente Junior
    2010
    00 20/03/2017 10:04
    [RISOLTO]
    Ciao Domenico,
    è perfetta.
    dodo47, 20/03/2017 09.42:


    Edit: per evitare che il riferimento 1/2017 venga interpretato come data, potresti modificare: mRif = "'" & (Range("A7")), oppure formattare l'intera colonna A del foglio Archivio come testo e lasciare: mRif = Range("A7")



    Sul file master avevo già formattato la colonna A.
    Ma proverò comunque anche la tua opzione 1 che ovviamente non conoscevo.

    Grazie.
    [Modificato da BG66 20/03/2017 10:10]
    BG66
    Excel 2010