Textbok collegata con Combobox



  • Textbok collegata con Combobox
    di Ronciglione data: 24/04/2016 22:19:36

    Salve a tutti,

    vorrei collegare questa combobox con la compilazione di vari textbox chi mi può aiutare.

    Allego file e spiego

    Ho un foglio dove è presente un listino con Codice prodotto, articolo, prezzo e IVA

    Una volta che l 'utente ha scelto il prodotto si popolasse la textbox con il prezzo e poi lo si andasse inserire nel foglio preventivi. Ovviamente con la possibilità di inserire N prodotti, mi potete aiutare?

    Grazie



  • di alfrimpa data: 24/04/2016 23:48:30

    Ciao Ronciglione

    Per visualizzare il valore della combo nella textbox basta la prima macro che vedi sotto.

    Il resto mi è un po' meno chiaro.

    Tu vorresti di volta in volta scegliere il prodotto e compilare il foglio preventivo? Se è così non capisco proprio il codice (lo hai scritto tu?) presente in CommandButton72_Click() che riporto sotto; io ho provato ad eseguirlo ma fa un macello i dati vengono inseriti a casaccio.

    Quali sono i campi del foglio Clienti che devono finire in preventivo?

    Cerca di fare un po' di chiarezza.

    Alfredo   
     
    Private Sub ComboBox69_Click()
    Me.TextBox1.Value = Me.ComboBox69.Value
    End Sub
    
    
    Private Sub CommandButton72_Click()
        j = 2 + ComboBox69.ListIndex
      
        With Sheets("Preventivi")
            .Range("M6") = Sheets("clienti").Cells(j, 2)
            .Range("M7") = Sheets("clienti").Cells(j, 3)
            .Range("M8") = Sheets("clienti").Cells(j, 4) & " - " & Sheets("clienti").Cells(j, 5)
            .Range("B11") = Sheets("clienti").Cells(j, 8)  'pagamento
            .Range("G11") = Sheets("clienti").Cells(j, 9)  'banca
            .Range("B14") = Sheets("clienti").Cells(j, 7)  'p.iva
            .Range("D14") = Sheets("clienti").Cells(j, 11) 'email
        End With
        FormCli2.Hide
        End Sub
    






  • di Ronciglione data: 25/04/2016 11:49:08

    Ciao Alfredo,

    riallego il file modificato e corretto.

    Volevo che nella textbox comparisse il prezzo e poi vorre la possibilità che se l utente scegliesse piu articoli questi vengano inseriti uno dopo l'altro nel foglio preventivi.

    Grazie



  • di alfrimpa data: 25/04/2016 12:03:38

    Infatti.

    Appena ho un attimo di tempo (tra oggi e domani) ti rispondo.

    Alfredo





  • di Ronciglione data: 25/04/2016 13:42:46

    Ti ringrazio Alfredo, aspetto fiducioso.



  • di alfrimpa data: 26/04/2016 13:44:44

    Ciao Ronciglione

    Come promesso ti allego file (EsperimentoRonciglione.xlsm) dove credo di aver risposto al tuo quesito.

    Ho dovuto ricreare la tua userform frmClienti ed ho variato l'ordine delle colonne sul foglio Clienti.

    Fammi sapere se va bene.

    Alfredo

    P.S. Sotto vedi il codice utilizzato nella userform1.
     
    Private Sub ComboBox1_Click()
    Dim ur As Long
    Dim tabella As Range
    ur = Worksheets("Clienti").Cells(Rows.Count, 2).End(xlUp).Row
    Set tabella = Worksheets("Clienti").Range("A2:J" & ur)
    Me.TextBox1.Value = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, tabella, 10, False)
    End Sub
    
    Private Sub CommabdButton2_Click()
    Dim i As Integer
    Dim ur As Long
    Dim tabella As Range
    On Error GoTo Errore
    ur = Worksheets("Preventivi").Cells(Rows.Count, 7).End(xlUp).Row
    Set tabella = Worksheets("Clienti").Range("A2:J" & ur)
    Worksheets("Preventivi").Range("G" & ur + 1).Value = Application.WorksheetFunction.VLookup(Me.ComboBox1.Value, tabella, 2, False)
    Worksheets("Preventivi").Range("h" & ur + 1).Value = Me.ComboBox1.Value
    Worksheets("Preventivi").Range("i" & ur + 1).Value = Me.TextBox1.Value
    Me.TextBox1.Value = ""
    Me.ComboBox1.Value = ""
    Exit Sub
    Errore:
    MsgBox "Occorre inserire i dati"
    End Sub
    
    Private Sub CommandButton1_Click()
    Me.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
    Dim i As Long
    Dim ur As Long
    ur = Worksheets("Clienti").Cells(Rows.Count, 2).End(xlUp).Row
    For i = 2 To ur
        Me.ComboBox1.AddItem Worksheets("Clienti").Range("a" & i).Value
    Next i
    End Sub






  • di Ronciglione data: 27/04/2016 23:23:44

    Mille grazie Alfredo, hai usato la funziona cerca vert vero? hai fatto benissimo ottima soluzione.

    Un'altra domanda:

    Quando digito nella combobox esempio X1 non mi trova l'articolo Penne X1, me lo trova solo se inizio con Penne.

    Che tu sappia c'è qualche modo per fare una ricerca di quel tipo, ovvero:

    io scrivo X1, e ipotizzando che abbia due articoli X1 e X11 mi escono entrambi e poi scelgo?


    Grazie mille della disposnibilità



  • di alfrimpa data: 28/04/2016 11:33:02

    Ciao Ronciglione

    La cosa che mi chiedi l'avevo già fatta ma non con una combobox ma con la combinazione di una textbox ed una listbox.

    Sto provando a farlo anche con una combo ma al momento non riesco; se proprio non dovessi farcela (e se non interviene qualcun altro) ti propongo l'altra soluzione.

    Alfredo





  • di Ronciglione data: 30/04/2016 12:05:18

    Grazie Alfredo!



  • di alfrimpa data: 02/05/2016 12:46:26

    Ciao Ronciglione

    Innanzitutto perdona il ritardo di questa mia risposta.

    Ti ho allegato file dove ho cercato di rispondere al tuo quesito.

    Quando apri il file vai sul foglio "Preventivi" e clicca sul pulsante "Inserimento Preventivi".

    Si aprirà una maschera dove se clicchi sul pulsante a destra della casella di testo "Articoli" (quello con la freccetta rivolta verso il basso) ti si aprirà una tendina per la scelta.

    Una volta cliccato su un articolo il relativo prezzo verrà visualizzato nella casella di testo "Prezzo"; se nella casella di testo "Articoli" digiti solo qualche lettera nella tendina saranno visualizzati solo gli articoli che contengono le lettere digitate.

    Una volta fatta la scelta clicca sul pulsante "Inserisci" e tutti i dati relativi all'articolo prescelto saranno inseriti sul foglio "Preventivi".

    Prova e fammi sapere.

    Alfredo





  • di Ronciglione data: 02/05/2016 22:49:38

    L'ho provato e mi sembra una vera e propria bomba.

    Domani lo provo meglio

    Inchino ad Alfredo!



  • di alfrimpa data: 02/05/2016 23:01:49

    Ciao Ronciglione

    Sono un dinamitardo?

    Grazie a te che mi hai fatto divertire e grazie dei complimenti

    Alfredo

    P.S. Non so se lo hai notato ma quella che vedi sulla userform non è una casella combinata . Prova ad indovinare cos'è

    PP.SS. Ma te lo avevo già detto





  • di Ronciglione data: 04/05/2016 22:09:27

    Ciao Alfredo,

    stavo guardando il codice, e rinnovo l'inchino.

    Ho riscontrato un problema:

    inserendo un elenco maggiore di articoli (500), e cliccando su uno di essi, mi da errore e mi dice: "impossibile trovare la prorpietà Vlookup per la classe Worksheetfuction, evidenziandomi questa riga:

    Sinceramente non capisco come mai, perchè il prezzo nella colonna c'è e non è zero.


     
    Me.TextBox2.Value = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, TABELLA, 10, False)



  • di Ronciglione data: 04/05/2016 22:39:31

    Come non detto, il problema non era quel Cerca Vert, ma l'altro nella compilazione dei fogli del preventivi. che non avendo gli messo il codice mi dava errore.

    Me la voglio gustare per bene questa macro.


    Io essendo molto alle prime armi ci sono alcuni passaggi che mi sono poco chiari, li voglio un attimo capire, poi eventualemente ti chiedo spiegazioni!

    Grazie ancora!



  • di alfrimpa data: 04/05/2016 22:53:24

    Se hai bisogno di spiegazioni/chiarimenti (anche più generali) non hai che da chiedere.

    Alfredo





  • di Ronciglione data: 07/05/2016 11:47:27

    Ciao Alfredo,

    sfrutta la tua disponibilità; premessa che non sono affatto un espero, immaginami alle scuole elementari, non riesco a capire bene questa parte, che è il cuore:

    Con "If s = "Carica Dati" .... non riesco a capire le istruzioni da li in avanti

     
    Private Sub mCaricaListBox(ByVal s As String)
    
        Dim lRiga As Long
        Dim lng As Long
        
        With sh
            lRiga = .Range("A" & .Rows.Count).End(xlUp).Row
        End With
        
        With Me.ListBox1
            If s = "CaricaDati" Then
                For lng = 2 To lRiga
                    .AddItem (sh.Range("A" & lng).Value)
                Next
            ElseIf s = "FiltraDati" Then
                .Clear
                For lng = 2 To lRiga
                    If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then
                        .AddItem sh.Range("A" & lng).Value
                    End If
                Next
            End If
        End With
        
    End Sub



  • di alfrimpa data: 07/05/2016 17:43:41

    Ciao Ronciglione eccomi qua.

    Spero di essere il più elementare possibile sperando tu possa seguirmi.

    Innanzitutto una premessa; in VBA si possono scrivere due tipi di procedure: procedure Sub e procedure Function.

    Le procedure Sub sono un’insieme di istruzioni che eseguono un’azione; esempio:

    Sub macro1()
    Range(“A1”).Value = “Ronciglione”
    End Sub

    Con questa macro inseriamo la stringa “Ronciglione” in cella A1.

    Le procedure Function sono in’insieme di istruzioni VBA che non compiono azioni ma restituiscono risultati in base ai parametri che le vengono passati; esempio:

    Function AreaTriangolo(base, altezza)
    AreaTriangolo = base * altezza / 2
    End Function

    In Excel non esiste la funzione AreaTriangolo ma se noi scriviamo in una cella (es. C1) =AreaTtriangolo(a1;b1) se in a1 ed in b1 mettiamo i valori di base ed altezza in C1 avremo l’area del triangolo.

    Di norma le Function hanno dei parametri (ma potrebbe anche darsi il caso che non ne abbiano).

    Le Sub, invece, sono di solito usate senza parametri ma c’è anche la possibilità che un argomento vi sia.

    Se noi scriviamo Private Sub mCaricaListBox(ByVal s As String) “s” è un parametro (argomento) della sub mCaricaListBox.
    Quindi in questa sub, che viene eseguita quando si apre la userform, passiamo come parametro la stringa “Carica dati”
    Private Sub UserForm_Initialize()
    Set sh = ThisWorkbook.Worksheets("Clienti")
    UserForm1.ListBox1.Visible = False
    Call mCaricaListBox("CaricaDati")
    End Sub

    Ed in quest’altra, che viene eseguita ogni volta che avviene una modifica nella TextBox1, viene passato come parametro di mCaricaListBox la stringa “Filtra dati”

    Private Sub TextBox1_Change()
    UserForm1.ListBox1.Visible = True
    Call mCaricaListBox("FiltraDati")
    End Sub

    Con questa porzione di codice:

    With Me.ListBox1
    If s = "CaricaDati" Then
    For lng = 2 To lRiga
    .AddItem (sh.Range("A" & lng).Value)
    Next
    ElseIf s = "FiltraDati" Then
    .Clear
    For lng = 2 To lRiga
    If InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text) Then
    .AddItem sh.Range("A" & lng).Value
    End If
    Next
    End If
    End With

    Se a mCaricaListbox viene passato come argomento “Carica dati” viene eseguita la prima parte (sino a Next) del codice ossia vengono aggiunte alla ListBox1 tutte le voci da A2 sino all’ultima cella piena del foglio “Clienti”.

    Se, invece, viene passato il parametro “Filtra dati” (cioè quando stiamo modificando la TextBox1) l’istruzione

    InStr(sh.Range("A" & lng).Value, Me.TextBox1.Text)

    Fa si che vengano caricate nella ListBox1 le sole voci del range A2:An al cui interno siano presenti le lettere digitate nella TextBox1.

    Le cose da dire sarebbero ancora tante ma mi fermo qui sperando di essere stato sufficientemente chiaro nella esposizione e, qualora non lo fossi stato, non esitare a chiedere nuovamente.

    Alfredo






  • di Ronciglione data: 08/05/2016 14:42:13

    Estremamente chiaro.

    Una cosa Alfredo, sicuramente sarà una domanda stupida ed elementare:

    For lng = 2 To lRiga

    cosa esprime? ci sono le due variabili (lng e lRiga) ma perchè 2?

    Se provo a mettere 1, non cambia nulla, almeno provando, non cambia nulla, pensavo che fosse la riga di inizo di lettura dal foglio Clienti, e invece no.

    Altra cosa, "carica dati" e "filtra dati" la prima fa comparire tutti i dati nel menù a tendina, giusto? la seconda invece effettua la ricerca, la prima non necessarimanete ci deve essere, se per esempio utilizzassi solamente la sub "filtra dati"



  • di alfrimpa data: 09/05/2016 12:16:16

    Ciao Ronciglione

    Cit. "cosa esprime? ci sono le due variabili (lng e lRiga) ma perchè 2?
    Se provo a mettere 1, non cambia nulla, almeno provando, non cambia nulla, pensavo che fosse la riga di inizo di lettura dal foglio Clienti, e invece no."

    Il numero 2 indica la riga 2; se metti 1 nella listbox viene caricata anche la cella A1 ossia la parola "Descrizione" che a te non serve.

    Cit. "For lng = 2 To lRiga cosa esprime? ci sono le due variabili (lng e lRiga)".

    Questo è un ciclo For...Next

    I cicli si utilizzano quando si devono eseguire operazioni ripetititve.

    Si lng e lRiga sono due variabili; la prima "scandisce" ogni step del ciclo e la seconda viene utilizzata per memorizzare il numero dell'ultima riga piena della colonna A del foglio Clienti.

    Ti faccio un altro esempio

    For I = 2 to to 10
    Cells(i, 1). Value = I
    Next I

    Con queste istruzioni vengono riempite le celle da A2 ad A10 con i valori da 2 a 10.

    Quanto all'ultima domanda il Carica dati" potrebbe anche eliminarsi (e lasciare solo "Filtra Dati"); in tal modo, però, all'attivazione della forme nella listbox non vedresti nulla; questa va a caricarsi quando inizi a digitare qualcosa nella textbox.

    Spero di essere stato chiaro.

    Alfredo






  • di Ronciglione data: 14/05/2016 11:16:27

    Ciao Alfredo,

    scusa se ti rispondo solo oggi, ma sono stato a letto con un febbrone da cavallo.

    Ti ringrazio per l'ultima spiegazione, e ti vorrei chiedere un altra cosa.


    Ipotizziamo di avere un file così creato per fare i preventivi.

    Come potrei fare, sempre tramite macro, avere anche il prezzo di acquisto con il ricarico applicato?

    MI spiego meglio;
    Il foglio una volta compilato èuò essere stampato e dato al "cliente" ma sarebbe utile anche poter aggiungere sempre nello stesso foglio una riga (è un esempio) in cui viene scritto il prezzo costo e il ricarico fatto per la vendita.
    Avresti qualche idea in merito, e come poterlo fare?

    Grazie ancora

    =========================

    Pensavo....

    Se nella Userform si inserisce un optionbutton
    che una volta cliccato fa attivare due textbox uno con prezzo di costo e uno di vendita, e in una terza textbox la % di ricarico. Ma allo stesso tempo disattiva la possibilità di utilizzare l'altra parte della userform dove si può cercare i prodotti. Cosa ne pensi è fattibile, o è una possibilità lunga e complicata?




  • di alfrimpa data: 15/05/2016 18:02:39

    Ciao Ronciglione

    Per fare si può fare quasi tutto con il VBA ma dovresti avere i dati che ti interessano scritti da qualche parte.

    Per semplicità, ad esempio, sul foglio clienti, se per ogni prodotto in due colonne indichi prezzo di costo e prezzo di vendita si possono andare a prendere i dati da lì.

    Cerca di fare un esempio concreto allegando il file e ripartiamo da lì.

    Alfredo





  • di Ronciglione data: 17/05/2016 22:37:02

    Ciao Alfredo,

    sto provando ad elaborare, a breve ti sottopongo la soluzione facile e con i mezzi che conosco.

    E ti chiederò cosa ne pensi e una mano, perchè adesso mi sono bloccato, ma voglio provare ancora.



  • di Ronciglione data: 22/05/2016 15:17:47

    Ciao Alfredo,

    mi trovo in un altro momento di stallo.

    Ti allego file

    Ti spiego.

    Come vedi questo file di esempio, è per il fatto che io una volta che seleziono alcune voci poi voglio fare in modo che l'utente inserisca nella textbox 2 il prezzo di costo e mi dia così la percentuale di ricarico nella textbox 3. Ma non riesco a far fare questa operazione, nel senso pur avendo scritto la formula tra le varie textbox non mi da il risultato ma la Textbox3 rimane vuota
    Riesci ad aiutarmi?
    Avevo provato questa formula (non presente nel file allegato perchè cancellata)
    TextBox3.Value = ((CLng(TextBox1.Value) * 100)/ CLng(Textbox2.Value)) - 100
    Sarebbe poi bello fare in modo che nel caso la percentuale sia oltre 300 non sottrarre i 100


    Grazie



  • di Ronciglione data: 22/05/2016 19:29:05

    Dovrei aver risolto così

    Però ho alcune problematiche

    Non riesco a limitare i decimali nella Textbox3 e nel caso nel textbox2 cancello il numero mi va in debug
     
    Private Sub ComboBox1_Click()
    Dim p As Integer
    p = ComboBox1.ListIndex
    p = p + 2
    TextBox2.Value = Format(TextBox1, "#,###.00")
    TextBox3.Value = Format(TextBox3, "#,###.00")
     TextBox1.Text = Range("b" & p).Value
     TextBox2.SetFocus
     If TextBox2 = "" Then
     MsgBox "Inserire prezzo di costo"
     Else
     
     End If
     
    End Sub
    
    Private Sub TextBox2_Change()
    TextBox3.Value = ((TextBox1.Value * 100) / TextBox2.Value) - 100
    End Sub
    
    Private Sub UserForm_Activate()
    Dim cella As Range
    Range("a2:a6").Select
    For Each cella In Selection
        UserForm1.ComboBox1.AddItem cella.Value
    Next
    End Sub



  • di alfrimpa data: 23/05/2016 18:47:58

    Ciao Ronciglione

    Prova a modificare la routine associata alla TextBox2 come vedi sotto e dovrebbe andare.

    Poi visto che ci siamo imposterei l'allineamento delle tre textbox a destra visto che si tratta di numeri (ma queste sono sciocchezze).

    Alfredo 
     
    Private Sub TextBox2_Change()
    On Error Resume Next
    TextBox3.Value = Format(((TextBox1.Value * 100) / TextBox2.Value) - 100, "#,###.00")
    End Sub
    






  • di Ronciglione data: 25/05/2016 22:30:11

    E se voglio non cifre decimali nella Textbox, ma arrotondamento per eccesso?

    Cosa ne pensi della soluzione Alfredo, ti sembra buona?

    Poi adesso la devo integrare con la possibilità di inserire nel foglio la voce selezionata e il ricarico



  • di alfrimpa data: 26/05/2016 10:47:20

    Ciao Ronciglione

    Per l'arrotondamento per eccesso senza decimali prova il codice qui sotto associato alla TextBox2.

    Alfredo
     
    Private Sub TextBox2_Change()
    On Error Resume Next
    TextBox3.Value = Application.WorksheetFunction.Ceiling(Format(((TextBox1.Value * 100) / TextBox2.Value) - 100, "#,###"), 1)
    End Sub






  • di Ronciglione data: 28/05/2016 00:59:23

    Ciao Alfredo, volevo ultimare il mio foglio con le due sub crete (la tua e la mia) e quella che ho trovato su un sito utilizzata per listino (sito motlo valido, non posso inserirlo per questioni di spam).

    provando a riportarlo, mi va in debug su elemen, essendo una variabile, ho provato ad esplicitarla, ma sempre in debug mi riesci ad aiutare? soprattutto a capire cosa rappresenta.

    Confido, ancora una volta in te!

    Allego file!

     
     
    Private Sub ListBox1_Click()
    1.	posiz = (ListBox1.ListIndex + 1) * 15 - 14 ' calcolo la colonna
    2.	If ListBox2.ListCount >= 1 Then ListBox2.Clear
    3.	i = 3
    4.	Do Until Sheets("Listino").Cells(i, posiz) = Empty
    5.	With Sheets("Listino")
    6.	elemen = .Cells(i, posiz + 1)
    7.	End With
    8.	ListBox2.AddItem elemen
    9.	i = i + 1
    10.	Loop
    
    End Sub
    End Sub



  • di alfrimpa data: 28/05/2016 11:01:31

    Ciao Ronciglione

    Per capirlo occorre che alleghi il file con la macro inserita e con i dati perchè non sono in grado di ricostruirlo da solo.

    Da quel che si può intuire dal listato siamo in presenza di due listbox (non so se su userform o su foglio); la prima sembrerebbe essere vuota e la seconda viene alimentata, previa cancellazione se vi sono dati, facendo un clic sulla prima prendendo i dati dal foglio LISTINO a partire dalla riga 3 (non si capisce in quale colonna che viene determinata dalla variabile posiz) sino alla prima cella vuota.

    Capirai che in questa situazione senza file e relative listbox non si possa dir molto.

    Alfredo

    P.S. Come non detto; ho visto ora che il file è allegato (prima mi collegavo con l'iPad e non potevo aprire il file)





  • di alfrimpa data: 28/05/2016 18:47:20

    Ciao Ronciglione

    C'è un solo errore:

    la variabile elemen dovrà contenere parole e quindi va dichiarata come String (e non come Range) ed è per questo motivo che ti dava errore (non puoi mettere un range in una listbox né con AddItem né in altri modi).

    Nella variabile elemen (ma la puoi chiamare in qualsiasi modo) viene memorizzato ogni stringa del foglio Listino relativa alla voce selezionata in Listbox1.

    Fatto questo (per quel che capisco) funziona tutto.

    Alfredo





  • di Ronciglione data: 29/05/2016 18:08:23

    Ciao Alefredo,

    per elemen ho risolto considerandola matrice, o così ho inteso ed esplicitando Dim elemen

    Ma c'è un altro problema, tanto per cambiare

    Quando clicco un prodotto della seconda categoria (Es Mercurio) mi viene il prezzo sempre e solo della prima categoria, stessa identica cosa accade per tutte le categoria, nella Textbox è presente sempre e solo il prezzo della prima categoria, non riesco ad individuare l'errore.

    Grazie infinite

    Riallego file



  • di Ronciglione data: 31/05/2016 18:56:28

    Non riesco proprio a capire dove sbaglio ho riguardato più volte tutto, ma nulla, mannaggia!

    Alfredo io continuo a riporre tutte le mie speranze su di te!



  • di alfrimpa data: 01/06/2016 12:06:31

    Ciao Ronciglione

    Ho guardato il file e, innanzitutto, non capisco perché c'è una differenza tra l'intestazione di "Area Cimiteriale-0058" che è questa

    Codice Descrizione Articoli Note Forn. CodFor U.M. Data Valore PREZZO Tot. RDS RDS RDS RDS

    e le altre

    Codice Descrizione Note Forn. CodFor U.M. Data Prezzo Util Vendita RDS RDS RDS RDS

    Puoi spiegare il perché di questa differenza? Non dovrebbero essere uguali? E' un errore o cos'altro?

    Nelle caselle di testo "Prezzo di listino", "Prezzo di vendita" e "Sconto" cosa ci deve andare? Dammi i riferimenti delle colonne del foglio "Listino".

    Comunque stavo pensando di riorganizzare (secondo il mio punto di vista) il tuo progetto; se mi dai carta bianca e un po' di tempo lo faccio,

    E' importante però che tu mi chiarisca i punti che ho detto in precedenza.

    Alfredo.

    P.S. per il weekend sono fuori ma cerca di rispondermi ad inizio settimana prossima.





  • di Ronciglione data: 01/06/2016 22:34:31

    Ciao Alfredo,

    grazie della risposta.

    Quei campi si evidentemente mi è sfoggito l'intestazione delle varie colonne, la prima:

    Codice, Descrizione, Articoli, Note, Forn., CodFor, U.M., Data, Valore, PREZZO, Tot., RDS, RDS, RDS, RDS

    è quella corretta.

    Prezzo di listino è la Textbox ce si deve popolare selezionando la voce corretta, prezzo di vendita è il prezzo che deve essere inserito poi sul foglio (messo dall'utente) e sconto è l'operazione che avviene quando il PV è inferiore al prezzo di listino e viene in automatico.

    Ti do carta bianca assolutamente!



  • di alfrimpa data: 04/06/2016 17:06:31

    Scusa Ronciglione una domanda.

    Le voci che appaiono nella prima listbox (quella a sx) sono fisse o possono variare nel tempo?

    Alfredo





  • di Ronciglione data: 05/06/2016 11:10:51

    Sono variabili nel tempo (dovrebbero diventare circa 9-10) così come sono variabili quelle nel ListBox2



  • di alfrimpa data: 06/06/2016 14:45:17

    Ciao Ronciglione

    Ti allego file (RonciglioneOrdiniAlfrimpa_2.xlsm) dove c'è la prima parte del lavoro.

    Come potrai vedere ho un po' stravolto le cose.

    Quello che ti chiedo per proseguire è la compilazione del foglio1 con il prezzo di listino per ogni voce; quello di vendita verrà inserito dall'utente e lo sconto dovrà apparire automaticamente sulla userform é corretto?

    Ho anche cambiato la userform utilizzando degli OptionButton al posto della listbox1.

    Se sul foglio2 aggiungi altre voci (sino a 10) nella maschera vedrai apparire i relativi OptionButton.

    Ma ora è presto per parlare di questo; fammi avere il foglio1 compilato e ne riparliamo.

    Alfredo





  • di Ronciglione data: 06/06/2016 21:43:26

    Ciao Alfredo,

    ti spiego, quello che tu hai creato va benissimo ed è anche molto intuitivo e bello, però non vorrei che fosse troppo vincolato.
    Io ho detto 10 come numero, ma in un futuro (magari fra qualche mese) potrebbero essere anche di più. PEr quanto riguarda l'inserimento di altri prodotti (ad esempio nella categoria Mercurio) non dovrebbero esserci problemi vero?

    Un altra cosa da non sottovalutare, non vorrei che fosse una Macro che appesantisse molto, perchè con la prima macro che tu hai creato (quella dove digitando alcune lettere trova il prdotto), l'ho compilata con 5 mila prodotti ed è diventata scattosa, non vorrei che anche questa, poi con l'ampliamente diventasse molto pesante.

    Grazie per quello che stai facendo.



  • di alfrimpa data: 07/06/2016 11:35:32

    Ciao Ronciglione

    Mi fa piacere che hai apprezzato il mio "lavoro" che era teso solo a creare qualcosa di più "carino" nella presunzione (sbagliata) che le voci della listbox1 fossero in numero limitato. Se così non è tormiamo a lavorare sulle due listbox.

    Quanto alle tue perplessità sull'"appesantimento" ti dico che le macro non influiscono affatto; quello che incide è il numero dei dati che queste devono gestire. Se questi sono poche decine (o qualche centinaia) non dovrebbero esserci problemi. Se, invece, questi sono migliaia allora potrebbe esserci qualche problema (ma credo nulla di eclatante solo qualche secondo di attesa in più).

    Quanto all'esempio della prima macro che hai fatto quello è un caso "particolare" perché ad ogni lettera digitata nella textbox il codice deve esaminare tutti i dati e quando trova la corrispondenza il dato viene aggiunto alla listbox.

    Va da sé che se i dati sono "pochi" non ci sono problemi; se invece sono migliaia riscontri gli "inconvenienti" che hai segnalato.

    Va anche detto che Excel pur essendo un programma assai potente e versatile non è detto che non abbia i suoi limiti soprattutto quando l'entità dei dati da gestire è assai rilevante (ma parliamo di centinaia di migliaia o più e non credo sia il tuo caso) ed in questi casi sarebbe meglio utilizzare un database relazionale tipo Access con il quale si possono gestire con relativa facilità basi di dati costituite da milioni di record (ma questa è un'altra storia).

    Comunque direi di andare avanti con le due listbox e vediamo dove si arriva.

    Infine un'ultima notazione.

    Chi risponde sui forum è nella (quasi) totalità dei casi un semplice appassionato e non un programmatore professionista (o una softwarehouse) per cui è normale vi possano essere sempre alternative migliori alle soluzioni proposte.

    Io stesso sono un funzionario di banca in pensione che, avendo tempo a disposizione, si dedica a questo "volontariato informatico" per diletto e passione e pensa che, sino circa tre anni fa, del VBA ne conoscevo a malapena l'esistenza

    Perdona il "pistolotto" e appena ho pronto il file (con le due listbox) te lo propongo.

    A presto

    Alfredo





  • di Ronciglione data: 07/06/2016 19:33:33

    Ciao Alfredo,

    non vorrei che il mio ultimo messaggio lo avessi interpretato con un tono imperativo portandoti a scrivere alcune cose. Ho ben chiaro che quello che tu mi stai facendo è un favore che mi fai, e per questo io ti ringrazio e continuo a farlo!



  • di alfrimpa data: 07/06/2016 20:40:12

    Ma no assolutamente e mi spiace se mi sono espresso male.

    Intendevo solo dire che talvolta per la risoluzione di problemi complessi (ma non è il tuo caso) occorrono competenze che mediamente non è facile trovare sui forum anche se i "geni" del VBA ci sono .

    Domani spero di riproporti il file con le listbox

    Alfredo





  • di alfrimpa data: 08/06/2016 15:14:08

    Ciao Ronciglione

    Come promesso () ti allego il file RonciglioOrdiniAlfrimpa_4.xlsm dove ho ripristinato le due listbox.

    Quando avrai selezionato una voce nella prima la seconda si popolerà degli elementi ad essa relativi.

    Quando selezioni un elemento nella seconda listbox nella textbox Prezzo di listino viene visualizzato appunto il prezzo di listino dell'elemento selezionato.

    Se inserisci nella textbox Prezzo di vendita e dai Invio nella textbox Sconto verrà visualizzata la differenza percentuale tra prezzo di listino e prezzo di vendita.

    "Gioca" un po con il file e fai sapere (comunque ci sono ancora diverse cose da aggiustare).

    Alfredo





  • di Ronciglione data: 09/06/2016 22:11:29

    Grazie Alfredo!

    Da un primo sguardo mi sembra proprio che faccia al caso mio, adesso lo provo un pochetto e poi ti dico e ti chiedo alcune cose, perchè guardando il codice già mi fa nascere domande!



  • di alfrimpa data: 09/06/2016 22:47:37

    Si però non farmi aspettare molto che son curioso

    Controlla che siano giusti i calcoli dello sconto che non sono bravo in matematica (e lo dico sul serio).

    Per le domande sono a disposizione

    Alfredo





  • di Ronciglione data: 12/06/2016 22:19:49

    Ciao Alfredo,

    sembra fatto apposta, ma ho avuto problemi con la tastiera del mio portatile che ho dovuto sostituire, domani vado a ritirarlo in negozio e ritorno con le mie domande



  • di alfrimpa data: 12/06/2016 22:25:32

    Sono qua.

    Hai capito la logica della nuova strutturazione dei dati?

    Alfredo





  • di Ronciglione data: 16/06/2016 23:11:39

    Ciao Alfredo,

    non sono morto ho ritirato il computer ieri e questa sera finalmente ho potuto dare un occhiata.

    Partendo da Initialize mi perdo dopo qualche righe.
    Serve per popolare la prima Listbox giusto?

    Worksheets("Foglio2").Select
    With Range("A2").CurrentRegion

    La cella A2, è riferita la primo foglio o al secondo?

    non capisco cosa tu faccia con il ciclo with

    Alfredo lo hai fatto bello tosto per mettermi definitvamente KO, vero ahahahhahahaha

     
    Ciao Alfredo,
    
    non sono morto 



  • di alfrimpa data: 16/06/2016 23:29:39

    Ciao Ronciglione mi fa piacere che non sei morto

    A questo punto potresti anche dirmi come ti chiami perché Ronciglione nun se po' sentì

    Da domani sono fuori per il weekend (e non ho il pc) per cui ci dovremo risentire da lunedì (e non scomparire di nuovo ) e del pc ho bisogno perchè sono vecchio e la memoria non mi aiuta

    Alfredo