Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Copia dati ma controlla che non siano duplicati

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

Copia dati ma controlla che non siano duplicati

Postdi christianghz » 06/10/15 15:09

Ciao a tutti,
ho girato l'internet in lungo e in largo ma non riesco a trovare un codice adatto alla mia esigenza.
Mi sembra impossibile perchè di solito trovo tutto e questa macro dovrebbe anche essere semplice, però boh, non ne vengo a capo.

Ho due file:
1)quello dove sto lavorando con l'elenco di consegne odierno. Ogni colonna contiene un dettaglio della consegna, in ogni cella della colonna A invece c'è un numero uguale per tutte le consegne di quel giorno.
2)quello dove ho il totale delle consegne annuali su cui devo aggiungere (copiaincollare) quello odierne

La macro deve fare questo:
-Nel file delle consegne odierne su cui sto lavorando copiare le righe dalla riga 2 fino all'ultima cella popolata in A
-controllare che il valore che ho in colonna A non sia già presente nella colonna A del secondo file:///\\SERVERGEST\Documenti\CONSEGNE E RITIRI\ELENCO CONSEGNE.xls
(in modo da evitare di importare 2 volte la stessa serie di dati)
- se il valore c'è già deve chiedermi se voglio procedere comunque
- incollare nel secondo file le righe copiate dal primo file partendo dalla prima riga vuota.

Sta cosa del "controllo" pensavo fosse una cavolata e invece mi sta facendo uscire di testa.

Grazie!

P.S. i file devono rimanere separati, non posso mettere i due fogli nello stesso file
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Sponsor
 

Re: Copia dati ma controlla che non siano duplicati

Postdi alfrimpa » 06/10/15 18:53

Ciao Christian

Giusto per provarci (e senza nessuna garanzia sulla riuscita :) ) potresti allegare i due file di esempio (senza dati sensibili ma con uguale struttura al reale) in modo che si possa cominciare a fare delle prove?

La mia idea è quella di ciclare i dati sul primo file e con un CountIf sul secondo file se il risultato è zero fare la copia; diversamente no.

I file ovviamente devono essere aperti entrambi.

Non so se sono stato chiaro
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 06/10/15 20:08

Certo ALfrimpa, grazie dell'interesse.
qui il primo file http://www.filedropper.com/exportdettaglitrazione
il file allegato ha solo 2 righe ma di solito ne ha una cinquantina.
Il secondo file è identico e ci devo portare le stesse colonne , solo che si popola quotidianamente di nuove righe.

Il primo file lo apro io ogni mattina poi ho già una macro che mi apre automaticamente il secondo file.

grazie
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 07/10/15 08:05

la macro deve eseguire una cosa "molto" semplice:
-Controlla se il valore della cella A2 del primo file è presente nella colonna A del secondo file
-se è presente prima di procedere al copiaincolla avvisami che sto per fare una potenziale cagata pazzesca e se la voglio comunque fare
- se non lo trovi copia nel secondo file tutte le righe che trovi popolate nel primo foglio


sembra facile ma 'sta cosa mi sta facendo sbarellare :aaah
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi alfrimpa » 07/10/15 11:29

Ciao Christian

Eccomi a farti una prima ed assai "grezza" proposta che ti prego di testare molte volte.

Ho creato due file: Christian.xls e Christian_1.xls (il secondo è quello che riceve i dati); devono essere entrambi aperti.

Su Christian.xls ho fatto questo:

Sul foglio1 ho inserito una colonna dove con la sottostante formula vado a controllare se il campo Id trazione è già presente nel file Christian_1.xls (foglio1) ; restituisce VERO se è presente e FALSO se non lo è.


Codice: Seleziona tutto
=SE(B2="";"";CONTA.SE([Christian_1.xls]Foglio1!$A$2:$A$356;B2)>0)



Poi con la macro qui sotto verranno copiati i soli record che non sono presenti

Codice: Seleziona tutto
Sub pippo()
Dim lr As Integer
Dim ur As Integer
Application.ScreenUpdating = False
Range("A1").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$AP$4").AutoFilter Field:=1, Criteria1:="FALSO"
    Selection.AutoFilter
    lr = Range("A" & Rows.Count).End(xlUp).Row
    If Application.WorksheetFunction.CountIf(Range("a2:a20"), False) = 0 Then Exit Sub
Range("b2:ap" & lr).Select
Selection.Copy
Workbooks("Christian_1.xls").Activate
ur = Range("A" & Rows.Count).End(xlUp).Row
Range("a" & ur + 1).PasteSpecial
Workbooks("Christian.xls").Activate
Application.CutCopyMode = False
Range("a1").Select
Application.ScreenUpdating = True
End Sub



Ripeto è solo un primo, timido tentativo di affrontare il problema; tu fai moltissime prove e fammi sapere.

Se hai bisogno di ulteriori spiegazioni sono qui.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 07/10/15 11:47

Grazie ALfrimpa,
Avevo pensato di inserire il conta.se nel primo file, solo che volevo evitarlo perchè è un file che estrapolo ex novo ogni giorno dal gestionale, il che significa che dovrei crearmi un'ulteriore macro che quando apro il file mi inserisce automaticamente la formula conta.se in ultima colonna (che è semplice da fare, ma vorrei avere il minor numero di macro possibile da concatenare).

Comunque dopo pranzo testo la tua macro e ti dico,
grazie intanto!
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi alfrimpa » 07/10/15 11:51

Non devi creare nessuna nuova macro; la formula c'è già in colonna A e visualizza il VERO o FALSO solo se in B c'è un valore.

Io te l'ho copiata sino ad A399.

Edit: scusa non avevo letto che estrapoli il file ogni giorno; comunque sarebbe una macro semplicissima ed in ogni caso devi fare una macro per la ricerca dei valori sul secondo file.
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Copia dati ma controlla che non siano duplicati

Postdi alfrimpa » 07/10/15 13:28

Comunque, giusto per dire, con una piccola macro di questo tipo

Codice: Seleziona tutto
Sub Macro8()
Dim i As Integer
For i = 1 To 100
    Range("a" & i).FormulaR1C1 = _
        "=IF(RC[1]="""","""",COUNTIF('C:\Excel\[Christian_1.xls]Foglio1'!R2C1:R500C1,RC[1])>0)"
    Next i
End Sub


inserisci la formula da A1 ad A100
Alfredo

Win7 + Office 2007
Avatar utente
alfrimpa
Utente Senior
 
Post: 842
Iscritto il: 30/12/13 17:01
Località: Napoli

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 08/10/15 09:10

Ho provato Alfrimpa
la macro non mi funziona.
Avrei anche questo problema con questa macro

Workbooks("Christian_1.xls").Activate ok, il file è sempre quello
ur = Range("A" & Rows.Count).End(xlUp).Row
Range("a" & ur + 1).PasteSpecial
Workbooks("Christian.xls").Activate il nome del file cambia ogni giorno(è un concatenamento di data e numero trazione)

Inoltre la macro che inserisce il conta.se rallenta abbastanza il processo.
Quindi cercherei una strada meno arzigogolata.

Mi pare impossibile non ci sia una macro che dice:

Se il valore in A2 di questo foglio è presente nella colonna A del secondo file allora blocca tutto.
:cry:
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi Anthony47 » 09/10/15 02:16

Sono confuso sul processo che ora usi...
Ho capito che ogni giorno estrapoli un nuovo file excel dal gestionale, quindi dovremmo partire da una macro installata nel file annuale che si chiama ELENCO CONSEGNE.xls (o Christian_1.xls??).
Lanciando questa macro dovremmo scegliere quale file "odierno" aprire, fare il controllo e decidere il da farsi.
Se questo ti quadra allora inserisci sul file "annuale" questa macro:
Codice: Seleziona tutto
Sub ytd()
Dim LastA As Long, Last1 As Long, SummaSh As String, Cnt As Long, Rispo
Dim dayWkb As String, yNext As Long
'
SummaSh = "Foglio1"           '<<< Il foglio del file Annuale su cui fare la somma
'
Application.Dialogs(xlDialogOpen).Show
If ActiveWorkbook.Name = ThisWorkbook.Name Then
    MsgBox ("Nessun file e' stato aperto, procedura abortita...")
    Exit Sub
End If
dayWkb = ActiveWorkbook.Name
Sheets(1).Activate
Cnt = Application.WorksheetFunction.CountIf(ThisWorkbook.Sheets(SummaSh).Range("A:A"), Range("A2").Value)
If Cnt > 0 Then
    Rispo = MsgBox("L'ID Trazione odierno e' gia' presente nel file Annuale (" & Cnt & "volte)" & _
    vbCrLf & "Vuoi copiare oppure no (Si /No)?", vbYesNo)
    If Rispo <> vbYes Then Exit Sub
End If
LastA = Cells(Rows.Count, 1).End(xlUp).Row
Last1 = Cells(1, Columns.Count).End(xlToLeft).Column

yNext = ThisWorkbook.Sheets(SummaSh).Cells(Rows.Count, 1).End(xlUp).Row + 1
Range("A2").Resize(LastA - 1, Last1).Copy ThisWorkbook.Sheets(SummaSh).Cells(yNext, 1)
MsgBox ("Copia effettuata, " & LastA - 1 & " righe" & _
    vbCrLf & "Chiudere il file odierno e Salvare il file Annuale")
'
End Sub
La riga marcata <<< e' da personalizzare col nome del foglio che contiene l'elenco annuale; mentre ho immaginato che il file Odierno abbia i dati sul primo foglio.

Lanciando la macro YTD verra' chiesto quale file odierno deve essere aperto, apre quel file e procede con la verifica e la copia.
Alla fine i file devono essere salvati e chiusi manualmente; questo per consentire un eventuale ravvedimento (es chiudere il file Annuale senza salvare se non si e' sicuri di quel che e' stato fatto).

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 09/10/15 14:44

P E R F E T T O Anthony!!!!!!
Sei un drago, hai azzeccato tutto.

Due cose:
1) È possibile far si che acquisisca più di un file alla volta? Ovvero quando mi chiede che file aprire selezionarne 2.

2)Questa macro è parte di una lunga catena di macro, quindi ho un file che si apre in automatico all'apertura di qualsiasi file xls con dentro tutte le macro sempre a disposizione da lanciare.

Come modifico il codice per far sì che questa macro faccia la copia sempre sul file annuale invece che sul file attivo in quel momento?
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi Anthony47 » 09/10/15 18:59

Se per "fare la copia sul file annuale" intendi "incollare i dati provenienti dai file odierni sul file annuale", allora oggi la macro "fa la copia" sul file che contiene la macro, infatti ti avevo detto di inserirla nel file Annuale.
Da quel che dici mi pare che tu invece la vuoi inserire in un file terzo, da cui vuoi governare la faccenda. Quanto a poter lavorare con piu' file, questo si puo' fare ma in questo caso i file "odierni" verranno chiusi al termine della loro lavorazione, mentre il file Annuale deve essere noto a priori.
Prova con questa macro.
Codice: Seleziona tutto
Sub ytdMulti()
Dim LastA As Long, Last1 As Long, SummaSh, Cnt As Long, Rispo
Dim dayWkb, yNext As Long, myCopy As Boolean, myMsg As String
'
Set SummaSh = Workbooks("byCHRISTIANGHZ_pippo.xls").Sheets("Foglio1")       '<<< Il File e foglio dell' Annuale su cui fare la somma
'
With Application.FileDialog(msoFileDialogFilePicker)
    .AllowMultiSelect = True
    .Filters.Clear
    .Filters.Add "Excel", "*.xls*", 1   
    .Show
    If .SelectedItems.Count = 0 Then
         MsgBox ("Nessuna voce selezionata, procedura annullata")
         GoTo exitA
    End If
End With
'
For Each dayWkb In Application.FileDialog(msoFileDialogFilePicker).SelectedItems     'Directory e Nome del file selezionato
    Workbooks.Open dayWkb
    Sheets(1).Activate: myCopy = True
    Cnt = Application.WorksheetFunction.CountIf(SummaSh.Range("A:A"), Range("A2").Value)
    If Cnt > 0 Then
        Rispo = MsgBox("L'ID Trazione odierno e' gia' presente nel file Annuale (" & Cnt & "volte)" & _
        vbCrLf & "Vuoi copiare oppure no (Si /No)?", vbYesNo)
        If Rispo = vbYes Then myCopy = True Else myCopy = False
    End If
    If myCopy Then
        LastA = Cells(Rows.Count, 1).End(xlUp).Row
        Last1 = Cells(1, Columns.Count).End(xlToLeft).Column
        myMsg = myMsg & vbCrLf & ActiveWorkbook.Name & ": +++copiate " & (LastA - 1) & " righe"
       
        yNext = SummaSh.Cells(Rows.Count, 1).End(xlUp).Row + 1
        Range("A2").Resize(LastA - 1, Last1).Copy SummaSh.Cells(yNext, 1)
    Else
        myMsg = myMsg & vbCrLf & ActiveWorkbook.Name & ": >>> NON COPIATO! "
    End If
    ActiveWorkbook.Close False
Next dayWkb

MsgBox (myMsg & vbCrLf _
     & "Salvare il file Annuale")
exitA:
Set SummaSh = Nothing
End Sub
La riga marcata <<< va adattata al tuo caso.
La scelta dei file si fa secondo l'interfaccia Windows, cioe' usando Shift per allungare la selezione e Contr per scelte singole.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 10/10/15 08:06

Perfetto di nuovo ANthony.

GRAZIE!!!!!!
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi christianghz » 21/01/16 09:57

Ciao Anthony,
mi hanno aggiornato il gestionale e ora esporta i file in .xlsx invece che .xls come prima, quindi quando vado a usare la macro mi da errore di runtime 1004 qui :

yNext = SummaSh.Cells(Rows.Count, 1).End(xlUp).Row + 1

Come si risolve questa incompatibilità dei due formati Excel?


Grazie mille
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Copia dati ma controlla che non siano duplicati

Postdi Anthony47 » 22/01/16 00:20

Modifica in
Codice: Seleziona tutto
yNext = SummaSh.Cells(SummaSh.Rows.Count, 1).End(xlUp).Row + 1

Cosi' dovrebbe andare indipendentemente dal formato.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Copia dati ma controlla che non siano duplicati":


Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti

cron