Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 9 su 9

Confronta valori e aggiorna dato

  1. #1
    MoBo non è in linea Novello
    Post
    41
    Like Inviati  
    0
    Like Ricevuti  
    0
    Buongiorno a tutti,
    ho tentato di creare una macro , ma rilascia errore.

    Ho un file excel, composto da due fogli: "File Origine" e "DATABASE"
    Le colonne dei due fogli sono identiche per numero ed intestazione. ( in totale 6 colonne)

    Nella colonna E ho un numero identificativo cliente. Nella colonna D ho dei numeri che indicano i giorni trascorsi.

    La macro dovrebbe confrontare il valore della colonna E di ciascuna riga del foglio "File Origine" con il valore della colonna E di ciascuna riga del foglio "DATABASE".
    Quando il valore è uguale,ovvero, quando trova lo stesso cliente, la macro dovrebbe copiare il valore numerico della cella D corrispondente del cliente dal "File Origine" alla cella D dello stesso cliente nel file "DATABASE".

    Non funziona e mi rilascia errore sul Range dell'If Nonesiste.
    Grazie a tutti per l'eventuale aiuto.

    [Sub Aggiorna()
    
     Dim Sh1 As Worksheet, Sh2 As Worksheet, Sh3 As Worksheet, Sh4 As Worksheet
        Dim Area1 As Range, Area2 As Range, Cella As Range, Valore As String, Nonesiste
        Dim R3 As Long, R4 As Long, Riga As Long
       
        Set Sh1 = Worksheets("File Origine")
        Set Sh2 = Worksheets("DATABASE")
    
        Set Area1 = Sh1.[E3:E5000]
        Set Area2 = Sh2.[E3:E5000]
    
        R3 = 3
        R4 = 3
        Riga = 3
    
        Sh1.Select
        For Each Cella In Area1
        Valore = Cella
        Set Nonesiste = Area2.Find(Valore, LookIn:=xlValues, LookAt:=xlWhole)
        If Nonesiste Is Nothing Then
        Sh1.Range (Sh1.Cells(Riga, 5))
        Cella.Interior.ColorIndex = 3
        Else
        Sh1.Range(Sh1.Cells(Riga, 4)).Copy Destination:=Sh4.Cells(Riga, 1)
                
        End If
    
        Next
    
        MsgBox "Elaborazione conclusa"
        Set Sh1 = Nothing
        Set Sh2 = Nothing
        Set Area1 = Nothing
        Set Area2 = Nothing
        
    End Sub]
    
    Ultima modifica di AntonioG; 28-01-2015 12:25  Motivo: Usa i tag code per il codice e leggi il regolamento, grazie

  2. #2
    ricky53 non è in linea Scribacchino
    Post
    1,023
    Like Inviati  
    0
    Like Ricevuti  
    0
    Che errore ottieni?
    ℹ️ Leggi di più su ricky53 ...

  3. #3
    MoBo non è in linea Novello
    Post
    41
    Like Inviati  
    0
    Like Ricevuti  
    0
    Compile error: Invalid Use of property.

    Evidenzia la parte: [.Range] all'interno della stringa [Sh1.Range (Sh1.Cells(Riga, 5))]

    Grazie molte

  4. #4
    ricky53 non è in linea Scribacchino
    Post
    1,023
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao,
    si lo avevo visto prima ma ero con il cell. e mi era difficle scriverlo.

    Manca un punto tra la "Sh1.Range (Sh1.Cells(Riga, 5))" e "Cella.Interior.ColorIndex = 3"
    le due parti di istruzione NON devono essere scritte su due righe ma vanno scritte unite dal "." e devono stare su una sola riga.
    ℹ️ Leggi di più su ricky53 ...

  5. #5
    MoBo non è in linea Novello
    Post
    41
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao,
    ho rifatto l'intero codice, poichè avevo anche notato un errore.
    Ma ancora non va.

    [Sub Aggiorna()

    Dim Sh1 As Worksheet, Sh2 As Worksheet, Cella As Range
    Dim Area1 As Range, Area2 As Range, Cells As Range, Valore As String, Nonesiste
    Dim Riga As Long

    Set Sh1 = Worksheets("File Origine")
    Set Sh2 = Worksheets("DATABASE")

    Set Area1 = Sh1.[E3:E5000]
    Set Area2 = Sh2.[E3:E5000]

    Sh1.Select
    For Each Cella In Area1
    Valore = Cella
    Set Nonesiste = Area2.Find(Valore, LookIn:=xlValues, LookAt:=xlWhole)
    If Nonesiste Is Nothing Then
    Sh1.Range(Sh1.Cells(Riga, 5)).Cella.Interior.ColorIndex = 3
    Else
    Sh1.Range(Sh1.Cells(Riga, 4)).Copy Destination:=Sh2.Cells(Riga, 1)

    End If
    Next

    MsgBox "Elaborazione conclusa"
    Set Sh1 = Nothing
    Set Sh2 = Nothing
    Set Area1 = Nothing
    Set Area2 = Nothing

    End Sub]

    rilascia errore: Application-defined or object-defined error
    evidenziando la stringa [Sh1.Range(Sh1.Cells(Riga, 4)).Copy Destination:=Sh2.Cells(Riga, 1)]

    Grazie molte

  6. #6
    PaoloTalini non è in linea Scribacchino
    Post
    861
    Like Inviati  
    0
    Like Ricevuti  
    0
    MoBo;

    Si rilevano alcuni errori.
    1) Dichiari, e usi, la variabile [Rigo] , ma non la qualifichi
    2) Tenti di fare una copia usando un [Set] non appropriato.
    3) La lettura del codice è poco leggibile. La nidificazione/intaccatura è sempre d’aiuto per la gestione e la correzione.


    Ti consiglio, come scritto da : AntonioG, di Usa i tag code per il codice e di leggere il regolamento.

    Prova questa soluzione:
    Sub Aggiorna2()
        Dim Sh1 As Worksheet, Sh2 As Worksheet, Cella As Range
        Dim Area1 As Range, Area2 As Range, Cells As Range, Valore As String, Nonesiste As Variant
        Dim Riga As Long
        
        Set Sh1 = Worksheets("File Origine")
        Set Sh2 = Worksheets("DATABASE")
        
        Set Area1 = Sh1.[E3:E5000]
        Set Area2 = Sh2.[E3:E5000]
        
        For Each Cella In Area1 '"File Origine"
            Valore = Cella
            Riga = Cella.Row
            Set Nonesiste = Area2.Find(Valore, LookIn:=xlValues, LookAt:=xlWhole)
            
            If Nonesiste Is Nothing Then
                Area1.Cells(Riga, 5).Interior.ColorIndex = 3
            Else
                Area1.Cells(Riga, 4).Copy Destination:=Area2.Cells(Riga, 1)
            End If
        Next
        MsgBox "Elaborazione conclusa"
        Set Sh1 = Nothing
        Set Sh2 = Nothing
        Set Area1 = Nothing
        Set Area2 = Nothing
    End Sub
    
    PS.
    Non è chiaro quale colonna vuoi copiare e quale evidenziare.
    Il codice proposto copia la colonna [H] e evidenzia la colonna [I],
    può essere eseguito da una qualsiasi scheda.

    Modificalo per le tue esigenze.
    ℹ️ Leggi di più su PaoloTalini ...

  7. #7
    L'avatar di scossa
    scossa non è in linea Scolaretto
    Post
    183
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da MoBo Visualizza il messaggio
    rilascia errore: Application-defined or object-defined error
    evidenziando la stringa [Sh1.Range(Sh1.Cells(Riga, 4)).Copy Destination:=Sh2.Cells(Riga, 1)]
    Al di là di tutte le corrette osservazioni già fatte sul tuo codice, l'errore segnalato nasce perché non puoi usare Range indicando una sola cella come argomento:
    Quindi o scrivi (orribile):
    Sh1.Range(Sh1.Cells(Riga, 4), Sh1.Cells(Riga, 4)).Copy Destination:=Sh2.Cells(Riga, 1)
    
    oppure (pure orribile):
    Sh1.Range(Sh1.Cells(Riga, 4).Address).Copy Destination:=Sh2.Cells(Riga, 1)
    
    oppure
    Sh1.Cells(Riga, 4).Copy Destination:=Sh2.Cells(Riga, 1)
    
    ℹ️ Leggi di più su scossa ...

  8. #8
    MoBo non è in linea Novello
    Post
    41
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ciao,
    intanto Grazie a tutti per i vostri aiuti.
    Ho notato, in effetti, tutti gli errori indicati e li ho corretti.
    Compresa anche la brutalità di scrittura di alcuni codici

    Purtroppo non mi funziona ancora, ma credo che questa volta il problema sia il conteggio delle colonne.
    In effetti, come indicato da Paolo, la macro colorava la colonna [H] ed evidenziava la colonna [I], poichè l'Area parte dalla colonna [E].
    In realtà, il dato da copiare si trova nella colonna prima, ovvero la colonna [D] e dovrebbe colorare la colonna [E] stessa.
    Se metto [0] per la colorazione e [-1] per il copiare, mi rilascia errore nel codice relativo alla copia.

    codice HTML:
    Sh1.Cells(Riga, 0).Cella.Interior.ColorIndex = 3
    Else
    Sh1.Cells(Riga, -1).Copy Destination:=Sh2.Cells(Riga, -1)
    Grazie ancora

  9. #9
    L'avatar di scossa
    scossa non è in linea Scolaretto
    Post
    183
    Like Inviati  
    0
    Like Ricevuti  
    0
    Quote Originariamente inviato da MoBo Visualizza il messaggio
    Se metto [0] per la colorazione e [-1] per il copiare, mi rilascia errore nel codice relativo alla copia.

    codice HTML:
    Sh1.Cells(Riga, 0).Cella.Interior.ColorIndex = 3
    Else
    Sh1.Cells(Riga, -1).Copy Destination:=Sh2.Cells(Riga, -1)
    Grazie ancora
    Mi sembra ci sia un po' di confusione.

    La proprietà Cells applicata a Sh1 restituisce il range di tutte le celle del foglio Sh1, quindi da A1 (riga 1, colonna 1) a
    XFD1048576 (riga 1048576, colonna 16384) - sto parlando di Excel 2010.

    La sintassi Sh1.Cells(riga, colonna) (abbreviazione di Sh1.Cells.Item(riga, colonna)) serve a riferirsi ad una specifica cella specificandone gli indici di riga e colonna, che non possono essere minori di 1.

    Quindi è ovvio che Sh1.Cells(Riga, 0) ti restituisca errore: a quale cella dovrebbe riferirsi, visto che la colonna 0 non esiste (tanto meno la -1)?
    Ultima modifica di scossa; 30-01-2015 12:20 
    ℹ️ Leggi di più su scossa ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. valori e funzione che si aggiorna Lcalc
    Da rhobs nel forum LibreOffice, OpenOffice e altro
    Risposte: 0
    Ultimo Post: 30-05-2020, 12:44
  2. Incompatibilità tra dato tipo testo di una cella e dato tipo string
    Da saveriomartino nel forum Microsoft Excel
    Risposte: 10
    Ultimo Post: 16-07-2015, 18:50
  3. Risposte: 1
    Ultimo Post: 18-04-2011, 12:47
  4. Risposte: 2
    Ultimo Post: 02-01-2009, 00:15
  5. confronta nomi
    Da dolcissimo nel forum Microsoft Word
    Risposte: 13
    Ultimo Post: 01-10-2005, 16:53