› Sviluppare funzionalita su Microsoft Office con VBA › Ricerca a doppia selezione optionbutton
-
AutoreArticoli
-
Buonasera a tutti,
sono qui per chiedervi un aiuto. Il problema è questo:
quando effettuo una ricerca cliente, inserisco il cognome nella textbox e selezione optionbutton "Cognome" e
la ricerca viene eseguita correttamente.
Invece io vorrei nella ricerca, in textbox, poter scrivere il cognome e nome selezionando le due
optionbutton "cognome" + "nome".
In pratica vorrei fare una ricerca con selezione optionbutton doppia.
Ho girata in rete ma niente ho trovato che facesse al mio caso e da solo proprio non ci riesco.
Allego il file
GrazieMa perché non usi per le ricerche un campo univoco tipo il codice fiscale?
Buongiorno Alfrimpa, grazie per aver risposto. Infatti questa cosa lo già pensata,. se non si dovesse riuscire, mi vedrò costretto nel scrivere il cognome e nome in un unica textbox. Il motivo per cui mi sono rivolto a voi esperti e proprio questo, di aiutarmi a trovare una possibile soluzione, sempre che si possa fare. Grazie
P.S. Come si potrà notare, ho diviso le optionbutton in due gruppi, Gruppo1 e Gruppo2. Questo fa si che possa scegliere di abilitarne 2 per volta. Ecco perchè penso che si possa fare.
Scusami Pixel ma non capisco la logica.
Tu hai 8 optionbutton divisi in due gruppi da 4.
Hai la necessità di fare ricerche per tutte le combinazioni possibili anche ad esempio Data arrivo <--> Telefono o Num prog <--> Data Partenza?
Una volta che hai selezionato due optionbutton cosa fai? Cosa deve succedere?
Ciao Alfrimpa, adesso quando effettuo una ricerca cliente inserendo nella textbox solo il cognome ed attivo opt cognome, come potrai notare dal file allegato, lui mi ricerca il cognome da me scritto in textbox es. Rossi. Cosa vorrei ottenere ?
Bene, vorrei poter inserire nella textbox non solo il cognome ma anche il nome. Ad esempio: Rossi Mario, attivare opt cognome e opt nome, ed in questo caso mi deve dare come risultato il cliente Rossi Mario.
Ma se oltre a Rossi Mario ci fosse Rossi Michele Michele dove deve essere visualizzato?
Potresti, qualora selezioni gli optionbutton nome e cognome aprire una userform con una listbox che contenga Rossi Mario e Rossi Michele e facendo doppio clic su uno di questi ne visualizzi i dati completi sulla userform principale.
Ma nella textbox Ricerca inserisci il cognome il nome o l'uno o l'altro?
Se è così mi sembra una cosa assurda.
-Alfrimpa
Non riesco a spiegarmi bene.
Lui mi deve cercare solo ciò che viene scritto nella textbox. In questo caso deve cercare solo il cliente Rossi Mario e non Rossi Michele, ecc....
Quindi secondo te se scrivo Rossi Mario ed attivo due opt (cognome + nome) lui non potrà mai restituirmi le informazioni al primo Rossi Mario trovato sul foglio Dati?
A prescindere dagli optionbutton se scrivi Rossi Mario sul foglio in quale colonna deve cercare?
In questo caso non troverà mai Rossi Mario perchè non hai una colonna che abbia nome e cognome.
Devi concatenare in un'altra colonna nome e cognome e nel codice abbinato al pulsante Inizia ricerca verificare che gli optionbutton nome e cognome siano entrambi selezionati ed in questo caso effettuare la ricerca sulla colonna che contiene nomi e cognomi concatenati.
Ovviamente se volessi estendere questo meccanismo a tutti gli optionbutton sarebbe un macello non so se te ne rendi conto.
Il problema è proprio questo. Se vedi il file allegato nella colonna "I" cè il cognome e nella colonna J ce il nome. Come detto prima si potrebbe scrivere in un unica colonna cognome e nome ad esempionella"I". ok.
Ma se voglio fare la stessa ricerca con la selezione di due opt scrivendo nella textbox di ricerca cognome + nome che sul foglio dati come potrai ben notare, si trovano in due colonne differenti. in questo caso colonna I e colonna J, la ricerca si può fare secondo te?
Credo di averti risposto; hai letto il mio post precedente che ho integrato?
Scusami, hai ragione ho saltato un tuo post.
Io pensavo che nella ricerca si potesse concatenare nella stessa textbox la ricerca di due colonne e due opt. Quindi credo che non si possa fare.
Onestamente non ci avevo pensato alla tua soluzione ad inserire un altra colonna, concatenando cognome e nome. Insomma, anche se non è in quello che speravo ma comunque può considerarsi una buona soluzione al quesito.
Grazie Alfrimpa per il tempo, competenza e professionalità messo a mia disposizione nel trovare comunque una soluzione, che possa essere utile a tanti altri che come me masticano poco il VBA.
Grazie
Io ho capito quello che vuoi fare, ma alfrimpa ti ha alzato qualche dubbio corretto.
1) se fai la ricerca solo per cognome sembra che funzioni, ma tira fuori solo uno dei record che hanno quel cognome, per come l'hai sviluppato tu, perché se tu avessi Vasco Rossi e Valentino Rossi, per come l'hai fatto tu, tira fuori solo uno dei due e non tutti e due
2) fare la ricerca concatenata senza avere i campi già concatenati è possibile, ma non facile. Se tu scrivi Rossi Mario non è la stessa cosa di scrivere Mario Rossi, quindi dovresti trovare anche il modo di obbligare chi scrive ad inserire prima il Cognome e poi il Nome
3) anche scrivendo il Cognome e Nome devi trovare il modo di splittare la stringa che hai scritto in due parti in modo che la tua funzione cerchi per cognome e se lo trova poi controlla anche il nome, una volta verificato se combaciano allora ti carica i dati, altrimenti passa al prossimo, ma anche qui non è detto che non ci sia il problema di omonimi, ovvero due Rossi Mario nati in due città differenti.
altra cosa, mio consiglio personale, sostituisci gli optionbutton con i checkButton.
In soldoni quello che devi fare, se vuoi mantenere la tua soluzione e non usare il CF o PIVA è quello di splittare la stringa inserita nel campo "ricerca avanzata" in tante parti, capire quale parte è il cognome e quale il nome e poi iniziare la ricerca usando il cognome, appena il sistema trova una corrispondenza, controllare che il nome corrisponda alla parte del nome.
se corrisponde visualizzi i dati che ti servono, se non corrisponde prosegui con la ricerca
Ciao Fulvio, ti rispondi per step,
Infatti, Alfrimpa mi ha messo qualche dubbio.
1- la Ricerca funziona egregiamente per come se scrivo il cognome nella textbox attivo la optionbutton " Cognome". Inoltre, chiaramente per com'è impostato il Form ( " Cognome" è la prima textbox che vado a scrivere) anche la ricerca deve partire in primis dal cognome. Poi se provi il file allegato, vedrai che se ci sono 2 clienti "Rossi" lui ti trova il primo e se poi vai avanti ti mostra anche il 2°,3° e cosi via.
2- La ricerca per come interessa a me "senza obbligare" deve essere fatta inserendo prima il cognome e poi il nome.
3 - Ho pochissima conoscenza del VBA ed è per questo che ho chiesto il vostro aiuto. Però con il programma così com'è, se ci sono due Rossi Mario, il programma mi da il Primo Rossi Mario trovato e se pigio su avanti mi da il 2 e cosi via.
Tua cit. altra cosa, mio consiglio personale, sostituisci gli optionbutton con i checkButton.
Mi dici cosa cambierebbe?
Per ultima parte <in soldoni> credo di non aver capito e al contempo non sono in grado di farlo, altrimenti non starei a chiedervi aiuto.
Grazie per il tuo contributo.
Ho pochissima conoscenza del VBA
Allora come hai fatto a scrivere tutto quel po' po' di codice che è nel file?
Le ricerche vanno fatte su dati precisi e non con l'approccio che hai intenzione di usare tu.
Poi è fondamentale la presenza di un campo (chiave) che identifichi univocamente ciascun record
Quel codice non è mio. Come potrei se nel post precedente ho scritto che ho poca conoscenza del VBA? Pensavo si fosse capito, evidentemente no, sono stato poco chiaro e mi scuso. Comunque il codice non è farina del mio sacco, ma lo trovato in rete adattandolo alle mie esigenze. Adesso senza allontanarsi dal problema, se non cè altro rimedio mi vedrò costretto ad inserire nella textbox "Cognome" anche il nome, così quando effettuerò una ricerca, inserirò nella textbox di ricerca il cognome e nome abilitando la optionbutton denominata Ragione sociale anzicchè Cognome.
Perdindirindina, non pensavo fosse così complicata la mia richiesta di aiuto. Che dirvi se non Grazie.
Il Maggior Problema sarebbe dividere il nome ed il cognome nella ricerca.
Vedo che poi la ricerca viene fatta con un ciclo For-NExt Pertanto inserire una doppia scelta non è una cosa impossibile.
Giusto una domanda: Tutti i record hanno un cognome unico senza spazi?
Ad esempio hai un Tronchetti Provera Marco o Jhon Fitzgerald Kennedy?
E per il Nome hai nomi doppi Luca Maria, Gian Mario? con spazio intendo!
Se tutti i cognomi e i nomi non hanno spazi intermedi allora la ricerca la vedo una cosa possibile.
Altrimenti Vedo due soluzioni:
O usate due text Box
Oppure accettare di scrivere il nome ed il cognome con inframmezzato un carattere speciale (ad esempio Rossi#Giuseppe) in modo da riuscire poi a spezzare la stringa in due parti una per il nome e una per il cognome.
Rimane il fatto che dovrai scrivere sempre prima il cognome e poi il nome.
Altra limitazione sarà il fatto che se hai due persone omonime te ne selezionerà una sola.
Ciao Luca,
i cognomi possono avere anche degli spazi. Infatti con il file allegato se registri un cliente cove il cognome è ad esempio De Bartolomeo, se vai nella ricerca e scrivi De Bartolomeo e selezioni optionbutton "cognome" vedrai che ti trova il cliente anche se ha uno oppure più spazi. A
Se provi il file in allegato vedrai che se ci dovessero essere di di uno di De Bartolomeo, con il pulsante "Trova successivo", ti troverà il De Bartolomeo successivo.
sarebbe dividere il nome ed il cognome nella ricerca.
L'avrei detto io fra poco con Split allo spazio oppure, vedi sotto,
accettare di scrivere il nome ed il cognome con inframmezzato un carattere speciale
Su molti sistemi vecchi (molto vecchi, diciamo pure su mini Unix ai miei tempi dell'Università) si usava la virgola in fase di inserimento del dato, così questo fungeva da carattere speciale per separare le due informazioni. In questo modo puoi esser sicuro di poter cercare per cognome e per nome combinando i due dati come vuoi e superando l'obiezione che dovrai scrivere sempre prima il cognome e il nome. Perchè se una ricerca ha esito negativo puoi avviare la seconda ricerca semplicemente invertendo i valori. Non molto ortodosso ma può funzionare.
Luca,
sarebbe più fattibile inserire un altra textbox e non scrivere il cognome e nome con un carattere speciale.
Solo che concatenare le due textbox dove nella prima metto il cognome e nella seconda il nome, non saprei come farlo.
A questo punto forse la soluzione migliore sarebbe scrivere nella textbox "Cognome" anche il nome. in modo che quando si effettua una ricerca ad esempio De Bartolomeo Luigi, e selezione optionbutton denominato ragione sociale e non più cognome, mi andrà a popolare il resto delle txtbox. Però non voglio scartare la tua idea con due textbox di ricerca.
Il Problema di Usare Split nasce con i nomi e cognomi con lo spazio, Ecco Perche la mia richiesta di cui sopra.
il mio consiglio del check button rispetto al optionButton nasce dal fatto che l'OptionButton nasce per l'uso della scelta univoca e non la scelta multipla e come puoi vedere dal tuo form se selezioni un option non puoi più deselezionarlo se non premendo il pulsante di pulizia, che ti cancella anche tutti gli altri.
comunque il succo Option per selezione singola Check per selezione multipla
Grazie Fulvio per la tua spiegazione.
Devo ringraziare tutti voi per il vostro contributo nel cercare e ricercare una possibile soluzione al mio quesito. Penso di essere riuscito. Vi spiego come ho fatto. Se poi qualcun altro ha altre idee e vorrebbe condividerle, ben venga.
Ora finalmente posso ricercare i clienti in vari modi ad es.: "Rossi Mario" oppure "De rossi Mario" ancora " DE rossi Mario Michele " e tutto questo selezionando una sola Opt denominata "Nome & Cognome" oppure ho creato un altra Opt denominato "Cognome & Data di Nascita" in modo tale da ricercare ad es.: De Rossi 15-05-1956 . Lo sto testando e tutto sembra che il tutto funzioni bene.
La mia soluzione l'ho trovata grazie al suggerimento di Alfrimpa, dove mi invitava nel creare una colonna di appoggio concatenando il Cognome e nome. Pensavo di non esserne capace, invece sono riuscito a creare una colonna di appoggio per entrambe le soluzioni.
Allego parte di codice che ho inserito.
'Da aggiungere al Tasto Inserisci. Gli diciamo di scrivere concatenado il Cognome e nome, oppure cognome e data di nascita, separando con uno spazio. .Range("CV" & lUltRiga).Value = Me.txtCognome.Text & " " + Me.txtNome.Text .Range("CW" & lUltRiga).Value = Me.txtCognome.Text & " " + Me.txtData_di_Nascita.Text Stessa cosa al Tasto Modificame. c.Offset(0, 99).Value = Me.txtCognome.Text + " " + Me.txtNome.Text c.Offset(0, 100).Value = Me.txtCognome.Text + " " + Me.txtData_di_Nascita.Text ? Unica cosa non so se è meglio mettere tra parentesi, oppure va bene anche così.Lo sto testando e tutto sembra che il tutto funzioni bene.
Voglio ringraziare tutti voi per il vostro Contributo iniziando da Alfrimpa, Fulvio e Luca 73.
Grazie di cuore ragazzi.
-
AutoreArticoli
