Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro cerca valore e se trovato copia

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

Macro cerca valore e se trovato copia

Postdi Filippo1970 » 23/02/15 12:59

Buongiorno, mi presento sono Filippo e sono nuovo sul forum anche se vi leggo da un po' di tempo.
Ho il seguente problema e spero in un vostro aiuto se possibile: sul foglio1 di excel (excel 2010), colonna A ho una seria di codici di venditori (numeri di 7 cifre) e nelle colonne B,C,D altri dati.
Codice: Seleziona tutto
Sub CercaTesto()
'Dim trovato As Boolean
Dim I As Long
Dim TextToFind As String
Dim Msg As String, Stile As String, Titolo As String
Dim Response As Integer, Record As Integer
TextToFind = InputBox("Cosa vuoi cercare?")

Columns("A:A").Select
Record = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
For I = 2 To Record
Selection.Find(What:=TextToFind, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False).Activate

    Titolo = "Ricerca Record"
    Msg = "È stato trovato il Record: " & ActiveCell & " Continuare  ?"
    Stile = vbYesNo + vbCritical + vbDefaultButton2

    Response = MsgBox(Msg, Stile, Titolo)
    If Response = vbNo Then
ActiveCell.Select
End
End If
Next I
End Sub


Con la macro che ho, riesco ad inserire in una campo ricerca (Inputbox) un valore che se trovato mi chiede di andare avanti oppure no(e quindi fermare la macro).
Quello che non riesco a fare è integrare la macro dicendo che se trova il codice, copia tutta la riga corrispondente a quel codice nella prima riga libera sul foglio2.
Altro sogno sarebbe quello di non dover ogni volta inserire a mano i codici nella inputbox (circa 100 ma sempre gli stessi) ma poter dire alla macro di inziare tale procedura dal primo al 100 scorrendoli tutti.
Spero di essere stato chiaro e scusate se ho sbagliato in qualcosa.
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Sponsor
 

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 23/02/15 15:47

Ciao,
prima di tutto benvenuto nel nostro forum.


Si è scomodo dover scrivere tanti valori da cercare, per evitare questa soluzione ... la sparo (non avendo i dati e la struttura di essi):
occorre un altro ciclo For/Next che va a scorre la colonna ".." che contiene i dati da cercare" e poi passa al ciclo interno che è quello che hai che fa la ricerca e qui va integrato con "Copia/Incolla" della riga

Domanda: a copia è totale o solo dei valori?

Il codice che hai inviato è frutto tuo o di una collaborazione con i forum della rete?
La domanda serve a farci capire quanto conosci il VBA e la programmazione.

Un file di esempio senza dati riservati ma che sia esaustivo della situazione effettiva ci aiuterebbe.
Probabilmente si potrà cambiare approccio ed evitare i due cicli ma ... il file sarà utile nel farci capire come procedere.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 23/02/15 17:10

Buonasera e grazie innanzitutto dell'interessamento.
Rispondo subito alla domanda e cioè la copia della riga deve essere totale per i valori che ci sono.
Non riesco a collegarmi a servizi esterni per caricare il file excel; provo quindi a mettere un esempio che rispecchia molto la realtà
[list]TVEI cliente importo codice detr TVEI fissi da cercare su colonna A
1001890 ROSSI 2.999,00 4 -143,30 1001890
1001890 BIANCHI 379,26 4 -3,76 1020874
1001890 VERDI 2.200,00 4 -70,70 1024025
1001890 GIALLI 2.690,00 4 -110,50 1045566
1020874 ROSA 397,94 4 -3,94
1021583 BLU 749,00 4 -35,30
1021583 AZZURRI 500,00 4 0,00
1021583 PALLINI 499,00 4 0,00
1021583 STRISCE 348,00 4 -16,40
1024025 PAPERINO 545,00 7 -25,00
1024025 PLUTO 0,00 4 -15,10
1024025 MINNI 2.147,00 4 -69,10
1024447 TOPOLINO 983,80 4 -38,00
1025014 QUI 1.272,96 4 -24,96
1025261 QUO 7.153,00 4 -300,00
1038991 QUA 779,89 4 -47,20
1038991 PAPERONE 535,97 4 -42,70
1040823 GASTONE 1.340,00 4 -117,80
1040823 NONNAPA 1.040,00 4 -50,00
1042662 PAPERINA 1.676,69 4 -109,69
1045343 GAMBADIL 3.200,00 4 -200,00
1045566 FANTAST4 1.106,90 4 -42,80
1045566 IRON MAN 578,20 4 -37,90
1045566 HULK 730,00 4 -39,60
1045566 SUPERMAN 668,90 4 -38,50
1045566 BATMAN 399,99 4 -37,50
1045566 CAPAMERI 597,00 4 -39,10

Colonna A=tvei
Colonna B=cliente
Colonna C=importo
Colonna D=codice
Colonna E=detr
Colonna F=vuota
Colonna G=TVEI fissi da cercare su colonna A

Quindi per il tvei 1001890 deve essere ricopiata tutta la riga (da colonna A a colonna E per 4 volte) nella prima riga libera sul foglio2

Per quanto riguarda il codice sono abbastanza neofita su VBA e purtroppo non è frutto mio; sono comunque riuscito ad adattarlo alle mie esigenze.
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 23/02/15 17:21

Ciao,
piano piano si fa luce.

Perchè i dati da cercare sono nella colonna "G" ? Era preferibile averli in un altro foglio.
Sono solo 4?
Come vengono scritti?

Copiare per "4" volte vuol dire copiare tute le righe che hanno, in colonna "A" il codice uguale a 1001890 (in questo caso sono 4)?
1001890 ROSSI 2.999,00 4 -143,30 1001890
1001890 BIANCHI 379,26 4 -3,76 1020874
1001890 VERDI 2.200,00 4 -70,70 1024025
1001890 GIALLI 2.690,00 4 -110,50 1045566

Per il codice 1024025 vanno copiate tre righe ? Le seguenti?
1024025 PAPERINO 545,00 7 -25,00
1024025 PLUTO 0,00 4 -15,10
1024025 MINNI 2.147,00 4 -69,10

Per il codice 1045566 vanno copiate sei righe ? Le seguenti?
1045566 FANTAST4 1.106,90 4 -42,80
1045566 IRON MAN 578,20 4 -37,90
1045566 HULK 730,00 4 -39,60
1045566 SUPERMAN 668,90 4 -38,50
1045566 BATMAN 399,99 4 -37,50
1045566 CAPAMERI 597,00 4 -39,10
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 23/02/15 17:32

Ciao, rispondo molto volentieri alle tue domande:

I dati sono nella colonna G per comodità (possono essere messi anche da altre parti)
Non capisco la domanda "sono solo 4"; se ti riferisci al numero dei tvei da cercare sono circa 100

"Copiare per "4" volte vuol dire copiare tute le righe che hanno, in colonna "A" il codice uguale a 1001890 (in questo caso sono 4)?
1001890 ROSSI 2.999,00 4 -143,30 1001890
1001890 BIANCHI 379,26 4 -3,76 1020874
1001890 VERDI 2.200,00 4 -70,70 1024025
1001890 GIALLI 2.690,00 4 -110,50 1045566"
Si esatto

"Per il codice 1024025 vanno copiate tre righe ? Le seguenti?
1024025 PAPERINO 545,00 7 -25,00
1024025 PLUTO 0,00 4 -15,10
1024025 MINNI 2.147,00 4 -69,10"
Si esatto

"Per il codice 1045566 vanno copiate sei righe ? Le seguenti?
1045566 FANTAST4 1.106,90 4 -42,80
1045566 IRON MAN 578,20 4 -37,90
1045566 HULK 730,00 4 -39,60
1045566 SUPERMAN 668,90 4 -38,50
1045566 BATMAN 399,99 4 -37,50
1045566 CAPAMERI 597,00 4 -39,10"
Si esatto

Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 23/02/15 17:42

Ciao,
bene, penso di aver capito.
Puoi inviare un file di esempio, tramite il servizio File Dropper è una sicurezza per non produrre del codice che poi dovrà essere rimaneggiato ...


Mettiamo i dati da copiare in un altro foglio: è preferibile per pulizia.

Confermi che i dati vanno copiati, nel foglio 2, accodandoli a quelli eventualmente esistenti ?

Ci provo a scrivere del codice .. intanto invia, se puoi, il file di esempio.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 23/02/15 18:16

Ciao,
ci provo e speriamo bene:
Codice: Seleziona tutto
Option Explicit

Sub Copia_Dati_TVEI()
    Dim K As Long, WS1 As Worksheet, WS2 As Worksheet, WS3 As Worksheet, UR1 As Long, UR2 As Long, UR3 As Long
   
    Set WS1 = Sheets("Foglio1")
    Set WS2 = Sheets("Foglio2")
    Set WS3 = Sheets("Foglio3")
   
    UR3 = WS3.Range("A" & Rows.Count).End(xlUp).Row
    If UR3 = 1 Then
        MsgBox "Non sono stati inseriti TVEI da copiare. L'elaborazione viene interrotta", vbCritical
        Exit Sub
    End If
   
    Application.ScreenUpdating = False
    WS1.Select
    WS1.Range("A1").Select
    For K = 2 To UR3
        Selection.AutoFilter
        Selection.AutoFilter Field:=1, Criteria1:="<>"
        ActiveSheet.ShowAllData
        Selection.AutoFilter Field:=1, Criteria1:=WS3.Cells(K, 1)
        UR1 = WS1.Range("A" & Rows.Count).End(xlUp).Row + 1
        UR2 = WS2.Range("A" & Rows.Count).End(xlUp).Row + 1
        If UR2 = 2 And WS2.Range("A1") = "" Then
            WS1.Range("A1:E1").Copy Destination:=WS2.Range("A1")
        End If
        WS1.Range("A2:E" & UR1).Copy Destination:=WS2.Range("A" & UR2)
        Application.CutCopyMode = False
    Next K
    ActiveSheet.ShowAllData
    Application.ScreenUpdating = True
    MsgBox "Copia dei TVEI effettuata", vbInformation
End Sub


Nel Foglio1 hai i dati da copiare (colonne "A.E")
Nel Foglio2 verranno accodati i dati (colonne "A.E")
Nel Foglio3 in colonna "A" hai i codici che vuoi siano copiati

Prova e ... sono QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 23/02/15 23:22

Buonasera ricky 53 e direi di si funziona!!!!!
Domani quando arrivo in ufficio provo subito con il file originale e ti faccio sapere ma direi che funziona benissimo :lol: :lol:
Grazie per ora domani ti scrivo.
Saluti
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 24/02/15 12:05

Buongiorno ricky,
purtroppo ho provato fino ad ora ma la macro non funziona correttamente.
Praticamente nel file di esempio che ho provato ieri sera non dava nessun problema e funziona alla perfezione.
Sul file originale ho riscontrato dei problemi e ci sto lavorando; ti faccio sapere appena posso rimetterci le mani
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 24/02/15 13:05

Ciao,
cosa non va?
Cosa produce come risultato?
Sicuramente i dati reali sono organizzati in modo diverso rispetto a quelli che hai inserito come esempio.

Invia un file con dati reali ma senza dati riservati e risolveremo presto.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 24/02/15 15:25

Ciao Ricky, non riesco a venirne a capo. Praticamente copia tutto sul foglio 2 senza fare la ricerca dei tvei che voglio sul foglio 3.
Posso mandarti una mail con il file excel? Se si a quale indirizzo?
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 24/02/15 16:00

Ciao,
è preferibile allegare il file qui per renderlo disponibile a tutti gli utenti, per farlo utilizza FILE DROPPER
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 24/02/15 16:06

Purtroppo qui dall'ufficio mi è inibito dal mio IT; proverò stasera casomai
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi ricky53 » 24/02/15 16:15

Ciao,
hai DropBox? In caso caricalo, condividilo ed invia il link.


Attenzione ai dati riservati che hai nel tuo file: CAMBIALI !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 24/02/15 17:19

Ok provo stasera da casa grazie perché anche dropbox non mi funziona da qui
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 24/02/15 22:40

Buonasera
sono riuscito a fare i link spero funzionino
https://www.dropbox.com/s/t7vjqdqza2jzh ... .xlsm?dl=0

https://www.dropbox.com/s/6emft1cy513wi ... .xlsm?dl=0

Spero che si riescano a scaricare

Saluti e grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi Flash30005 » 25/02/15 02:55

Prova questa macro

Codice: Seleziona tutto
Sub RiportaRigheSe()
Application.ScreenUpdating = False
Dim Uno As Worksheet, Due As Worksheet, Tre As Worksheet
Dim UR1 As Long, UR2 As Long, UR3 As Long, RR1 As Long, RR2 As Long, RR3 As Long
Dim TVEI1 As Long, TVEI3 As Long
Set Uno = Worksheets("Foglio1")
Set Due = Worksheets("Foglio2")
Set Tre = Worksheets("Foglio3")
Due.Cells.Clear
Uno.Rows(1).Copy Destination:=Due.Rows(1)
UR3 = Tre.Range("A" & Rows.Count).End(xlUp).Row
UR1 = Uno.Range("A" & Rows.Count).End(xlUp).Row
For RR3 = 2 To UR3
    TVEI3 = Tre.Range("A" & RR3).Value
    For RR1 = 2 To UR1
        TVEI1 = Uno.Range("A" & RR1).Value
        If TVEI1 = TVEI3 Then
        UR2 = Due.Range("A" & Rows.Count).End(xlUp).Row + 1
            Uno.Rows(RR1).Copy Destination:=Due.Rows(UR2)
        End If
    Next RR1
Next RR3
Application.ScreenUpdating = True
End Sub


Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro cerca valore e se trovato copia

Postdi Flash30005 » 25/02/15 04:22

Se invece vuoi selezionare il codice da un textbox di una userform, essendo un po' più complicato da spiegare,
ti invio un file come test
download file

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Macro cerca valore e se trovato copia

Postdi Filippo1970 » 25/02/15 10:00

Buongiorno Flash3005 e grazie del tuo aiuto.
Ho provato subito il codice ma mi da un errore
Codice: Seleziona tutto
Sub RiportaRigheSe()
Application.ScreenUpdating = False
Dim Uno As Worksheet, Due As Worksheet, Tre As Worksheet
Dim UR1 As Long, UR2 As Long, UR3 As Long, RR1 As Long, RR2 As Long, RR3 As Long
Dim TVEI1 As Long, TVEI3 As Long
Set Uno = Worksheets("Foglio1")
Set Due = Worksheets("Foglio2")
Set Tre = Worksheets("Foglio3")
Due.Cells.Clear
Uno.Rows(1).Copy Destination:=Due.Rows(1)
UR3 = Tre.Range("A" & Rows.Count).End(xlUp).Row
UR1 = Uno.Range("A" & Rows.Count).End(xlUp).Row
For RR3 = 2 To UR3
    TVEI3 = Tre.Range("A" & RR3).Value
    For RR1 = 2 To UR1
          TVEI1 = Uno.Range("A" & RR1).Value[/color]
          If TVEI1 = TVEI3 Then
          UR2 = Due.Range("A" & Rows.Count).End(xlUp).Row + 1
            Uno.Rows(RR1).Copy Destination:=Due.Rows(UR2)
        End If
    Next RR1
Next RR3
Application.ScreenUpdating = True
End Sub


La descrizione che viene fuori dal messaggio di VBA è:
"errore di run-time 13:
Tipo non corrispondente"

Ho controllato ma i campi mi sembrano perfettamente uguali nel formato e nello stile; non so cosa dire.
Grazie
Filippo1970
Utente Junior
 
Post: 14
Iscritto il: 23/02/15 12:36

Re: Macro cerca valore e se trovato copia

Postdi Flash30005 » 25/02/15 10:13

In quale riga codice dà quell'errore?

hai provato il fil allegato nel post successivo a quello della macro?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Macro cerca valore e se trovato copia":


Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti