Funzione ricerca in menù a tendina

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
loris1998
00martedì 3 gennaio 2017 17:20
Ricerca in menù a tendina
Salve a tutti, sono nuovo in questo forum e vorrei esporvi un problema al quale non riesco a trovare soluzione.

Premetto che non sono un grande esperto di Excel, ma me la cavicchio.

In pratica ho elaborato un foglio elettronico per la prima nota nella mia azienda.

Troverete il file in allegato.

Nella colonna Tipo c'è un elenco con tre voci (Cliente, Fornitore, Movimento).
Nella colonna Movimenti c'è un elenco collegato alla colonna Tipo.
Quando seleziono una delle voci dalla colonna Tipo, nella colonna Movimenti compare un elenco a seconda della voce selezionata in Tipo.

Data l'elevata quantità di dati che dovranno contenere gli elenchi di Clienti e Fornitori, vorrei che una volta selezionata la voce dalla colonna Tipo, nella colonna Movimenti possa inserire le iniziali del Cliente o del Fornitore in modo da non perdere la testa tra le tante voci.

Girovagando su internet ho visto che qualcosa di simile si può fare ma non sono riuscito ad applicarlo al mio caso.

Nel file in allegato troverete solamente poche voci negli elenchi Clienti e Fornitori, ma ne dovranno contenere molti di più.

Qualcuno riesce ad indirizzarmi per risolvere il problema?

Grazie mille in anticipo.
alfrimpa
00martedì 3 gennaio 2017 19:33
Loris si devono creare dei menù a tendina dinamici.

Guarda questo video che illustra l'argomento.

https://www.youtube.com/watch?v=jxx3XI8H5z8
GiuseppeMN
00martedì 3 gennaio 2017 19:48
@loris1998, scrive:


 ... Data l'elevata quantità di dati che dovranno contenere gli elenchi di Clienti e Fornitori, vorrei che una volta selezionata la voce dalla colonna Tipo, nella colonna Movimenti possa inserire le iniziali del Cliente o del Fornitore in modo da non perdere la testa tra le tante voci ...



Buona sera, Loris;
in una "Conalida dati" (Menù a tendina), non credo sia possibile selezionare un Record in base alle iniziali del Record stesso.
Serve VBA; visto il considerevole numero di Record da valutare, consiglierei UserForm.

Che conoscenze hai di VBA e in particolare di UserForm?


Buona serata.

Giuseppe
alfrimpa
00martedì 3 gennaio 2017 19:56
E infatti Giuseppe avevo capito male la richiesta.

Ora sto preparando la userform [SM=g27828]
loris1998
00martedì 3 gennaio 2017 21:44
Ragazzi buonasera a tutti. Innanzitutto vi ringrazio per l'attenzione riservatami.

@Giuseppe purtroppo non ho alcuna conoscenza sia di VBA che di UserForm.
Aveva intuito che forse avrei dovuto far ricorso almeno al VBA ma non ho la più pallida idea di dove e come iniziare.

Come posso uscirne fuori?

Grazie
alfrimpa
00martedì 3 gennaio 2017 21:47
Ti sto preparando io la userform e domani spero di sottoporre un primo esempio.
loris1998
00martedì 3 gennaio 2017 21:54
Grazie milla alfrimpa!!

Grazie mille!!
alfrimpa
00mercoledì 4 gennaio 2017 13:03
Ciao Loris

Come anticipatoti ieri ti allego un primo file dove ho concretizzato quella che poteva essere un'idea.

Sul foglio "Gennaio 2017" ho messo un pulsante che se cliccato ti mostra una maschera di inserimento dati che una volta compilata e cliccando sul pulsante "Inserimento Dati" trasferisce questi sul foglio.

Questo il codice che governa il tutto.

vb
Private Sub ComboBox1_Change()
Dim i As Long
Dim urCli As Long
Dim urForn As Long
Dim urMov As Long
urCli = Worksheets("Foglio1").Cells(Rows.Count, 2).End(xlUp).Row
urForn = Worksheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Row
urMov = Worksheets("Foglio1").Cells(Rows.Count, 4).End(xlUp).Row
Select Case Me.ComboBox1.Value
    Case Is = "Cliente"
    Me.ComboBox2.Clear
    For i = 2 To urCli
        Me.ComboBox2.AddItem Worksheets("Foglio1").Range("b" & i).Value
    Next i
    Case Is = "Fornitori"
        Me.ComboBox2.Clear
    For i = 2 To urForn
        Me.ComboBox2.AddItem Worksheets("Foglio1").Range("c" & i).Value
    Next i
    Case Is = "Movimenti"
    Me.ComboBox2.Clear
    For i = 2 To urMov
        Me.ComboBox2.AddItem Worksheets("Foglio1").Range("d" & i).Value
    Next i
End Select
End Sub



Private Sub CommandButton1_Click()
Dim i As Integer
Dim ur As Long
Dim sh As Worksheet
Set sh = Worksheets("Gennaio 2017")
ur = UltimaRiga(Worksheets("Gennaio 2017").Range("a2:a33"))
sh.Cells(ur + 1, 1).Value = CDate(Me.TextBox1.Value)
sh.Cells(ur + 1, 2).Value = Me.ComboBox1.Value
sh.Cells(ur + 1, 3).Value = Me.ComboBox2.Value
For i = 2 To 8
    sh.Cells(ur + 1, i + 2).Value = Me.Controls("TextBox" & i).Value
Next i
End Sub

Private Sub CommandButton2_Click()
Me.Hide
End Sub




Private Sub UserForm_Initialize()
Dim i As Long
Dim urList As Long
Dim urCli As Long
Dim urForn As Long
Dim urMov As Long
urList = Worksheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
urCli = Worksheets("Foglio1").Cells(Rows.Count, 2).End(xlUp).Row
urForn = Worksheets("Foglio1").Cells(Rows.Count, 3).End(xlUp).Row
urMov = Worksheets("Foglio1").Cells(Rows.Count, 4).End(xlUp).Row
For i = 2 To urList
    Me.ComboBox1.AddItem Worksheets("Foglio1").Range("a" & i).Value
Next i
End Sub


Ripeto è ancora un esempio molto "grezzo" che va modificato e migliorato sotto molti aspetti ma era giusto per darti un'idea.

Prova e fai sapere.

P.S. Non postare il medesimo quesito su più forum; in alcuni è vietato dal regolamento e anche se non lo fosse non è bello farlo.
loris1998
00mercoledì 4 gennaio 2017 16:13
Ciao Alfredo

Innanzitutto ti ringrazio nuovamente.

L'idea che tu hai realizzato è praticamente quello che io avrei voluto fare, ma che non ho potuto per ovvie ragioni di conoscenza.

La tua idea è per me PERFETTA.

Io non lo definirei "grezzo" e dal punto di vista grafico potrebbe andare.

L'ho analizzato abbastanza e per il momento ti espongo alcuni punti:

1) Quando vado ad aumentare i records di Clienti, Fornitori e Movimenti, mi escono automaticamente nella maschera?

2) Adesso per selezionare un Cliente o un Fornitore mi basta inserire le iniziali e mi compaiono. E' possibile selezionarli inserendo una parola che componga il loro nome e quindi non partire dalle iniziali?

3) Dopo aver cliccato su Inserimento Dati, è possibile pulire la maschera in modo che tutti i campi siano vuoti?

4) Attualmente nel foglio ci sono 33 righe utili ma queste non basteranno per inserire tutte le operazioni mensili (per ogni mese ne potrebbero servire anche più di 100). Per aumentarle come si potrebbe fare? Si può fare automaticamente oppure devo farlo io manualmente attraverso Inserisci Riga?

E' tutto perfetto. Soltanto queste piccole modifiche ho notato.

Mi complimento con te per la tua bravura.

Ancora grazie.

P.S.: Mi scuso infinitamente per il tuo P.S., ha pienamente ragione.
alfrimpa
00mercoledì 4 gennaio 2017 17:25
Ciao Loris

Ti rispondo

1) Si
2) Si; nelle combobox sia che tu digiti una/due lettere o l'intero nome il cursore nella tendina si posiziona sul primo elemento che contiene le lettere digitate. A tale proposito sarebbe opportuno che l'elenco clienti/fornitori/movimenti sia ordinato alfabeticamente.
3) Si questa è una cosa che avevo già in mente di fare.
4) Si ma onestamente, al momento, non mi vengono idee in mente ma è sicuramente fattibile.
loris1998
00mercoledì 4 gennaio 2017 18:05
Ciao Alfredo.

Gli elenchi saranno ordinati alfabeticamente.

Per quanto riguarda la creazioni di nuove righe ho pensato di procedere in questo modo:

modifico il range in questa riga di codice, portandolo ad esempio a 100

ur = UltimaRiga(Worksheets("Gennaio 2017").Range("a2:a33"))

e poi inserisco io manualmente le righe in maniera classica.

Che ne pensi?

Per quanto riguarda la parte grafica, allineamento della maschera e posizionamento del tasto maschera, ci posso pensare io tanto da come ho visto sembra abbastanza facile.

Tu dovresti solamente applicare la pulizia della maschera dopo ogni inserimento.

Va bene?

Grazie mille
alfrimpa
00mercoledì 4 gennaio 2017 18:25
Sì certo puoi fare così; io volevo trovare un modo per evitare di farti mettere mano al codice (sarebbe stato più "professionale" [SM=g27828] )

Domani ti scrivo il codice per la "ripulitura" della maschera.
loris1998
00mercoledì 4 gennaio 2017 22:10
Per me già sei stato professionale!! Tranquillo [SM=g27827]

Se riesci a trovare una soluzione per te semplice e non impegnativa per risolvere il fatto delle righe, fai pure, altrimenti per me va benissimo anche così.

Già hai fatto tantissimo!!

Rimango in attesa del nuovo file.

Grazie mille
alfrimpa
00giovedì 5 gennaio 2017 12:52
Allora Loris trovi qui allegato l'ultimo file dove ho risolto il problema dell'inserimento di nuove righe (sul codice non devi modificare nulla) ed ho previsto la "ripulitura" della maschera una volta inseriti i dati sul foglio.

Prova e fai sapere.

P.S. Immagino però che questo file sia parte di un progetto più ampio (non può essere solo questo [SM=g27828] )
loris1998
00giovedì 5 gennaio 2017 21:27
Ciao Alfredo.

L'ho provato e adesso è tutto perfetto.

Questo file mi serve solamente per la prima nota aziendale e per nient'altro. La contabilità la segue con un gestionale dedicata ma che non ha una sezione fatta bene per la prima nota.

Comunque per il momento penso che abbiamo terminato.

Se nei prossimi giorni avrò bisogno di qualche piccola delucidazione non esiterò a contattarti [SM=g27828]

Grazie mille ancora!!

Come posso sdebbitarmi? [SM=g27818]

alfrimpa
00giovedì 5 gennaio 2017 21:56
Re:
loris1998, 05/01/2017 21.27:



Come posso sdebitarmi? [SM=g27818]




Se vuoi ti mando il mio IBAN [SM=g27828] [SM=g27828]

Ovviamente scherzo; mi basta la soddisfazione.
GiuseppeMN
00venerdì 6 gennaio 2017 12:15
Mbè!, se si parla di ...IBAN, con la pensione da fame che mi ritrovo , quasi, quasi, entro in gioco anch'io!      
alfrimpa
00venerdì 6 gennaio 2017 12:18
[SM=g27828] [SM=g27828]
loris1998
00venerdì 6 gennaio 2017 12:24
Alfredo, sono pienamente soddisfatto! Questo è sicuro [SM=g27828]

Ho notato che il campo Data è obbligatorio, nel senso che se non inserisco la data va tutto in errore. E' possibile eliminare questo obbligo e fare in modo di inserire gli altri dati senza la data?

Grazie

P.S.: Giuseppe cercherò di soddisfare tutti [SM=g27828]
alfrimpa
00venerdì 6 gennaio 2017 16:04
Re:
Ciao Loris

loris1998, 06/01/2017 12.24:


Ho notato che il campo Data è obbligatorio, nel senso che se non inserisco la data va tutto in errore. E' possibile eliminare questo obbligo e fare in modo di inserire gli altri dati senza la data?




Per far questo devi modificare la macro associata a pulsante "inserimento Dati" inserendo la riga che ti ho indicato (sei capace di farlo?)

vb
Private Sub CommandButton1_Click()
Dim i As Integer
Dim ur As Long
Dim sh As Worksheet
On Error Resume Next    <======== Riga da aggiungere
Set sh = Worksheets("Gennaio 2017")
ur = sh.Cells(Rows.Count, 1).End(xlUp).Row
sh.Cells(ur + 1, 1).Value = CDate(Me.TextBox1.Value)
sh.Cells(ur + 1, 2).Value = Me.ComboBox1.Value
sh.Cells(ur + 1, 3).Value = Me.ComboBox2.Value
For i = 2 To 8
    sh.Cells(ur + 1, i + 2).Value = Me.Controls("TextBox" & i).Value
Next i
Me.ComboBox1.Value = ""
Me.ComboBox2.Value = ""
For i = 1 To 8
    Me.Controls("TextBox" & i).Value = ""
Next i
End Sub

loris1998
00venerdì 6 gennaio 2017 16:42
Alfredo, sono riuscito ad aggiungere quella riga da te indicata, solo che adesso, una volta inseriti i dati e cliccato su Inserimento dati, quando vado ad inserire nuovi dati non va automaticamente su una nuova riga, ma mi modifica sempre la stessa.
alfrimpa
00venerdì 6 gennaio 2017 16:59
Prova con questa macro modificata

vb
Private Sub CommandButton1_Click()
Dim i As Integer
Dim ur As Long
Dim sh As Worksheet
On Error Resume Next   
Set sh = Worksheets("Gennaio 2017")
ur = sh.Cells(Rows.Count, 2).End(xlUp).Row <=== riga modificata
sh.Cells(ur + 1, 1).Value = CDate(Me.TextBox1.Value)
sh.Cells(ur + 1, 2).Value = Me.ComboBox1.Value
sh.Cells(ur + 1, 3).Value = Me.ComboBox2.Value
For i = 2 To 8
    sh.Cells(ur + 1, i + 2).Value = Me.Controls("TextBox" & i).Value
Next i
Me.ComboBox1.Value = ""
Me.ComboBox2.Value = ""
For i = 1 To 8
    Me.Controls("TextBox" & i).Value = ""
Next i
End Sub
loris1998
00venerdì 6 gennaio 2017 17:05
Perfetto.

Funziona adesso.

Grazie [SM=g27828]
loris1998
00domenica 8 gennaio 2017 11:50
Ciao Alfredo, ho ancora bisogno di te [SM=g27828]

In pratica ho iniziato a formattare la tabella di lavoro, sistemando righe e colonne e rinominando la cella Movimento.

Adesso l'inserimento dati non funziona più [SM=g27828]

Non ho assolutamente toccato il codice ma solamente la tabella di lavoro.

Puoi vedere cosa è successo?

Inoltre, come posso cambiare il nome del tasto Maschera? Vorrei che ci fosse scritto Inserimento dati.

Ti allego il nuovo file.

Grazie e scusa ancora per il disturbo.
alfrimpa
00mercoledì 11 gennaio 2017 10:13
Ciao Loris

Quando si utilizza il VBA le celle unite vanno evitate come la peste perché creano problemi.

Nelle colonne DATA, TIPO e DESCRIZIONE le ho eliminate ed ora mi pare che tutto funzioni correttamente.

Ti riallego il file e fai sapere.
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 17:07.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com