Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

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

VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 24/03/20 17:45

Buongiorno
Ho la necessità di copiare dal foglio Master tutte le righe che, nella cella della colonna G, contengono parte del testo presente nella TextBoxnome, e accodarle nel foglio Controllo.
Ho creato una macro, ma non mi funziona:

Codice: Seleziona tutto
Sub copia()
Dim sh1 As Worksheet, sh2 As Worksheet
Dim ur As Long, ur2 As Long
Dim x As Integer
Dim y As Long
Application.ScreenUpdating = False
Set sh1 = Worksheets("Master")
Set sh2 = Worksheets("Controllo")
    With sh1
    ur = .Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row
    x = sh2.Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row
        For y = 1 To ur
            If UserForm1.TextBoxnome.Text Like "*" & .Cells(y, 7) & "*" Then
               .Range("A" & y & ":" & "AE" & y).Copy
               sh2.Range("A" & x & ":" & "AE" & x).PasteSpecial Paste:=xlValues
            End If
        Next
    End With
Application.CutCopyMode = False
Application.ScreenUpdating = True
Set sh1 = Nothing
Set sh2 = Nothing
End Sub


Qualcuno sa dirmi dove sto sbagliando?
Grazie
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59

Sponsor
 

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi Marius44 » 24/03/20 20:25

Ciao
cosa vuol dire "non mi funziona"?
Si blocca? Quale è il messaggio? quale è la riga di codice che ti evidenzia?
Forse non ti funziona perchè ti riporta solo una riga?

Spiega meglio quale è l'errore e, ancora meglio, allega il file (senza dati sensibili)

Ciao,
Mario
Marius44
Utente Senior
 
Post: 503
Iscritto il: 07/09/15 22:00

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi Anthony47 » 25/03/20 00:05

Continui a scrivere tutti i valori sulla riga x....
Intervieni su questo blocco:
Codice: Seleziona tutto
            If UserForm1.TextBoxnome.Text Like "*" & .Cells(y, 7) & "*" Then
               .Range("A" & y & ":" & "AE" & y).Copy
               sh2.Range("A" & x).PasteSpecial Paste:=xlValues   
               x = x + 1                               '+++ AGGIUNTA
            End If
Vedi la riga marcata +++

Fai sapere...
Avatar utente
Anthony47
Moderatore
 
Post: 17054
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 25/03/20 12:22

Ciao
La macro cosi come è, non riporta nessun dato nel foglio Controllo (ne se inserisco nella testbox una parte del testo, o il testo intero della ricerca), e non da nessun errore.
Allego un file di prova che ho creato eliminando i dati sensibili.
Il testo da inserire nella testbox, sono quelli della colonna G
http://www.filedropper.com/prova1
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi Anthony47 » 25/03/20 14:06

Codice: Seleziona tutto
ur = .Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row

Nel calcolo di UR, quale era il motivo dell'inserimento del doppio End(xlUp)

Inoltre l'operatore LIKE cerca in una Stringa una particolare Sequenza (non viceversa); inoltre e' "sensibile al maiuscolo"
Avrei quindi modificato come segue:
Codice: Seleziona tutto
Set sh1 = Worksheets("Master")
Set sh2 = Worksheets("Controllo")
    With sh1
    ur = .Cells(Rows.Count, 7).End(xlUp).Row                  'MMMM
    x = sh2.Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row
        For y = 1 To ur
            If .Cells(y, 7) Like "*" & UCase(UserForm1.TextBoxnome.Text) & "*" Then       'MMM
               .Range("A" & y & ":" & "AE" & y).Copy
               sh2.Range("A" & x & ":" & "AE" & x).PasteSpecial Paste:=xlValues
               x = x + 1
            End If
        Next
    End With
Application.CutCopyMode = False

(vedi le righe marcate MMM)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17054
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 25/03/20 14:42

Ciao Anthony
Il doppio End(xlUp) è un mio errore di scrittura. Per quanto riguarda l'operatore LIKE, temevo fosse il problema (purtroppo fa parte delle mie grosse lacune, ma a forza di batterci il naso, e soprattutto, grazie al vostro sempre prezioso aiuto, spero di sopperire alla mia scarsa conoscenza del VBA).
Ora finalmente funziona come volevo, grazie
Dovesse servire a qualcuno, ho fatto una leggera modifica:

x = sh2.Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row

l'ho modificato in:

x = sh2.Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row + 1

In questo modo aggiungendo una nuova richiesta, non va a sovrascrivere l'ultima riga inserita nel foglio Controllo.

Grazie ancora, e buona giornata a tutti
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi Anthony47 » 25/03/20 15:33

l'ho modificato in:
Codice: Seleziona tutto
x = sh2.Cells(Rows.Count, 7).End(xlUp).End(xlUp).Row + 1
E' un errore di battitura, vero??
Avatar utente
Anthony47
Moderatore
 
Post: 17054
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 25/03/20 20:27

Ciao
Si ho ripetuto lo stesso errore, oggi non ci sono con la testa :(

La modifica corretta:

x = sh2.Cells(Rows.Count, 7).End(xlUp).Row + 1

Scusate

Buona serata
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 26/03/20 11:55

Buongiorno
Una cosa che mi sono dimenticato di chiedere ieri.
Ce la possibilità di sapere quante righe vengono copiate ogni volta?
grazie
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi Anthony47 » 26/03/20 12:19

Si, basta contarle...
Aggiungi il contatore:
Codice: Seleziona tutto
               sh2.Range("A" & x & ":" & "AE" & x).PasteSpecial Paste:=xlValues
               x = x + 1
               deX = deX + 1            '+++ Contatore
            End If

In testa avrai dichiarato
Codice: Seleziona tutto
Dim deX As Long


In fondo aggiungi un msgbox:
Codice: Seleziona tutto
MsgBox ("Righe copiate: " & deX)


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17054
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO

Postdi macio66 » 26/03/20 14:35

Ciao Anthony
E perfetto, per me un altro mattoncino di apprendimento aggiunto.

Ti ringrazio, buona giornata
macio66
Utente Senior
 
Post: 126
Iscritto il: 13/06/13 14:59


Torna a Applicazioni Office Windows


Topic correlati a "VBA EXCEL COPIARE RIGHE CHE SODDISFANO UN REQUISITO":


Chi c’è in linea

Visitano il forum: Nessuno e 14 ospiti