CONFRONTO TRAFOGLI



  • CONFRONTO TRAFOGLI
    di GIUS (utente non iscritto) data: 26/10/2012 12:52:54

    Buongiorno,
    scusate avrei un problema dovrei confrontare due fogli di EXCEL uno si apre con un EXCEL e l'altro si apre con un'altro EXCEL, poi dal confronto le righe in + che dovessero risultare dal secondo EXCEL le dovre aggiungere al primo EXCEL. Come devo procedere?
    Grazie, cordiali saluti



  • di HarryBosch data: 26/10/2012 16:23:05

    Ciao Giuseppe
    alcune considerazioni:
    - nel primo file, devi soltanto aggiungere le righe in più del secondo file, oppure devi aggiungere tutte le righe che sono diverse?

    Se devi aggiungere le righe diverse, come presumo, è il caso di analizzare il criterio di controllo, ovvero:
    - il controllo si può fare su un'unico campo ? (per esempio esiste una colonna il cui valore sarà sempre diverso, tipo un campo "codice" o "ID"?)
    - oppure il controllo si deve fare necessariamente su tutti i campi della riga?


  • ciao
    di GIUS (utente non iscritto) data: 26/10/2012 16:33:50

    il confronto lo devo faresu 1 campo ad es ( campo DESCRIZIONE)con il campo DESCRIZIONE del 1° EXCEL, se questo campo porta una dicitura diversa, vuol dire che deVo aggiungere tutta la riga dove si trova il campo nel foglio del primo EXCEL



  • di GIUS (utente non iscritto) data: 26/10/2012 18:03:08

    che è successo ci sono 3 commenti, cmq. spero di aver chiarito il concetto



  • di HarryBosch data: 26/10/2012 18:05:02

    Ho ripreso un codice che avevo già preparato per casi simile, adattandolo alla tua richiesta.
    Devi modificare qualcosina, come vedi anche nei commenti al codice; in particolare devi impostare il percorso del file da controllare, in base alla directory del tuo pc.
    In questo codice vengono confrontate le colonne B, ma ovviamente puoi modificarle in base alla colonna dove trovi la descrizione della tua tabella. Le righe, dove la descrizione di tale colonna risulti diversa, verranno copiate nel foglio principale, ovvero quello dove inserisci e lanci la macro. Da copiare in un modulo.

    Se ti serve qualche chiarimento, vedo di commentare le parti dubbie.
    Fai sapere...
     
    Option Explicit
    '1. da modificare con il percorso del tuo pc e il nome del file da controllare
    Const filecontr As String = "C:UsersuserDocumentsMagic BriefcaseEXCEL - VBAExcelvba.altervista.orgGiuseppe - confronto fra due file"
    Const nomefile As String = "file da controllare.xlsx"
    
    Sub confronto()
        Dim rngA As Range, descrA As Range, colA As Range
        Dim rngB As Range, descrB As Range, colB As Range
        Dim c As Integer, presente As Boolean, r As Integer
        Application.ScreenUpdating = False
    
        Set rngA = [a1].CurrentRegion
        '2. in questo caso controlla la colonna B; cambia la lettera in base alla tua tabella
        Set colA = Range("b2:b" & rngA.Rows.Count)
    
        Workbooks.Open Filename:=filecontr & nomefile
        Set rngB = [a1].CurrentRegion
        '3. anche qua cambia la lettera in base alla tua tabella, come sopra
        Set colB = Range("b2:b" & rngB.Rows.Count)
    
        Windows("file principale.xlsm").Activate
        For Each descrB In colB
            For Each descrA In colA
                If descrB = descrA Then
                    presente = True
                    Exit For
                End If
            Next
            If presente = False Then
                descrB.EntireRow.Copy Destination:=Rows(r + rngA.Rows.Count + 1)
                r = r + 1
            End If
            presente = False
        Next
        Windows(nomefile).Close
        Application.ScreenUpdating = True
    
        If r > 0 Then
            MsgBox "Totale righe importate: " & r
        Else
            MsgBox "Nessun dato importato; tutte le descrizioni corrispondono"
        End If
    End Sub
    


  • grassssssssssssssssie
    di GIUS (utente non iscritto) data: 27/10/2012 00:49:21

    quindi il file da controllare va tra le virgolette della stringa Const nomefile As String , mi sembra anche nel SUB ho letto che legge la colonna A e la colonna B?
    Precisamente il primo EXCEl ha 2 fogli, il 1° foglio chiamato COMUNE DI SEMA e il secondo foglio COMUNE DI ANGRI. IL secondo EXEL ha gli stessi fogli con i rispettivi comuni,
    Io devo confrontare il foglio COMUNE DI SEMA del secondo EXcel con il foglio COMUNE DI SEMA del il 1° ( dove ho intenzione di inserire la Macro per capirci) e se ci sono campi che il foglio succitato del 2° excel porta che non compaiono nel foglio del 1° excel, li ricopi nel primo foglio del primo excel( tutta la riga dove si trova il campo).
    COSI anche per il foglio COMUNE DI ANGRI.
    In più si potrebbero evidenziare con l'evidenziatore questi campi che vengono ricopiati nel foglio del 1° Excel.
    Grazie, salutoni Bosh


    P.S. il file del MERCATO GIORNALIERO che ti ho inviato, lo devo postare anche qui?



  • di GIUS (utente non iscritto) data: 27/10/2012 17:03:59

    .... scusate forse il post di prima non meritava una risposta, perchè il codice era esatto? io non lo ho potuto testare ancora per problemi di riconoscimento della mia pen driver.
    Pero il fatto delle evidenziazione delle celle ricopiate può essere fatto credo



  • di HarryBosch data: 27/10/2012 17:18:25

    Certo, si possono evidenziare le righe che si importano.
    subito dopo la copiatura della riga, e quindi dopo questa istruzione:
    descrB.EntireRow.Copy Destination:=Rows(r + rngA.Rows.Count + 1)
    inserisci:
    Rows(r + rngA.Rows.Count + 1).interior.colorindex = 6
    per evidenziare di giallo

    All'inizio del codice sarebbe però il caso di togliere qualsiasi evidenziazione, altrimenti ad ogni chiamata della macro continuano a restare evidenziate anche le righe precedentemente importate. Quindi potresti aggiungere un
    Cells.interior.colorindex = 0
    subito dopo la dichiarazione delle variabili

    Il codice funziona bene: devi modificare le prime due righe, quindi inserendo il percorso del file da controllare e il nome dello stesso.
    La colonna con il criterio di confronto è la B per entrambi i fogli: se vedi ho messo commento 2 e commento 3:
    Range("b2:b" & rngA.Rows.Count)
    quel "b" è la colonna che prende in considerazione (eventualmente la devi sostituire in entrambe le istruzioni, dopo i due commenti, con la colonna desiderata)




  • di Vecchio Frac data: 27/10/2012 17:53:11

    E' un problema di una certa importanza quello del confronto tra fogli, paragonabile al "confronta versioni" di Word.
    Io in tutti questi anni i confronti me li sono sempre sbrigati a mano :)
    Oppure condividendo il file e facendo registrare le modifiche ad Excel.





  • di GIUS (utente non iscritto) data: 27/10/2012 18:24:15

    ... non fare il geloso VecchioFrac e poi allegare e condividere il programma è rischioso perchè sono dati dell'azienda dove lavoro



  • di Vecchio Frac data: 27/10/2012 19:31:21

    Non mi sono spiegato bene: non intendevo dire che tu dovessi condividere il lavoro... dicevo che è una caratteristica di Excel quella di creare una cartella "condivisa" (si chiama proprio così!) tra utenti e porre il file in rete intranet, Excel registra automaticamente le modifiche e il proprietario può così verificarle e confrontare le versioni successive.




  • :-O
    di GIUS (utente non iscritto) data: 29/10/2012 11:17:50

    Ciao Bosh,
    scusa scusa una volta inserito un il tuo codice in un MODULO del Vba, COME FACCIO A RICHIAMARLO DALLA CELLA E IN QUALE CELLA DEVO INSERIRLO?



  • di HarryBosch data: 29/10/2012 11:26:13

    Richiamare il codice dalla cella?

    Piuttosto, hai una di queste possibilità:
    - inserisci un pulsante e associ a questo la macro
    - oppure associ alla macro una combinazione di tasti rapidi
    - oppure vai direttamente alla scheda "sviluppo", e dove trovi "macro" clicchi ed esegui la Sub in questione

    Per associare la macro al pulsante, una volta che lo hai messo sul foglio, gli clicchi sopra con il tasto destro e vai su "assegna macro".
    Per assegnare la combinazione di tasti vai alla scheda sviluppo, e quindi macro, e quindi scegli "Opzioni".


  • CIAO
    di GIUS (utente non iscritto) data: 29/10/2012 11:56:09

    Ciao,
    è corretta questa procedurA : cOPIA E INCOLLO IL TUO COdice in un Modulo VBA e dopo premo il tasto F5 che mi dice di assegnare un nome alla macro, mqa poi che concludo?



  • di HarryBosch data: 29/10/2012 13:39:47

    Certo, il codice va inserito in un modulo; puoi eseguire la macro anche premendo F5 all'interno del modulo stesso.
    Ma devi posizionarti con il mouse all'interno della stessa sub, quindi avviare l'esecuzione.


  • ...
    di GIUS (utente non iscritto) data: 31/10/2012 10:21:48

    Ciao Bosh.
    facciamo la procedura inserendo il tasto nelfoglio, come si fa?
    Grazie



  • di HarryBosch data: 31/10/2012 11:05:53

    Per inserire un pulsante e associarlo ad una macro, per Excel 2007, fai così:
    - apri la scheda "Sviluppo", e dal gruppo "Controlli" clicca su "Inserisci"
    - nei controlli modulo il primo oggetto è il "Pulsante": cliccaci sopra e disegnalo sul foglio nella posizione che vuoi
    - appena inserito ti si apre una finestra chiamata "Assegna Macro" dove hai l'elenco delle macro inserite; seleziona la macro "confronto" e premi "OK"

    Quando premi il pulsante verrà eseguita la macro "Confronto".

    Hai testato il codice nel frattempo, realizza quello che intendevi?



  • di GIUS (utente non iscritto) data: 31/10/2012 17:33:49

    io ho EXCEL ma credo che la procedura è identica, grazie



  • di GIUS (utente non iscritto) data: 31/10/2012 23:28:25

    ... volevo dire che ho excel 2010 ahahahhaha



  • di HarryBosch data: 01/11/2012 11:13:23

    Con il 2010 la procedura è la stessa; con la versione 2003 non c'è la Ribbon e cambia qualche voce del menù/barra ma la modalità rimane sempre uguale.

    Ma hai testato il codice che ti ho scritto?


  • :-(
    di GIUS (utente non iscritto) data: 01/11/2012 22:31:42

    mi dice errore di runtime 1004, credo perchè mi hai messo delle scritte in verde numerate, forse è il caso che ti alleghi i file.
    Ciao e grazie



  • di HarryBosch data: 02/11/2012 02:13:59

    Ciao Giuseppe
    non è un problema relativo alle scritte verde che sono i commenti e iniziano sempre con '.
    Probabilmente non hai modifiato il nome del file principale, ovvero quello dove hai inserito la macro.

    Ti ho messo la macro nel file-1 che hai allegato, quello che controllerà i dati nel file-2. Ho modificato parte del codice per renderlo più agibile:
    - non devi più modificare il percorso, ma basta che posizioni i due file all'interno della stessa cartella
    - il nome del file da controllare corrisponde a: "archivio fogli ICP anno 2012_2", quindi, se cambi il nome va cambiato anche nel codice
    - la colonna che viene confrontata è la C, che corrisponde alla colonna "Denominazione": se vuoi modificare la colonna di confronto, ti basta modificare una sola istruzione, ovvero la lettera della colonna dove trovi il commento:
    "colonna che viene confrontata:"
    - per attivare il confronto ho inserito un pulsante per ogni foglio; ovviamente puoi spostarlo a piacere

    Consiglio personale: utilizzi 5 campi adoperando 15 colonne; ti basta usare 5 colonne, una per ogni campo. In questo caso l'unione delle celle ha poco senso.



  • di GIUS (utente non iscritto) data: 02/11/2012 11:37:05

    ... NON SI APRE IL TUO FILE ZIPPATO BOSH, NEMMENO SUL TUO cLOUD



  • di GIUS (utente non iscritto) data: 02/11/2012 12:54:13

    .. NON SI APRE IL TUO FILE ZIPPATO BOSH, NEMMENO SUL TUO cLOUD



  • di HarryBosch data: 02/11/2012 13:25:34

    Cosa vuol dire che non si apre? E' un comunissimo archivio .rar; puoi scaricare da internet il programmino WinRAR per aprire tutti i file compressi.



  • di Gius (utente non iscritto) data: 02/11/2012 13:33:56

    C'è L'HO Gà anzi ho winzip, nomè lo stesso


  • evvaiiiiiiiiiiiiiiiiiiiiiiiii
    di GIUS (utente non iscritto) data: 04/11/2012 23:17:25

    ci voleva vinrar per forza, funziona grazie