Condividi:        

Copiare dati con scenari differenti

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Copiare dati con scenari differenti

Postdi BG66 » 22/01/21 23:21

Buona sera.
Ho creato 3 scenari:
1) Dato presente in menu a tendina
2) Dato ricavato da formula
3) Dato digitato manualmente

Vorrei imparare a copiarli nella prima riga vuota:
1) di una tabella - intervallo
2) di una tabella "vera"
e poi svuotare campi e menu.

https://www.dropbox.com/scl/fi/hqta1wtf6eygecyfiv2i4/copiaEsvuota.xlsx?dl=0&rlkey=z12ikxlt13ze3q4ad7teb113e

Grazie per l'aiuto

Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Sponsor
 

Re: Copiare dati con scenari differenti

Postdi Anthony47 » 23/01/21 03:16

Forse volevi postare la domanda sul forum veggenti.it, perche' molte cose secondo me sono rimaste nella tua testa e non sono finite nel messaggio...
Quindi mi fermo ora a un paio di considerazioni generiche.

Per trovare l'ultima riga usata in un foglio, se c'e' una "colonna guida" su cui fare affidamento, si usa il classico
Codice: Seleziona tutto
LastR = Sheets("intervallo").Cells(Rows.Count, "A").End(xlUp).Row

Questa considera la colonna A come quida

Se vuoi cercare l'ultima riga usata in qualunque colonna di un intervallo di colonne, allora, ad esempio:
Codice: Seleziona tutto
LastR = Range("B:F").Find(What:="*", After:=Range("B1"), _
              SearchOrder:=xlByRows, _
              SearchDirection:=xlPrevious).Row

Questa guarda nelle colonne B:F; attenzione a quel "B1", va modificato se usi altre colonne

La gestione della tabella e' totalmente diversa, perche' per cominciare devi preoccuparti di capire se nella tabella sono presenti righe libere in quantita' sufficiente per le righe che vuoi aggiungere.
Un metodo un po' rozzo e' aggiungere alla tabella tante righe quante ne vuoi aggiungere, senza preoccuparsi delle righe vuote gia' disponibili.

Comincio a inserirti come fare le cose piu' comuni:
Codice: Seleziona tutto
With Sheets("Tabella 1").ListObjects("TabellaA")          '<<< Foglio e nome Tabella
'Per aggiungere un Tot di righe in coda alla tabella:
    For i = 1 To NumeroDiRigheDaInserire
        .ListRows.Add
    Next i
   

'Trovare l'ultima riga usata in colonna:
    LastInColumn = .DataBodyRange.Cells(.ListRows.Count, 1).End(xlUp).Row       '<< Ultima usata  in colonna 1

'Per copiare a partire da una riga (non controlla se le righe sono libere!):
    Sheets("Inserimento").Range("B18:D18").Copy Destination:=.Parent.Cells(LastInColumn + 1, 1)
   
End With

Poi qualcosa in piu' si potra' articolare quando sara' piu' chiaro che cosa vorresti copiare, perche' ora il foglio INSERIMENTO per me e' poooco chiaro

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare dati con scenari differenti

Postdi BG66 » 23/01/21 07:08

Ciao Anthony,
Anthony47 ha scritto:Forse volevi postare la domanda sul forum veggenti.it, perche' molte cose secondo me sono rimaste nella tua testa e non sono finite nel messaggio...

....era un tentativo per verificare le tue capacità divinatorie... :lol:
Anthony47 ha scritto:Poi qualcosa in piu' si potra' articolare quando sara' piu' chiaro che cosa vorresti copiare, perche' ora il foglio INSERIMENTO per me e' poooco chiaro

In pratica immaginavo un processo cosi composto:
- schiaccio il pulsante 1: la data (che avevo dimenticato :oops:), cognome e nome vengono copiati nella prima riga vuota (riferimento colonna A) del foglio Intervallo.
- schiaccio il pulsante 2: la data,cognome, luogo di nascità e nazione vengono copiati nella prima riga vuota (riferimento colonna B) del foglio Tabella 1.
e prima di uscire mi chiede se voglio cancellare i dati presenti nelle varie celle e menu.

https://www.dropbox.com/scl/fi/62onkmvqm2o3s7c1s7jml/copiaEsvuota-v1.xlsx?dl=0&rlkey=x82ie1odyi30vjm14fvge5nyw

Grazie per la pazienza.
Gene
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44

Re: Copiare dati con scenari differenti

Postdi Anthony47 » 23/01/21 17:15

....era un tentativo per verificare le tue capacità divinatorie...
Il tentativo continua, perche' non dici niente sul foglio INSERIMENTO (che ho capito e' il foglio su cui l'utente scrive); ad esempio non ho proprio idea di dove si trovino (su foglio INSERIMENTO) i dati che vuoi copiare.
La migliore ipotesi e' che siano in B3-B5-B6-B7-B8 (anche se non vedo dove la tua casella combinata va a posizionare le scelte fatte).

Quindi continuo a farti degli esempi generici, che spero siano facilmente adattabili al tuo caso.

schiaccio il pulsante 1: la data (che avevo dimenticato :oops:), cognome e nome vengono copiati nella prima riga vuota (riferimento colonna A) del foglio Intervallo.

Ad esempio:
Codice: Seleziona tutto
Sub CopiaToIntervallo()
Dim CArr(1 To 3), LastR As Long
'
LastR = Sheets("intervallo").Cells(Rows.Count, "A").End(xlUp).Row
With Sheets("Inserimento")
    'Copio data, cognome e nome (da dove sono in memoria):
    CArr(1) = .Range("B6").Value        '<<< Le vere posizioni dei dati
    CArr(2) = .Range("B3").Value
    CArr(3) = .Range("B5").Value
End With
'scrivo sull'area di destinazione:
Sheets("intervallo").Cells(LastR + 1, "A").Resize(1, 3).Value = CArr
'Copio il formato dalla riga precedente:
Sheets("intervallo").Cells(LastR, 1).Resize(1, 3).Copy
Sheets("intervallo").Cells(LastR + 1, "A").PasteSpecial xlPasteFormats
Application.CutCopyMode = False
'Chiedi se vuoi azzerare:
If MsgBox("Vuoi cancellare i valori copiati?", vbYesNo) = vbYes Then
    With Sheets("Inserimento")
        .Range("B6").ClearContents      '<<<Le vere posizioni dei dati
        .Range("B3").ClearContents
        .Range("B5").ClearContents
    End With
End If
End Sub

Non essendo certo di come sono organizzati i dati da copiare li prendo da dove sono e li carico in una Lista (cArr); copio poi la Lista sul foglio di destinazione, copio la formattazione dalla riga precedente, chiedo se cancellare i dati; fine


schiaccio il pulsante 2: la data,cognome, luogo di nascità e nazione vengono copiati nella prima riga vuota (riferimento colonna B) del foglio Tabella 1

Ad esempio:
Codice: Seleziona tutto
Sub CopiaToTabella()
Dim CArr(1 To 4)
'
With Sheets("Inserimento")
    'Copio data, cognome e nome (da dove sono in memoria):
    CArr(1) = .Range("B6").Value        '<<< Le vere posizioni dei dati
    CArr(2) = .Range("B3").Value
    CArr(3) = .Range("B7").Value
    CArr(4) = .Range("B8").Value
End With
'Lavoriamo sulla tabella di destinazione:
With Sheets("Tabella 1").ListObjects("TabellaA")     'Nome foglio e nome Tabella
    'Aggiungo una riga a Tabella di destinazione:
    .ListRows.Add
    'Copio su prima riga libera di tabella:
    .DataBodyRange.Cells(.ListRows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 4).Value = CArr
End With
'Chiedi se vuoi azzerare:
If MsgBox("Vuoi cancellare i valori copiati?", vbYesNo) = vbYes Then
    With Sheets("Inserimento")
        .Range("B6").ClearContents      '<<<Le vere posizioni dei dati
        .Range("B3").ClearContents
''        .Range("B7").ClearContents    'Formula
        .Range("B8").ClearContents
    End With
End If
End Sub


La sequenza e' simile ma con variazioni dovute alla diversa natura della destinazione:
-copio le info in una Lista (Carr); aggiungo una riga in tabella; copio sulla prima riga libera di tabella; chiedo se azzerare i dati di origine; fine.

Vedi se si adatta al tuo bisogno...

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copiare dati con scenari differenti

Postdi BG66 » 24/01/21 11:38

[RISOLTO]
Ciao Anthony,
Piccoli adattamenti (....alla mia portata) è il gioco è fatto!!

Grazie mille e alla prossima.

Gene
STAY SAFE
BG66
Excel2010
Avatar utente
BG66
Utente Senior
 
Post: 320
Iscritto il: 20/08/16 07:44


Torna a Applicazioni Office Windows


Topic correlati a "Copiare dati con scenari differenti":


Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti