› Excel e gli applicativi Microsoft Office › tendina dinamica
-
AutoreArticoli
-
buongiorno a tutti,
sto creando un foglio per eseguire dei preventivi. ho creato un database, dove ci sono tutte le prestazioni (Foglio procedure) e un altro foglio principale dove io compilo i vari campi (preventivo acuto).
In alto al foglio principale (preventico acuto) cella C10 scrivo parte del testo, e vorrei che in automatico apparissero tutte le prestazioni che contengono quella dicitura che sto inserendo in C10, sotto forma di tendina, nella cella E10. O in una tendina che credo. Così appena arrivo alla dicitura che mi interessa la seleziono dalla tendina. Le nomenclature che appaiono nella tendina sono quelle della colonna F nel foglio Procedure.
Mi piacerebbe che appaiono live... cioe che non devo scrivere tutto nella cella C10..... ma che basta delle parole... e lui mi dai i risultati nella tendina, da scegliere la decisione opportuna. (C10 deve essere un cerca... live)...
spero che qualcuno saprà darmi una soluzione al mio problema. ma sono sicuro di si, visto che mi avete già aiutato diverse volte!
vi ringrazio anticipatamente,
saluti e a presto
Marco
Allegati:
You must be logged in to view attached files.marco_budin wrote:dove ci sono tutte le prestazioni (Foglio procedure) e un altro
nel tuo file non esiste questo foglio , forse ti riferisci al foglio"30.08.2018" quale colonna devi visualizzare nella combobox?
Qual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Ciao Albatros 54,
grazie mille della tua risposta. Si scusami intendevo 30.08.2018, la cosa che dovrà apparire sarà la colonna F.
ti ringrazio in anticipo, e ti auguro una buona serata.
saluti
Marco
Una convalida dinamica doppia a cascata?
Da qualche parte ho un leggero tutorial... se sopravvivo alla giornata dovrei cercarlo 🙂
Ciao
io l'ho pensata cosi, nel foglio"PreventivoAcuto" ho inserito una combobox1,dove ci sono tutti le stringhe della colonna"F" del foglio("30082018" l'ho rinominato), che sono troppo lunghe, quando tu attivi il foglio"PreventiviAcuti" VBA esegue il codice associato a questo evento, e li inserisce in ordine alfabetico.Tu, invece di inserire la stringa nella cella"c10", comincia ad inserire la stringa nella combobox1, ti comparira mano mano che inserisci i valori le varie stringhe, se poi tu apri la combobox1 ti troverai immediatamente i valori che corrisèpondono ai caratteri che hai inserito, a questo punto fai click sulla stringa che ti interessa, e te la trovi nella cell "c10", se ho capito.
ti allego codice e file.
Option Explicit Private Sub ComboBox1_Click() Sheets("PreventivoAcuto").Range("c10") = ComboBox1.Text End Sub Private Sub Worksheet_Activate() Dim i As Long, j As Long, v As Variant Dim tmp As Variant v = Sheets("30082018").Range("F4:F899") For i = 1 To UBound(v, 1) - 1 For j = i + 1 To UBound(v, 1) If v(i, 1) > v(j, 1) Then tmp = v(i, 1) v(i, 1) = v(j, 1) v(j, 1) = tmp End If Next Next ComboBox1.List = v End SubQual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )Allegati:
You must be logged in to view attached files.Carino il sorting, io avrei implementato la copia del range in altra posizione, effettuato il sort in place e poi avrei copiato il range ordinato nella combo. Ho anche provato in effetti e funziona velocemente (naturalmente è Excel dipendente, mentre la soluzione di albatros è perfettamente VBA like e mi piace), con l'inconveniente che bisogna disattivare e poi riattivare gli eventi per impedire un loop spaziotemporale e la lacerazione del continuum cosmico 🙂
Private Sub Worksheet_Activate() Dim i As Long, j As Long, v As Variant Dim tmp As Variant Application.EnableEvents = False With Sheets("30082018") .Range("F4:F899").Copy .Range("AA1").PasteSpecial xlPasteValues .Range("AA1").CurrentRegion.Sort key1:=.Range("AA1"), Header:=xlNo v = .Range("AA1").CurrentRegion End With ComboBox1.List = v Application.EnableEvents = True End Subciao Ragazzi!
scusate se rispondo solo adesso, ma ero assente questi giorni! ho provato i due codici che mi avete dato! e chiaramente, senza che avessi dubbi funziona tutto alla perfezione come volevo!
come sempre vi ringrazio tanto per il vostro prezioso aiuto.
vi auguro una buona giornata, e alla prossima
Marco
Cosi tanto per confrontare le velocita di esecuzione, incolla la routine che ti posto nel modulo del foglio"30082018" e la esegui, dovrebbe essere piu veloce 😀 delle altre due
Sub confrontoVelocita() Dim j As Long Dim sn As Variant Dim StartTime As Date, EndTime As Date StartTime = Timer sn = Sheets("30082018").Range("F4:F899") With CreateObject("System.Collections.ArrayList") For j = 1 To UBound(sn) If sn(j, 1) <> "" And Not .contains(sn(j, 1)) Then .Add sn(j, 1) Next .Sort ComboBox1.List = Application.Transpose(.toarray()) End With EndTime = Timer MsgBox Format(EndTime - StartTime, "0.0") End SubQual è il punto di avere gusti diversi, se non mostrare che i cervelli lavorano diversamente, che pensiamo diversamente? ( Alan Turing)
Sempre il mare, uomo libero, amerai!
( Charles Baudelaire )L'oggetto ArrayList lo incontro per la prima volta... e non riesco a referenziarlo direttamente 🙄
Io ciò perso il sonno per poterlo capire 😀
Bè è ben documentato però forse non ho il Net Framework corretto.
In realtà referenziandolo così
ThisWorkbook.VBProject.References.AddFromguid "{BED7F4EA-1A96-11D2-8F08-00A0C9A6186D}", 2, 4lo vedo anch'io 😉
-
AutoreArticoli
