buongiorno ho visto nel video varie possibilità di utilizzo della combobox , ma vorrei porre questo quesito : se ho colonna A e B (codice e descrizione) in " foglio 4 "e in "foglio2 "devo inserire questi dati attraverso una combo che una volta scelto il codice mi faccia apparire sulla text la sua descrizione (del codice scelto in combo) come bisogna procedere ?. Grazie
Ciao Claudio. Supponendo che la combobox e la textbox si chiamino Combobox1 e TextBox1, farei così: codice = ComboBox1.Value Sheets("Foglio4").Activate Columns("A:A").Select riga_trovata = Selection.Find(codice).Row descrizione = Cells(riga_trovata, 2) TextBox1.Value = descrizione Cells(1, 1).Select Sheets("Foglio2").Select Cells(1, 1).Select = codice ' da modificare in base alle esigenze Cells(1, 2).Select = descrizione ' da modificare in base alle esigenze Queste istruzioni devono essere scritte in un evento, ad esempio il click di un pulsante oppure il change della combobox stessa. In pratica attivo il foglio 4, seleziono la colonna A (quella con il codice) e quindi utilizzo sulla colonna la funzione Find, per trovare la riga che contiene il valore presente nella combobox; poi assegno alla variabile descrizione il valore nella stessa riga ma nella colonna B; poi faccio scrivere la descrizione nella textbox; infine scrivo nel foglio2. Sull'ultima parte sono incerto, perché non so esattamente dove tu voglia scrivere i valori nel foglio2, quindi li ho solo scritti in A1 e B1. Fammi sapere.
@@NickTheGeek Private Sub CommandButton1_Click() Dim codice As Integer Dim riga_trovata As Integer Dim descrizione As Integer codice = ComboBox1.Value (errore debug) Sheets("Foglio4").Activate Columns("A:A").Select riga_trovata = Selection.Find(codice).Row descrizione = Cells(riga_trovata, 2) TextBox1.Value = descrizione Cells(1, 1).Select Sheets("Foglio2").Select Cells(1, 1).Select = codice ' da modificare in base alle esigenze Cells(1, 2).Select = descrizione ' da modificare in base alle esigenze End Sub Salve , ho provato le istruzioni man non si popola la combo e mi da errore , non capisco dove sbaglio .
Ciao Nick, non riesco a capire e soprattutto risolvere un problema con alcune combobox facenti parte dei noduli ActiveX, puoi aiutarmi a risolvere il problema? 1 ho creato e nominato svariati range presenti in una cartella per poi richiamarli con fa funzione indiretto; 2 ho assegnato il nome alle funzioni (nella scheda formule: CercaSg1, CercaSg2, CercaSg3 ecc. ecc.); Sg sta per sotto gruppo o menu; 3 entrando nelle proprietà di ogni combobox ho inserito il rif. di cella di destinazione nel campo LinKedCell, mentre nel campo ListFillRange ho scritto il nome delle funzioni ( CercaSg1, CercaSg2 ecc.). Problema: nella prima fase, le prime due combobox hanno riconosciuto regolarmente i nomi delle funzioni e in tal caso ho ottenuto i menu a discesa che mi interessavano, nella seconda fase di programmazione delle restanti combobox, pur effettuando le stesse e identiche procedure quest'ultime non riconoscono i nomi delle altre funzioni, ovviamente in tal caso non ottengo nessun elenco dinamico. Sai darmi una spiegazione tecnica? Ti ringrazio e ti saluto.
Ciao Ciro, non conosco i controlli ActiveX e le loro proprietà, se vuoi prova a mandarmi il file a nickthegeek.yt@gmail.com; ci dò un'occhiata ma non garantisco niente
Buongiorno, gradisco molto il suo metodo di spiegazione di in linguaggio per me nuovo MA che dopo molti anni mi sta appassionamndo. E' possibile 'puntare' direttamente a qualche lezione che vorrei rivedere in seguito ? grazie. dariora
Buon giorno Nick, è da poco tempo che seguo le tue spiegazioni per vba perchè sto cercando di imparare qualcosa, e ti vorrei chiedere come risolvere il problema che da una userform nella casella textbox data inserisco la data e poi con un tasto invia la inserisco in un secondo foglio ma qui la trovo come testo e non come data, come si può risolvere questo problema. Grazie
Ciao Fausto, ci possono essere diverse soluzioni, in base a com'è il tuo foglio e a quale ritieni più opportuna. 1) Se sai che in una specifica cella del foglio ci sarà sempre una data, puoi preformattare la cella come data direttamente da Excel (senza usare VBA) oppure 2) In VBA puoi convertire in data usando la funzione CDate; ad esempio se la cella in cui scrivere è la A1 e la casella di testo si chiama txtData, allora: Cells(1, 1) = CDate(txtData.Value) oppure 3) puoi usare la funzione Format: Cells(1, 1) = Format(txtData.Value, "dd/mm/yyyy") oppure 4) puoi usare la proprietà NumberFormat, ma in questo caso ti servono due linee di codice, una per scrivere il dato e un'altra per formattare: Cells(1, 1) = txtData.Value Cells(1, 1).NumberFormat = "dd/mm/yyyy" Non è detto che tutte funzionino, devi fare delle prove.
@@NickTheGeek Buon giorno Nick, volevo chiederti ancora un aiuto per creare delle caselle combobox combinate e cioè quando da una casella combobox es. clienti seleziono un cliente vorrei che nella seconda combobox apparissero solamente gli articoli di tale cliente. Ho provato a cercare tra i tuoi video ma non ho trovato questo lavoro. Ti ringrazio anticipatamente.
Ciao, trovi qualcosa di simile nel progetto finale (dal video 78), però non saprei indicarti il video esatto, che comunque è inserito in un discorso più ampio relativo al progetto, quindi senza vedere anche gli altri penso che sarebbe inutile. Per capire come fare mi dovresti dire come sono disposti i dati nel foglio, in particolare clienti e articoli.
@@NickTheGeek Allora, in un foglio ho fatto una tabella con i clienti, una tabella con gli articoli di un cliente ed un'altra tabella con gli articoli di un'altro cliente e poi con una userform una volta inserito tutti i dati mandarli in un foglio chiamato data base. Spero di essermi spiegato. Grazie
Ciao, complimenti e scusa se ti disturbo ancora, ma ho un problema che non riesco a risolvere: in una userform o una combobox con una scelta di numeri che va da 1 a 10 e ho 10 10 caselle di testo rese enable=false all'inizio. Vorrei che in funzione del numero n scelto nella combo si attivassero n caselle di testo. Come posso fare? Grazie ancora, Carmine
Ciao Carmine. Per fare quello che chiedi devi usare l'evento Change della ComboBox. Devi innanzitutto assegnare a una variabile il valore scelto nella combo, quindi fare un ciclo For Each per verificare ogni controllo all'interno della userform: se il controllo è di tipo TextBox, allora enabled deve diventare True. Inoltre devi impostare inizialmente a zero un contatore che viene incrementato di uno ogni volta che una textbox viene abilitata. Questo ti serve perché ad ogni ripetizione del ciclo devi verificare se il numero delle caselle già sbloccate è uguale al valore scelto nella combo: quando i due numeri sono uguali, devi uscire dal ciclo For Each. Di seguito ti metto un esempio di codice che potrebbe servirti; nota che all'inizio ho scritto anche un ciclo che imposta enabled a false per tutte le textbox della userform, in modo da partire sempre con la situazione iniziale corretta (tutto False). Fammi sapere. Private Sub ComboBox1_Change() For Each controllo In UserForm1.Controls 'disabilito tutte le textbox If TypeName(controllo) = "TextBox" Then controllo.Enabled = False Next controllo numero_caselle_da_sbloccare = CInt(ComboBox1.Value) 'qui converto in intero altrimenti rimane testo e non si può fare la verifica alla quart'ultima riga numero_caselle_sbloccate = 0 For Each controllo In UserForm1.Controls If TypeName(controllo) = "TextBox" Then controllo.Enabled = True numero_caselle_sbloccate = numero_caselle_sbloccate + 1 If numero_caselle_sbloccate = numero_caselle_da_sbloccare Then Exit For 'se il numero di textbox già sbloccate è uguale al valore scelto nella combo, il ciclo termina End If Next controllo End Sub
@@NickTheGeek Ciao, grazie mille. Funziona. Ho trovato su internet anche un altro metodo. Ho chiamato tutte le mie caselle di testo con txtTesto1, txtTesto2...txtTesto 10 e con un ciclo for ho utilizzato il seguente codice: Controls("txtTesto" & CStr(i)).Enabled = True e sembra funzionare. Comunque, davvero, fatti fare i complimenti perchè sei davvero bravo, anche se crei dipendenza....ahahha. Posso farti una domanda? sei un appassionato, un laureato in informatica o un ing informatico?
Sì se hai i controlli nominati progressivamente puoi fare anche in quel modo. In generale comunque ti consiglio di rinominare i controlli con nomi significativi, perché se ne hai molti allora poi diventa difficile ricordarsi cosa deve andare nella txtTesto4 piuttosto che nella txtTesto9. Sono solo appassionato di Excel. Grazie ancora per i complimenti.
Ciao premesso che sono agli inizi con VBA, che sono arrivato a questo video per caso facendo una ricerca e che approfondirò l'argomento seguendo la playlist che mi sembra ottima, ti volevo chiedere come fare per poter scrivere il valore selezionato nella combobox nella prima cella della prima riga libera di uno SPECIFICO foglio della cartella di lavoro :)
Ciao, supponendo che il foglio sia il Foglio1, e la combo sia la ComboBox1, il codice sarebbe questo: Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value Se vuoi farlo premendo un pulsante (CommandButton1), allora devi metterlo nell'evento click del pulsante: Private Sub CommandButton1_Click() Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value End Sub Se invece vuoi farlo ogni volta che il valore della combo viene modificato, allora devi metterlo nell'evento change della combo: Private Sub ComboBox1_Change() Sheets("Foglio1").Cells(1, 1) = ComboBox1.Value End Sub Fammi sapere se era questo che volevi.
@@NickTheGeek grazie mille per la risposta....il tuo canale era proprio quello che cercavo :) oltre ad essere molto preparato e spiegare in maniera impeccabile, sei anche molto gentile e disponibile.... grazie ancora
Ciao Nick,nel video a 6:30 scrivi combox1.additem (spazio) cell(i,1). Domanda quali sono i casi e perche non si deve scrivere niente (spazio),io avrei scritto= al posto dello spazio vuoto.
Ciao, il simbolo = si usa quando vuoi assegnare un valore a qualcosa, tipicamente una variabile o una proprietà, ad esempio: mia_variabile = 5 txtDescrizione.Width = 100 AddItem è un metodo della combobox, quindi un'azione che si usa per fare qualcosa, in questo caso aggiungere un valore alla combo. Essendo un metodo non dobbiamo assegnargli alcun valore, ma dare un parametro, cioè dire cosa vogliamo aggiungere; per farlo quindi lasciamo solo lo spazio. Fammi sapere se è chiaro.
Ciao Nicola, sto seguendo con molta attenzione il tuo corso, fin dal primo video. In questi ultimi video sulle userform e applicando i tuoi insegnamenti su di un mio file, mi sono reso conto di avere un esigenza: e' possibile avere sulla userform una casella combinata in cui, cliccando la freccia laterale mi eviti di scrivere tutte le volte un dato che magari è già presente su quella colonna del foglio di lavoro? Non so se mi sono spiegato bene....in pratica avere sulla user form il suggerimento che si ha su un foglio, in una cella, cliccando sul tasto destro e scegliendo l'opzione " seleziona da elenco a discesa ".......Resto in attesa di tua gentile risposta...credo che la cosa possa essere di interesse anche agli altri....Intanto ti ringrazio anticipatamente se mi vorrai rispondere
Ciao Riccardo, non penso di aver capito bene. Quando dici che vuoi evitare di "scrivere tutte le volte un dato che magari è già presente su quella colonna del foglio di lavoro", di quale colonna stai parlando? Una che è già presente nel foglio di lavoro? E dopo aver scelto il valore cosa dovrebbe succedere?
@@NickTheGeek Per spiegarti bene.....ipotizza di star compilando un campo di una userform corrispondente ad una cella in una colonna del foglio dove ci siano tutte le citta italiane. sul foglio di lavoro puoi evitare di scrivere una città che magari è già presente cliccando sul tasto dx del mouse e scegliendo l'opzione " selezione dall'elenco a discesa"....quell'opzione ti visualizza tutte le città che hai già inserito e scegliendola, excel te la piazza nella cella in cui sei. Io vorrei poter fare la stessa cosa: sto compilando la userform arrivo al campo " città", vorrei, che so, premere una freccetta laterale ( tipo combobox) la quale mi fa vedere tutte le città che fino a quel momento ho inserito e cliccandoci sopra, me la inserisce in quel campo....si può fare? Grazie....gentilissimo
Ho visto diverse volte questo video per capire come gestire degli intervalli dinamici in una combobox inserita in una cella del foglio. Per rendere dinamico il nome dell'intervallo ho utilizzato una cella di servizio che grazie al cerca.vert mi restituisce il nome dell'intervallo desiderato. Pur avendo cercare di applicare il codice così come lo hai spiegato in questo video, non sono riuscito a raggiungiere il mio obbiettivo. Posso chiederti cortesemente di fornirmi dei ragguagli in merito? Ti ringrazio e ti saluto. P.s. alla fine di tanta consulenza ti faremo una camicia su misura in quanto è ciò che produciamo. Grazie e buona giornata Ciro
Ciao Nick, scusa il ritardo, le problematiche da me riscontrato con la casella combinatoria (combobox activeX) ho capito che sono generate da un problema legato solo al mio software excel che dovrò reinstallare. Riguardo il codice VBA della macro, ho verificato i range da copiare dal foglio 1 (denominato CLIENTI) e incollare (solo valori) nel record della tabella (denominata DbClientiX) del foglio 2 (denominato (DB_CLIENTI) Il foglio 1 (CLIENTI) ha un range (AU17:AU90) composto da celle che processano (con le funzioni) i dati rilevati da altre celle dello stesso foglio, mentre nel foglio 2 (DB_CLIENTI) c’è una tabella (denominata DbClientiX) composta da 77 colonne che partono dalla cella (“C18”). In quest’ultima dovranno essere popolati i record composti dai suddetti valori. Non ti ho inviato la cartella perché ha raggiunto il pesi di 12 MB, se vuoi te la invio tramite WeTransfer. Se mi permetti, ho riscontrato che sulla programmazione delle combobox activeX c’è molto poco sul web, nonostante sia un comando che probabilmente è stato pensato per svariate funzioni. Secondo un mio modesto parere, dei tutorial dedicati susciterebbero molti interessi da parte di visitatori. Ringraziandoti anticipatamente per la tua gentile disponibilità ti saluto. Ciro
Usa ho dimenticato i rif. dei range: foglio 1 range: (AU17:AU24) in foglio 2 rang: da colonna 3 a colonna 10; foglio 1 range: (AU26:AU30) in foglio 2 rang: da colonna 12 a colonna 16; foglio 1 range: (AU39:AU53) in foglio 2 rang: da colonna 25 a colonna 39; foglio 1 range: (AU57:AU84) in foglio 2 rang: da colonna 43 a colonna 70; foglio 1 range: (AU86:AU90) in foglio 2 rang: da colonna 72 a colonna 16.
Proverei così: Sub test() Application.ScreenUpdating = False Sheets("DB_CLIENTI").Activate prima_riga_vuota_db = Cells(Rows.Count, "C").End(xlUp).Row + 1 For i = 3 To 10 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 12 To 16 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 25 To 39 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 43 To 70 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i For i = 72 To 76 Sheets("CLIENTI").Activate Cells(i + 14, "AU").Copy Sheets("DB_CLIENTI").Activate Cells(prima_riga_vuota_db, i).Select Selection.PasteSpecial Paste:=xlPasteValues Next i MsgBox ("Finito!") End Sub In sostanza verifico qual è la prima riga libera nel foglio DB, e quindi faccio cicli che copia una alla volta tutte le celle; i cicli sono 5 perché tanti sono gli intervalli da considerare. Con la riga : Cells(i + 14, "AU").Copy sfrutto il fatto che la colonna dove scrivere il valore in DB è sempre più piccola di 14 rispetto alla riga da cui prendere il dato in CLIENTI (Ad esempio AU39 va nella colonna 25, e AU86 va nella colonna 72). L'istruzione che incolla è quella speciale per incollare solo i valori. Ovviamente ho supposto che la riga 17 della colonna C del foglio DB sia occupata, altrimenti il calcolo della prima riga libera non funziona. Mi dispiace ma non conosco i comandi ActiveX, quindi non ci farò dei video. Fammi sapere per la macro. Ciao
Buongiorno, seguo da tempo e trovo molti spunti interessantissimi e per questo ringrazio. Vagando in rete ho trovato codice per caricare una combobox eliminando i duplicati ma non funziona. Sono un neofita e sicuramente commetto qualche errore banale allego il codice: Dim CL As Range Dim Intervallo As Range Dim Elenco As New Collection Dim Valori As Variant Sheets("Unione").Select Set Intervallo = Range("C1162", Range("C10000").End(xlUp)) On Error Resume Next For Each CL In Intervallo Elenco.Add CL.Value, CStr(CL.Value) Next On Error GoTo 0 With Worksheets("Unione") .CMBNomeCliente.Clear For Each Valori In Elenco .CMBNomeCliente.AddItem Valori Next End With End Sub Ringrazio in anticipo