cerca utente



  • cerca utente
    di steto69 data: 15/07/2016 18:44:17

    salve,
    ho un archivio in excel dove sono contenute delle informazioni sui clienti.
    prima colonna nomi, seconda indirizzi, ecc.

    Vorrei avere una macro che legge un nome, in un altro foglio dello stesso file es: foglio2, cella a1.
    Se trova il cliente, mi riporta le informazioni contenute nel record nel foglio 2, riga3.

    Spero di essere stato chiaro.



  • di Santuberto (utente non iscritto) data: 15/07/2016 18:59:55

    Buongiorno. Perché una macro? Non basta un semplice cerca.vert?



  • di patel data: 15/07/2016 19:05:05

    giusto, se non riesci allega un file di esempio





  • di Thyke data: 15/07/2016 20:30:48

    leggendo...

    "Vorrei avere una macro che legge un nome, in un altro foglio dello stesso file es: foglio2, cella a1.
    Se trova il cliente, mi riporta le informazioni contenute nel record nel foglio 2, riga3. "

    mi da più l'idea che serva un cerca.orizzontale



  • di Cucù data: 15/07/2016 20:35:03

    A me più l'idea di un cerca vertontale
    Cucù



  • di Santuberto (utente non iscritto) data: 16/07/2016 06:09:55

    Buongiorno a tutti. Confortato dall'opinione degli esperti, provo allegare un file. Cordiali saluti.



  • di Santuberto (utente non iscritto) data: 16/07/2016 06:14:03

    Eventualmente, per il vertontale, prenderemo ulteriori iniziative.



  • di Thyke data: 16/07/2016 06:25:52

    @ Santuberto

    prova il file che ho allegato..è il tuo con qualche riga di codice, devi cliccare un valore presente sulla colonna "A" del foglio1, poi vai a vedere il risultato nel foglio2



  • di Santuberto (utente non iscritto) data: 16/07/2016 06:39:23

    Buongiorno Thyke e complimenti: ottima soluzione (davvero).



  • di Thyke data: 16/07/2016 06:51:28

    Bene...

    soluzione semplice ed efficace

    ciao



  • di steto69 data: 16/07/2016 13:01:06

    il codice andrebbe bene, tranne che per il fatto che invece di cliccare nella lista, si deve scrivere la lettera da cercare per esempio nella cella 1 del foglio2 e verificare che sia presente nella colonna 1 del foglio1 ed eventualmente restituirne il record corrispondente



  • di Santuberto (utente non iscritto) data: 16/07/2016 13:34:40

    Credo che sia quello che accade nel file che ho postato io. Può essere che mi sfugga qualcosa, ma non mi sembra. Prova a controllare.
     
     



  • di Thyke data: 16/07/2016 14:13:47

    "il codice andrebbe bene, tranne che per il fatto che invece di cliccare nella lista, si deve scrivere la lettera da cercare per esempio nella cella 1 del foglio2 e verificare che sia presente nella colonna 1 del foglio1 ed eventualmente restituirne il record corrispondente"

    e vi spaventate per così poco?

    due minuti...



  • di Thyke data: 16/07/2016 14:24:31

    fatto...allegato file Z X 33.2.xlsx adesso oltre alla soluzione di prima ne ho creata un'altra nel foglio2.
    Nel foglio2 si scrive nella cella "A1" > "INVIO" e se nella colonna 1 del foglio1 c'è una corrispondenza aggiorna i dati...



  • di Santuberto (utente non iscritto) data: 16/07/2016 15:31:36

    Buongiorno Thyke. Con la speranza di non essere inopportuno, mi prendo un brevissimo OT per un'informazione veloce. Io sono totalmente digiuno di VBA, per cui non lo userò mai, però mi chiedo: c'è un motivo per usare il VBA quando, in casi come questo, bastano due semplici funzioni? Forse è più veloce da scrivere? Oppure è più comodo da usare, oppure... Grazie mille per un'eventuale risposta e cordiali saluti.



  • di Thyke data: 16/07/2016 16:50:20

    ciao Santuberto

    un motivo su tutti per usare il VBA è la "ricorsione", per essere più chiari, se in una cella tu metti una formula che fa riferimento al valore contenuto nella cella stessa l'excel ti da un errore di "riferimento circolare", con il VBA è pratica comune utilizzare variabili che fanno riferimento a se stesse, ad esempio "valore = valore +1"

    un altro motivo è l'elaborazione dei dati, in uno degli ultimi post è diventato necessario elaborare tutti i terni possibili nel gioco del lotto, con il VBA farlo è una cosa da poco, tu riesci ad elaborare tutti i 117480 terni possibili senza usare il VBA?

    dai...ti lancio una sfida



  • di Santuberto (utente non iscritto) data: 16/07/2016 17:08:19

    Cito: "dai...ti lancio una sfida ".
    Stai fresco!!! Ti ringrazio per la spiegazione, ma...
    Grazie ed alla prossima.



  • di Thyke data: 16/07/2016 17:14:41

    Dai scherzavo...

    in ogni caso fidati, una volta che inizi a masticare un pochino di VBA lavori in tutto un'altro modo con l'excel, ti si apre un mondo davanti e con l'excel riesci a fare cose inimmaginabili da un comune utilizzatore

    ciao alla prossima



  • di Vecchio Frac data: 17/07/2016 12:56:57

    cit. "una volta che inizi a masticare un pochino di VBA lavori in tutto un'altro modo con l'excel"
    ---> +1 per Thyke, e non solo con Excel naturalmente, ma con Word, Outllok e Powerpoint (una volta ho fatto qualcosa perfino per Publisher)





  • di steto69 data: 18/07/2016 11:33:49

    Perfetto Thike!
    Grazie
    Ti potrei chiedere un altro aiuto?
    I valori ottenuti potrebbero essere corretti oppure no allora si avrebbe l'esigenza di modificarli,
    es. se il db restituisce i dati dei clienti e si deve correggere il numero di telefono.

    Inoltre mi chiedevo se c'è un modo più veloce per assegnare i valori di una cella del foglio1 ad una cella del foglio2:
    Foglio2.Cells(3, 1) = Foglio1.Cells(a, 1)
    Foglio2.Cells(3, 2) = Foglio1.Cells(a, 2)
    Foglio2.Cells(3, 3) = Foglio1.Cells(a, 3)
    Foglio2.Cells(3, 4) = Foglio1.Cells(a, 4)
    se le colonne sono molte il codice diventa molto lungo.
    Me questa è solo una curiosità!



  • di Thyke data: 18/07/2016 15:25:03

    si che si può fare si annida un altro ciclo for dentro il primo ed elimini righe, dimensioni il secondo ciclo per il numero di colonne che ti serve ed hai risolto il problema

    ti allego il codice modificato
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    For a = 1 To 65536
    If Foglio1.Cells(a, 1) = "" Then Exit For
    If UCase(Foglio2.Cells(1, 1)) = UCase(Foglio1.Cells(a, 1)) Then
    For b = 1 To 4
    Foglio2.Cells(3, b) = Foglio1.Cells(a, b)
    Next
    Exit For
    End If
    Next
    End Sub



  • di steto69 data: 18/07/2016 20:15:15

    Grazie mille!

    E per quanto riguarda la modifica del record, se i valori dovessero essere cambiati in qualche sua cella?

    Lo so che sto approfittando della Tua competenza!



  • di Thyke data: 18/07/2016 20:26:41

    cosa intendi?

    così come è impostata nel foglio1 puoi mettere fino a 65536 record, l'unica cosa importante è il non lasciare righe vuote tra un record e l'altro, se vuoi cambiare la posizione dei record devi modificare i riferimenti alle celle...non è difficile

    in questo caso:

    For a = 1 To 65536
    If Foglio1.Cells(a, 1) = "" Then Exit For

    la variabile "a" vale da 1 a 65536 e cerca in tutte le prime 65536 righe della colonna 1, se volessi fargli fare la ricerca dalla colonna 5 verrebbe modificata così:

    For a = 1 To 65536
    If Foglio1.Cells(a, 5) = "" Then Exit For

    quindi come vedi basta modificare i riferimenti riga colonna quando vedi un "Cells(riga, colonna)"...è come giocare a battaglia navale



  • di steto69 data: 19/07/2016 13:00:02

    Scusa penso di non essermi spiegato bene.



  • di steto69 data: 19/07/2016 13:10:15

    nel file che ho allegato scrivendo per es. Antonio nella prima cella del foglio2 mi restituisce il record:
    ANTONIO VIA PAPERI MILANO 02333333333

    se ora voglio variare ad es. il numero di telefono sempre dal foglio2 senza andare al foglio1?

    Ho una macro con la quale immetto nuovi record nel DB, li ordino e li numero per es. eseguendola da un foglio usato come maschera. Ma se devo modificare o eliminare un record come posso fare senza entrare direttamente nel foglio1 (DB).

    Spero di essere stato un pò più chiaro.



  • di Thyke data: 19/07/2016 18:08:34

    @ steto69

    non capisco...le tue richieste erano:
    Vorrei avere una macro che legge un nome, in un altro foglio dello stesso file es: foglio2, cella a1.
    Se trova il cliente, mi riporta le informazioni contenute nel record nel foglio 2, riga3.

    ed in questo penso siano state soddisfatte al 100%

    adesso stai facendo una richiesta che mi è poco chiara, il DB è nel foglio1...e la query ti da il risultato nel foglio2, tu adesso che necessità hai? quella di cambiare il valori del DB dal foglio2?

    Non ti sto neppure a chiedere il motivo di questa bizzarra decisione...è solo per avere degli obiettivi chiari, non fare del lavoro inutile...



  • di steto69 data: 19/07/2016 18:59:08

    si, esattamente



  • di Thyke data: 19/07/2016 19:11:22

    ok..ho allegato un nuovo file...



  • di steto69 data: 19/07/2016 19:41:22

    scusa qual è il nuovo file?



  • di Thyke data: 19/07/2016 19:55:42

    è lo ZX 33.3.xlsm

    adesso quando scrivi in una cella del foglio2 un nuovo valore si modifica automaticamente anche nel foglio1



  • di steto69 data: 20/07/2016 18:29:56

    ok perfetto!

    Scusa una domanda da ignorantone, ma un ciclo if non deve terminare sempre con End if?



  • di Thyke data: 20/07/2016 18:40:28

    non se finisce sulla stessa riga da dove comincia



  • di steto69 data: 21/07/2016 11:19:58