menu a tendina con checkbox



  • menu a tendina con checkbox
    di Paperino78 (utente non iscritto) data: 27/09/2014 21:40:19

    Buongiorno, sono nuovissimo del forum e spero possiate illuminarmi.
    Io ho un foglio con una tabella fatta da 10 righe (comuni) e 2 colonne (km). I valori della prima colonna sono legati alla seconda (comune -> km). Fatto ciò vorrei che in un altra cella diversa possa scegliere con un menù a tendina, tipo convalida dati, il valore della prima colonna quindi il comune e prendere il valore che corrisponde alla seconda, quindi i km. Fatto questo con una checkbox sempre nel menù a tendina vorrei che i valori presi vengano sommati e diano un valore unico nella cella che ho scelto.
    Esempio: milano->100, roma->50 se seleziono dal menù a tendina le voci milano e roma dovrà apparire nella cella il valore 150.
    E' possibile? Premetto non conosco affatto VBA.



  • di Zer0Kelvin data: 28/09/2014 00:13:50

    Ciao.
    Quello che chiedi richiede l'uso di una listbox (il cosiddetto "menù a tendina" della convalida è così è basta)
    Dovresti spiegare meglio le tue esigenze.
    Se la cella in cui visualizzare la somma è una sola, potresti risolvere con una formula ed una terza colonna in cui inserire un simbolo(per esempio x) per simulare la spunta.
    Per esempio ,supponiamo che tu abbia le città in colonna A e le distanze in colonna B, inserendo le "spunte" in colonna c, la formula necessaria (da inserire in una cella a tua scelta) è:

    =SOMMA.SE(C1:C10;"x";B1:B10)



  • di Paperino78 (utente non iscritto) data: 28/09/2014 00:39:02

    Intanto grazie per la risposta.
    Nel mio caso ho sullo stesso foglio una piccola tabella F20->F30 G20->G30 con 10 voci (comuni) e 10 voci (distanze). Direi che è abbastanza semplice. Il bello arriva adesso perchè mi piacerebbe avere per una decina di celle distanti da queste tipo B4 (ma credo abbia poca importanza) un menù a tendina che mi permetta di scegliere quali città mi interessano e evidenziandole come accade quando utilizzando un filtro vai a selezinare solo le voci che ti interessano, mi prenda in considerazione i singoli comuni e le rispettive distanze F20-G20, F21-G21, in modo tale che nella cella mi appaia il totale km, che non è altro che la somma di Gxx, solo che è una sorta di somma condizionale. Non saprei come spiegare meglio. Tutto questo per evitare di fare io la somma dei km, in quanto la lista potrebbe allungarsi molto e cercare ogni singolo valore sarebbe lungo. grazie



  • di lepat (utente non iscritto) data: 28/09/2014 07:58:58

    per spiegare meglio basta allegare un file di esempio con i dati ed il risultato desiderato



  • di Zer0Kelvin data: 28/09/2014 09:19:09

    Ciao.
    Come ho scritto sopra occorre usare una listbox; non credo esistano metodi più semplici.
    Allega il file (senza dati sensibili).



  • di Paperino78 (utente non iscritto) data: 28/09/2014 10:52:08

    Ciao, ho allegato un semplice file excel con una rappresentazione di ciò che vorrei. SAttendo buone nuove.
    Grazie



  • di lepat (utente non iscritto) data: 28/09/2014 10:57:46

    con un semplice Cerca verticale puoi ottenere i Km, ma non capisco cosa intendi per totale, ti avevamo chiesto di mettere anche il risultato desiderato e non l'hai fatto



  • di Paperino78 (utente non iscritto) data: 28/09/2014 11:44:04

    Mi era sembrato di aver scritto che il risultato finale doveva essere la somma dei valori selezionati. Comunque non c'è problema mi correggo, nel file allegato c'è una tabella, se seleziono Cogliate Lazzate(L6) + Uboldo(L7) nella casella C4 dovrebbe apparire il valore 44. Nel caso selezionassi Villasanta(L10) e Legnano(L14) e Cantù(L13) il risultato in cella C4 sarà 67.
    Spero di aver spiegato meglio.



  • di lepat (utente non iscritto) data: 28/09/2014 13:47:36

    Quindi il menu a tendina in C4 non serve a niente ? con quello puoi selezionare una voce alla volta



  • di Paperino78 (utente non iscritto) data: 28/09/2014 14:07:11

    Certo che serve! Nel file allegato ho messo una bozza di come deve essere, MA io non so come fare! Nel file in C4 c'è un box a tendina ma selezionando uno o più comuni deve prendere anche i valori delle distanze che sono sempre presenti nella tabella. Poi che la cella sia la C4 la C5 o un altra qualsiasi cambia poco. Mi serve capire come fare. Sempre che sia possibile



  • di lepat (utente non iscritto) data: 28/09/2014 17:24:15

    L'unico modo che mi viene a mente è utilizzare una userform con listbox, vedi esempio allegato



  • di isy (utente non iscritto) data: 28/09/2014 19:10:37

    Ciao lepat

    Cit: L'unico modo che mi viene a mente è utilizzare una userform con listbox

    Si potrebbe utilizzare un listbox sul foglio come alternativa
    Allego esempio: Distanze su foglio.xlsm



  • di lepat (utente non iscritto) data: 28/09/2014 19:33:44

    Ciao isy
    proprio non ci avevo pensato, ora Paperino ha due possibilità



  • di Paperino78 (utente non iscritto) data: 28/09/2014 20:46:49

    Ragazzi, intanto grazie per le risposte!
    Le due soluzioni sono molto interessanti, sopratutto quella in distanze.xlsm. In questa versione come posso inserire oltre al pulsante calcola anche un pulsante inserisci in modo tale da inserire nella casella selezionata il valore che mi appare nel useform?
    Nella seconda soluzione cioè distanze su foglio.xlsm mi piace molto il modo delle checkbox e la possibilità di selezionare più voci con il risultato che cambia nella parte bassa a dx, solamente che nel mio caso le caselle che daranno il risultato saranno circa 25. Mi spiego meglio! Per ogni giorno lavorativo del mese dovrò fare questo calcolo, quindi avrò circa 25 celle messe in verticale (per esempio C1:C26) nelle quali dovrò fare per ognuna un conteggio ma che potrà avere valori diversi, perchè magari in C1 ci saranno 3 comuni e quindi il totale sarà 100, mentre in C2 ci saranno 6 comuni e quindi il totale sarà 150. Ho messo dei numeri a caso solo per capire. Posso per ogni cella fare un conteggio a sè?
    So che la richiesta potrà essere strana ma non capendo nulla di vba non so da cosa partire e dove mettere le mani. grazie ancora



  • di Zer0Kelvin data: 28/09/2014 20:57:53

    Ciao.
    Come dicevo, serve una listbox...
    Ho già nel cassetto qualcosa che può (con le opportune modifiche) fare al caso tuo.
    Una listbox analoga a quella del file di isy, che compare cliccando su determinate celle, come l'elenco di una convalida dati.
    Appena ho tempo modifico il file e lo allego.



  • di Paperino78 (utente non iscritto) data: 28/09/2014 21:05:05

    Perfetto! Lo aspetto. grazie



  • di lepat (utente non iscritto) data: 29/09/2014 07:47:34

    nel frattempo, visto che non sei in grado di adattare le soluzioni al tuo caso, ti conviene allegare un file più aderente alla realtà



  • di Zer0Kelvin data: 29/09/2014 21:28:44

    Ciao.
    Ho allegato un file di esempio; le spiegazioni sono all'interno.
    Il nome del file è Menu_con_ListBox2.xlsm
    Se trovi interessante la soluzione, la possiamo adattare alle tue reali esigenze.



  • di Zer0Kelvin data: 29/09/2014 21:32:01

    ***ERRATA CORRIGE***
    Mi sono appena accorto di un errore nelle istruzioni.
    Nel file ho scritto:
    -Cliccare su una delle celle grige per attivare l'elenco.-
    In realtà bisogna fare doppio click sulla cella per attivare l'elenco.



  • di isy data: 29/09/2014 23:46:43

    Ciao

    Ho modificato un file che avevo sul Portatile
    Ho inserito la somma in colonna A
    Eventualmente da adattare e migliorare.



  • di Paperino78 (utente non iscritto) data: 30/09/2014 00:19:32

    Ragazzi, non so come ringraziarvi. Mi si è aperto un mondo, nell'esempio denominato Distanze ho modificato qualcosa ed ho inserito in vba un bottone per l'inserimento dei valori nella cella che si chiude da solo al click sul bottone. Solo che la cella la devo definire io manualmente. Ma è stata una prova. Mentre gli esempi che mi avete dato sono decisamente meglio. Adesso li guardo e li applico, vi faccio sapere. Nel frattempo mille grazie.



  • di Paperino78 (utente non iscritto) data: 01/11/2014 19:13:55

    Ho provato ad inserire ilcodice che mi avete postato ma purtroppo non ci capisco molto. Mi spiego meglio. I nomi delle listbox che vedo nel file excel sono diversi dal file vba. Non capisco come poter modificare o meglio ancora creare questo file nel mio foglio. Infine dopo qualche sbattimento mi arriva fuori l'errore "Tipo definito dall'ìutente non definito" e non so dove andare a sbattere la testa. Allego il file sul quale sto lavorando, che poi è quello postato da voi.



  • di Paperino78 (utente non iscritto) data: 01/11/2014 19:44:14

    Dimeticavo di dire che l'errore è riferito a questo codice
     
    Public Sub LoadListBox( _
          ByVal ListBox As msForms.ListBox, _
          ByVal LinkedCell As Range _
       )



  • di isy (utente non iscritto) data: 01/11/2014 21:44:41

    Ciao

    Per utilizzare il codice su un differente file occorre:

    Rinominare il foglio del tuo nuovo file con l'elenco comuni in: Comuni
    Impostare nel tuo nuovo file i range: ListBoxArea e ListBoxSource con Gestione nomi

    Copiare il Listibox1 presente nella scheda Sheet1 che trovi nel file d'esempio sul tuo nuovo file.
    Procedura:
    Attivi la modalità progettazione sul foglio Sheet1 e copi il listbox con le proprietà già impostate

    Tutto qui



  • di Paperino78 (utente non iscritto) data: 02/11/2014 00:36:21

    Ok ho seguto la tua guida ma non capisco come poter copiare od importare i valori di ListBox dopo aver abilitato la progettazione. Mi trovo sulla sinistra i parametri di ListBox ma non capisco come copiarli.



  • di isy (utente non iscritto) data: 02/11/2014 00:59:20

    Ciao

    Ad inizio procedura il listbox viene sempre azzerato con ListBox.Clear
    in seguito da codice si inseriscono tutte le voci con il ciclo vba

    Ho allegato la parte di codice che carica i dati nel listbox1
     
    With Sheets("Comuni")
        LastRow = .Cells(Rows.Count, "A").End(xlUp).Row
        Dim i As Byte
    
        For i = 1 To LastRow
            ListBox1.AddItem .Cells(i, 1)                                 'prima colonna
            ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(i, 2) 'seconda colonna
        Next i
    End With



  • di Paperino78 (utente non iscritto) data: 02/11/2014 12:55:31

    Ciao, purtroppo non ho capito nulla! Immagina di parlare con un bambino, veramente io ed il vba non ci capiamo, purtroppo non ho molto tempo per imparare come funziona il vba quindi mi servirebbe ameno all'inizio una spiegazione passo-passo. So che posso essere noioso ma non ho al momento alternative.
    In sostanza non capisco se il codice del file allegato basta che lo copi nel foglio dove voglio creare lo stesso effetto, o se devo creare da zero una list box, o una userform. Ho visto che cliccando nel foglio uno appaiono i comuni interessati ma quelo modello è un userform? Oppure appare semplicemente interpretando il codice vba? Il nome ListBox1 è chiamato cos' perchè è un nome diciamo incrementale, oppure devo creare una listbox1 io? Io ho creato lo stesso foglio 'Comuni' e la stessa tabella in colonna A e B che c'è nell'esempio allegato ma non capisco come creare tutto quello che c'è nel foglio sheet1. Sono in alto mare, ma veramente alto!



  • di Paperino78 (utente non iscritto) data: 02/11/2014 16:22:56

    Rieccomi, rettifico ciò che ho scritto prima. Sono riuscito a sistemare quasi tutto, ma ragazzi na faticaccia

    Ora mi chiedevo come posso fare per impostare l'altezza del listbox1 ad una dimensione fissa? Ho provato a modificare i valori nella casella proprietà, oppure ad inserirli direttamente insieme al codice ma senza risultato. Mi rimane sempre lo scroll verticale che vorrei eliminare.



  • di lepat (utente non iscritto) data: 02/11/2014 17:05:41

    se imposti la dimensione della listbox in modo da contenere tutti i dati non avrai la barra di scorrimento



  • di Paperino78 (utente non iscritto) data: 02/11/2014 17:36:23

    Ok, trovato il valore da cambiare. Grassie a todos