Risultati da 1 a 5 di 5

Discussione: Far ciclare una macro per confronto dati tra fogli diversi



  1. #1
    L'avatar di Celeno
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Ancona
    Messaggi
    9
    Versione Office
    Excel 2007
    Likes ricevuti
    0
    Likes dati
    0

    Far ciclare una macro per confronto dati tra fogli diversi

    Buonasera a tutti,

    eccomi di nuovo qui a chiedere aiuto a Voi esperti.

    La situazione è la seguente:

    ho una registrato un macro che riga per riga va a confrontare dei dati tra due fogli per crearne un terzo aggiornato; il problema è che non riesco a farla ciclare.

    Ho provato con For Each...Next, ma senza successo.

    Il testo della macro è il seguente:

    Sub AggGB()
    '
    ' Aggiorna la Griglia Base in GBA
    '
    '
    If Range("G2").Value > 0 Then
    Sheets("Griglia BASE").Select
    Range("A1").Select
    ActiveCell.Offset(1, 0).Range("A1:D1").Select
    Selection.Copy
    Sheets("Griglia Base Agg").Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 4).Range("A1").Select
    Sheets("Riep. Stock AGG").Select
    Range("A1").Select
    ActiveCell.Offset(1, 4).Range("A1").Select
    Selection.Copy
    ActiveCell.Offset(0, -4).Range("A1").Select
    Sheets("Griglia Base Agg").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 1).Range("A1").Select
    Sheets("Griglia BASE").Select
    ActiveCell.Offset(0, 5).Range("A1").Select
    Selection.Copy
    Sheets("Griglia Base Agg").Select
    ActiveSheet.Paste
    ActiveCell.Offset(0, -5).Range("A1").Select
    Application.CutCopyMode = False
    Sheets("Griglia BASE").Select
    ActiveCell.Offset(0, -5).Range("A1").Select
    Else
    Sheets("Riep. Stock AGG").Select
    Range("A1").Select
    ActiveCell.Offset(1, 0).Range("A1:E1").Select
    Selection.Copy
    Sheets("Griglia Base Agg").Select
    ActiveCell.Offset(1, 0).Range("A1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    ActiveCell.Offset(0, 4).Range("A1").Select
    ActiveCell.Offset(0, 1).Range("A1").Select
    ActiveCell.FormulaR1C1 = "NEW"
    ActiveCell.Select
    With Selection
    .HorizontalAlignment = xlCenter
    .VerticalAlignment = xlBottom
    .WrapText = False
    .Orientation = 0
    .AddIndent = False
    .IndentLevel = 0
    .ShrinkToFit = False
    .ReadingOrder = xlContext
    .MergeCells = False
    End With
    ActiveCell.Offset(0, -5).Range("A1").Select

    End If



    End Sub

    Questa macro agisce su una singola riga alla volta; vorrei riuscire a farla lavorare su tutte le righe della colonna G del foglio Riep. Stock Agg. contenenti un dato.

    Vi allego qui il file sul quale sto lavorando.

    Grazie per l'attenzione ragazzi.

    Celeno

  2. #2

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923
    Ciao Celeno,
    riferendoti al foglio che hai allegato, mi puoi spiegare esattamente qual'è lo scopo?

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  3. #3
    L'avatar di Celeno
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Ancona
    Messaggi
    9
    Versione Office
    Excel 2007
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Ciao Celeno,
    riferendoti al foglio che hai allegato, mi puoi spiegare esattamente qual'è lo scopo?
    Ciao cromagno,

    provo a spiegarmi meglio:

    - ho un magazzino (che è il foglio Riep. Stock Agg)

    - un'esposione di prodotti

    Il foglio Griglia Base è quello in cui io vado a speficare quali prodotti del magazzino (Riep. Stock Agg.) siano esposti o meno.

    Quando vendo un prodotto esposto devo sapere cosa ho di non esposto in magazzino così da riempire il vuoto in esposizione.

    Lo scopo del file è quello di confrontare la Griglia espositiva (Griglia Base) con lo stock di magazzino che varia quotidianamente (Riep. Stock Agg.); le differenze tra i due sono le mie novità e quindi prodotti che gioco forza ancora non sono in esposizione. Tali prodotti devono essere aggiunti alla griglia base aggiornata ed evienziati come nuovi; questo avviene nel foglio Griglia Base Aggiornata.

    La macro dovrebbe confrontare il magazzino (Riep. Stock Agg.) con l'esposizione (Griglia Base); se un prodotto è presente nel foglio Riep. Stock Agg. E nel foglio Griglia Base allora va ricopiato pari pari nel foglio Griglia Base Aggiornato.

    Se, invece, una riga è presente in Riep. Stock Agg. e NON in Griglia Base, allora va copiato in Griglia Base Aggiornato ed evidenziato come NUOVO.

    Infine, ciò che è presente in Griglia Base e non in Riep. Stock Agg. non mi interessa perchè vuol dire che è stato venduto.

    Il flusso di lavoro della macro infatti è; RSA-->GB--->GBA

    Grazie

    Celeno

  4. #4

    L'avatar di cromagno
    Clicca e Apri
    Data Registrazione
    Aug 2015
    Località
    Sardegna
    Età
    37
    Messaggi
    4016
    Versione Office
    2013
    Likes ricevuti
    1225
    Likes dati
    923
    Ciao Celeno,
    controlla il file allegato per vedere se ho capito bene:
    http://dropcanvas.com/m6yyv

    La macro l'ho scritta nel modulo 9 (gli altri moduli li ho lasciati perchè non capivo se servivano o meno)...

    Codice: 
    Option Explicit
    Sub grid_update()
    Dim i As Long, uriga1 As Long, uriga2 As Long, base As Worksheet
    Dim magazzino As Worksheet, aggiornata As Worksheet, j As Long, uriganew As Long
    Dim campo As Range, n As Variant
    
    
    Set base = Worksheets("Griglia BASE")
    Set magazzino = Worksheets("Riep. Stock AGG")
    Set aggiornata = Worksheets("Griglia Base Agg")
    uriga1 = base.Range("A1").End(xlDown).Row
    uriga2 = magazzino.Range("A1").End(xlDown).Row
    uriganew = aggiornata.Range("A1").End(xlDown).Row
    Set campo = aggiornata.Range("A2:G" & uriganew)
    campo.ClearContents
    For i = 2 To uriga2
        For j = 1 To 6
            aggiornata.Cells(i, j).Value = magazzino.Cells(i, j).Value
        Next j
    Next i
    For i = 2 To uriga2
        With base.Range("B2:B" & uriga1)
            Set n = .Find(aggiornata.Cells(i, 2).Value, LookIn:=xlValues)
            If n Is Nothing Then
                aggiornata.Range("G" & i).Value = "New"
            End If
        End With
    Next i
    Set base = Nothing
    Set magazzino = Nothing
    Set aggiornata = Nothing
    End Sub
    [EDIT]
    Nel file mi sono dimenticato di mettere le tre righe finali nel codice (quelle evidenziate di rosso nel codice sopra).

    "Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare."

  5. #5
    L'avatar di Celeno
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Ancona
    Messaggi
    9
    Versione Office
    Excel 2007
    Likes ricevuti
    0
    Likes dati
    0
    Citazione Originariamente Scritto da cromagno Visualizza Messaggio
    Ciao Celeno,
    controlla il file allegato per vedere se ho capito bene:
    http://dropcanvas.com/m6yyv

    La macro l'ho scritta nel modulo 9 (gli altri moduli li ho lasciati perchè non capivo se servivano o meno)...

    Codice: 
    Option Explicit
    Sub grid_update()
    Dim i As Long, uriga1 As Long, uriga2 As Long, base As Worksheet
    Dim magazzino As Worksheet, aggiornata As Worksheet, j As Long, uriganew As Long
    Dim campo As Range, n As Variant
    
    
    Set base = Worksheets("Griglia BASE")
    Set magazzino = Worksheets("Riep. Stock AGG")
    Set aggiornata = Worksheets("Griglia Base Agg")
    uriga1 = base.Range("A1").End(xlDown).Row
    uriga2 = magazzino.Range("A1").End(xlDown).Row
    uriganew = aggiornata.Range("A1").End(xlDown).Row
    Set campo = aggiornata.Range("A2:G" & uriganew)
    campo.ClearContents
    For i = 2 To uriga2
        For j = 1 To 6
            aggiornata.Cells(i, j).Value = magazzino.Cells(i, j).Value
        Next j
    Next i
    For i = 2 To uriga2
        With base.Range("B2:B" & uriga1)
            Set n = .Find(aggiornata.Cells(i, 2).Value, LookIn:=xlValues)
            If n Is Nothing Then
                aggiornata.Range("G" & i).Value = "New"
            End If
        End With
    Next i
    Set base = Nothing
    Set magazzino = Nothing
    Set aggiornata = Nothing
    End Sub
    [EDIT]
    Nel file mi sono dimenticato di mettere le tre righe finali nel codice (quelle evidenziate di rosso nel codice sopra).

    Fantastico!! Grazie mille sei veramenete bravo!!

    Funziona alla grande e senza tutti gli sbattiementi che mi ero inventato:97:!!

    Ora però devo far sì che riporti anche lo stato espositivo oltre alla giacenza; ora ci smanetto un po' e vi aggiorno.

    Grazie ancora.

    Celeno

Discussioni Simili

  1. Aggregare dati da fogli diversi
    Di Andrea19 nel forum Domande su Excel in generale
    Risposte: 3
    Ultimo Messaggio: 19/02/17, 16:40
  2. Riepilogo dati da fogli excel diversi
    Di desci80 nel forum Domande su Excel in generale
    Risposte: 6
    Ultimo Messaggio: 23/01/17, 19:47
  3. [Risolto] Accodare dati diversi da più fogli in più file
    Di aribuz nel forum Domande su Excel VBA e MACRO
    Risposte: 13
    Ultimo Messaggio: 20/10/16, 09:05
  4. computo xls e richiamo dati da fogli diversi
    Di Piove nel forum Domande su Excel in generale
    Risposte: 2
    Ultimo Messaggio: 20/09/16, 15:11
  5. Convalida dati da due fogli diversi
    Di Vincenzo Damiani nel forum Domande su Excel in generale
    Risposte: 10
    Ultimo Messaggio: 05/09/15, 10:16

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •