change cbo1 Addittem cbo2



  • change cbo1 Addittem cbo2
    di Nicola (utente non iscritto) data: 22/07/2015 10:55:31

    Ciao a tutti....Eccomi nuovamente a chiedervi una mano a trovare la soluzione.

    In allegato trovate il file con delle userform .....

    Il problema è : Nella frmlivelli ci sono due combobox
    -combobox3
    -combobox4
    Come viene attivato il form la combobox3 viene popolata e con un change vado a compilare i fari text presenti.

    All'interno di questa frmlivelli vi è una zona chimata "Fatturazione del premio" con dei campi da compilare e poi archiviare nel foglio" Archivio"
    All'interno del Foglio "Archivio" ci sono dei campi con intestazioni
    1° Campo = Codice
    Eccccc
    Nb..ci possono essere codici univoci ma con diversi numeri di documento.
    La mia esigenza è:
    Richiamare il codice nella combobox3 e popolare la combobox 4 con i numeri di documento appartenenti al codice selezionato.
    I codici da me inseriti per il popolamento della combobox4 sono segnalati...
    Spero come sempre riuscirete a farmi capire dove sbaglio...

    Grazie mille
    Nicola























     
    Dim Righe, Colonne
    Dim Intervallo As Range
    
    Private Sub cmdarchivia_Click()
    Dim Unione As Range
    Dim FinalRow As Long
    Dim R As Long
    Dim WsTo As Worksheet
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    txtfatturato = Format(txtfatturato, "#,#00.00")
    Set WsTo = Worksheets("Archivio")
    FinalRow = WsTo.Cells(WsTo.Rows.Count, 1).End(xlUp).Row
    R = 2
    R = FinalRow + 1
    WsTo.Cells(R, 1) = txtcodice2.Value
    WsTo.Cells(R, 2) = txtagente2.Value
    WsTo.Cells(R, 3) = txtdivisione2.Value
    WsTo.Cells(R, 4) = cbotipocontr2.Value
    WsTo.Cells(R, 5) = DTPicker1.Value
    WsTo.Cells(R, 6) = txtfatturato.Value
    WsTo.Cells(R, 7) = txtcontratto.Value
    WsTo.Cells(R, 8) = txtimpdoc.Value
    WsTo.Cells(R, 9) = cbotipdoc.Value
    WsTo.Cells(R, 10) = txtnumdoc.Value
    WsTo.Cells(R, 11) = cbomod9.Value
    WsTo.Cells(R, 12) = DTPicker2.Value
    WsTo.Cells(R, 13) = txtnote2.Value
    MsgBox "Creato Archivio"
    txtcodice2.Value = ""
    txtagente2.Value = ""
    txtdivisione2.Value = ""
    cbotipocontr2.Value = ""
    DTPicker1.Value = Date
    txtfatturato.Value = ""
    txtcontratto.Value = ""
    txtimpdoc.Value = ""
    cbotipdoc.Value = ""
    txtnumdoc.Value = ""
    cbomod9.Value = ""
    DTPicker2.Value = Date
    txtnote2.Value = ""
    Application.ScreenUpdating = True
    Application.EnableEvents = True
    End Sub
    Private Sub cmdchiudi_Click()
    Unload frmlivelli
    End Sub
    Private Sub ComboBox3_Change()
    Dim Codice, Riga, Righe
    Dim Intervallo As Range
    Dim R As Integer
    Dim Trovato As Boolean
    Trovato = False
    R = 1
    Do Until Trovato = True Or R = 1000
    If Range("A" & R) = ComboBox3.Value Or Range("B" & R) = ComboBox3.Value Or Range("C" & R) = ComboBox3.Value Then
    txtcodice2.Text = Range("A" & R)
    txtagente2.Text = Range("B" & R)
    txtdivisione2.Text = Range("C" & R)
    cbobuyer2.Value = Range("D" & R)
    cboanno2.Value = Range("E" & R)
    cbotipocontr2.Value = Range("F" & R)
    txttipodoc2.Text = Range("G" & R)
    cbomod.Value = Range("H" & R)
    TextBox5.Text = Range("I" & R)
    cboscad.Value = Range("J" & R)
    cbomod2.Value = Range("K" & R)
    TextBox6.Text = Range("L" & R)
    cboscad2.Value = Range("M" & R)
    cbomod3.Value = Range("N" & R)
    TextBox7.Text = Range("O" & R)
    cboscad3.Value = Range("P" & R)
    cbomod4.Value = Range("Q" & R)
    TextBox8.Text = Range("R" & R)
    cboscad4.Value = Range("S" & R)
    cbomod5.Value = Range("T" & R)
    TextBox9.Text = Range("U" & R)
    cboscad5.Value = Range("V" & R)
    cbomod7.Value = Range("W" & R)
    txtart2.Text = Range("X" & R)
    cboscad7.Value = Range("Y" & R)
    cbomod8.Value = Range("Z" & R)
    txtbrand2.Text = Range("AA" & R)
    cboscad8.Value = Range("AB" & R)
    txttotcontr2.Text = Range("AC" & R)
    cbomodificato2.Value = Range("AD" & R)
    cbopubblicato2.Value = Range("AE" & R)
    txtnote2.Text = Range("AF" & R)
    txtfattm.Text = Range("AG" & R)
    txtfattm = Format(txtfattm, "#,#00.00")
    txtfattb.Text = Range("AH" & R)
    txtfattb = Format(txtfattb, "#,#00.00")
    txtfattt.Text = Range("AI" & R)
    txtfattt = Format(txtfattt, "#,#00.00")
    txtfatts.Text = Range("AJ" & R)
    txtfatts = Format(txtfatts, "#,#00.00")
    txtfatta.Text = Range("AK" & R)
    txtfatta = Format(txtfatta, "#,#00.00")
    Trovato = True
    End If
    R = R + 1
    Loop
    If Trovato = False Then
    MsgBox "Divisione non in elenco"
    ComboBox3.Value = ""
    ComboBox3.SetFocus
    End If
    'Codice per riempimento combobox4
    'Riempimento numero fattura
    ComboBox4.Clear
    Codice = ComboBox3.Text
    With Intervallo
    For Riga = 1 To Righe
    If .Item(Riga, 1) = Codice Then
    ComboBox4.AddItem (.Item(Riga, 2))
    End If
    Next
    End With
    End Sub
    
    'Codice per riempimento combobox4
    'Riempimento numero fattura
    
    Private Sub ComboBox4_Change()
    Dim Intervallo As Range
    Dim Fattura, Riga, Codice
    Fattura = ComboBox4.Text
    Codice = ComboBox3.Text
    With Intervallo
    For Riga = 1 To Righe
    If .Item(Riga, 10) = Fattura And .Item(Riga, 1) = Codice Then
    DTPicker1 = .Item(Riga, 5)
    txtfatturato = .Item(Riga, 6)
    txtcontratto = .Item(Riga, 7)
    txtimpdoc = .Item(Riga, 8)
    cbotipdoc = .Item(Riga, 9)
    txtnumdoc = .Item(Riga, 10)
    cbomod9 = .Item(Riga, 11)
    DTPicker2 = .Item(Riga, 12)
    txtnote2 = .Item(Riga, 13)
    End If
    Next
    End With
    End Sub
    
    Private Sub txtcontratto_Change()
    If txtcontratto <> "" Then
    txtimpdoc.Text = Format(CDbl(txtfatturato) * Val(txtcontratto) / 100, "#0.00")
    Else
    End If
    End Sub
    
    Private Sub txtfatturato_Change()
    If txtfatturato <> "" Then
    txtimpdoc.Text = Format(CDbl(txtfatturato) * Val(txtcontratto) / 100, "#0.00")
    Else
    End If
    End Sub
    
    Private Sub UserForm_Activate()
    
    Dim Riga, Righe, Colonne, Codice
    Dim Elenco As New Collection
    Dim Intervallo As Range
    cboscad9.AddItem "M"
    cboscad9.AddItem "B"
    cboscad9.AddItem "T"
    cboscad9.AddItem "S"
    cboscad9.AddItem "A"
    cbomod9.AddItem "FP"
    cbomod9.AddItem "FP1"
    cbomod9.AddItem "NAP"
    cbomod9.AddItem "NAP1"
    cbotipdoc.AddItem "FT"
    cbotipdoc.AddItem "NC"
    DTPicker1.Value = Date
    DTPicker2.Value = Date
     Dim i As Long
        Select Case Sheets("Contratti").Cells(2, 1)
            Case Empty
                i = 2
                If Not (Sheets("Contratti").Cells(2, 1) = Empty) Then
                    Do Until Sheets("Contratti").Cells(i, 1) = Empty
                        ComboBox3.AddItem (Sheets("Contratti").Cells(i, 1).Value)
                        i = i + 1
                    Loop
                End If
            Case Else
                
    With ComboBox3
      .ColumnCount = 3
      .BoundColumn = 3
      .ColumnWidths = "40;40;20"
    
     End With
     With Sheets("Contratti")
                    frmlivelli.ComboBox3.List = .Range(.Cells(2, 1), .Cells(2, 3).End(xlDown)).Value
                End With
        End Select
    
    
    'Codice per riempimento combobox4
    'Riempimento numero fattura
    With Sheets("Archivio").Range("A1").CurrentRegion
    Righe = .Rows.Count
    Colonne = .Columns.Count
    Set Intervallo = .Offset(1, 0).Resize(Righe, Colonne)
    End With
    On Error Resume Next
    For Riga = 1 To Righe
    Elenco.Add Intervallo(Riga, 1).Value, CStr(Intervallo(Riga, 1).Value)
    Next
    On Error GoTo 0
    With Intervallo
    For Riga = 1 To Righe
    If .Item(Riga, 1) = Codice Then
    ComboBox4.AddItem (.Item(Riga, 5))
    End If
    Next
    End With
    End Sub
    
    


  • change cbo1 Addittem cbo2
    di Nicola (utente non iscritto) data: 22/07/2015 12:26:40

    Aggiornamento...

    Ciao
    lavorando sul codice sono riuscito a popolare la combox4.....

    Ora devo risolvere il popolamento del form con il change combox4....(((Non riesco a popolarlo)))

    Un saluto a Vecchio Frac...finalmente ti si rivede in nel forum...

    Allego file aggiornato



  • di Vecchio Frac data: 22/07/2015 13:13:54

    Sei stato sufficientemente casinista nella prima descrizione da sollevarmi un po' di curiosità, solo che devo mettere insieme un po' di pezzi... ho da fare ma spero di potermi dedicare :)

    cit. "Un saluto a Vecchio Frac...finalmente ti si rivede in nel forum"
    ---> :) grazie... cerco di fare quello che posso, quando posso ^_^




  • change cbo1 Addittem cbo2
    di Nicola (utente non iscritto) data: 22/07/2015 14:02:08

    Grazie Vecchio Frac..

    Scusami ...ma riesco sempre ad incasinare la spigazione...


  • 2 combobox
    di Nicola (utente non iscritto) data: 23/07/2015 17:10:51



  • change cbo1 Addittem cbo2 di
    di Nicola (utente non iscritto) data: 23/07/2015 21:03:16

    Cavolo non riesco a capire come mai nella userform "frmlivelli" non appaiono i riferimenti al numero doc selezionato


     
    Private Sub ComboBox4_Change()
    Dim Intervallo As Range
    Dim Fattura, Riga, Codice
    Fattura = ComboBox4.Text
    Codice = ComboBox3.Text
    With Intervallo
    For Riga = 1 To Righe
    If .Item(Riga, 10) = Fattura And .Item(Riga, 1) = Codice Then
    DTPicker1 = .Item(Riga, 5)
    txtfatturato = .Item(Riga, 6)
    txtcontratto = .Item(Riga, 7)
    txtimpdoc = .Item(Riga, 8)
    cbotipdoc = .Item(Riga, 9)
    txtnumdoc = .Item(Riga, 10)
    cbomod9 = .Item(Riga, 11)
    DTPicker2 = .Item(Riga, 12)
    txtnote2 = .Item(Riga, 13)
    End If
    Next
    End With
    End Sub
    
    



  • di Vecchio Frac data: 24/07/2015 09:37:34

    Il codice del tuo progetto è abbastanza difficile da leggere (dovresti indentare meglio i blocchi di codice, dovresti sempre usare Option Explicit; devi evitare le variabili globali quando puoi; inoltre devi evitare di dichiarare la stessa variabile come locale quando è già globale; devi commentare di più le parti essenziali, magari a inizio routine).
    Quello che capisco io è:
    - premo pulsante Fatturazione premi
    - alla attivazione, la userform "frmlivelli" (carino lo sfondo!) popola la combobox3 con i dati del foglio contratti prelevando le colonne da A a C (quindi hai codice, agente e divisione nella combobox)
    - nello stesso momento dell'attivazione del form, la combobox4 non viene popolata
    - se scelgo una riga dalla combobox3, corrispondente a un agente, per esempio il primo, la combobox4 viene popolata con tutti i "num doc" corrispondenti, prelevandoli dal foglio "archivio" (e qui i dati vengono correttamente caricati)
    - ora, non ho capito cosa vuoi fare, visto che sembra che sei riuscito a impostare correttamente il riferimento alla riga giusta in entrambi i fogli. Ma forse manca qualche collegamento tra i dati che non vedo.

    Fammi un esempio concreto (seleziono il tal agente, il tal documento, i campi seguenti devono essere così popolati). Io cerco di districarmi nel codice :)





  • di Vecchio Frac data: 24/07/2015 09:51:43

    Comunque una modifica che mi sento di farti fare nella routine di change della combobox4 è la seguente. Altrimenti non viene trovata la fattura corretta per il codice selezionato.
    Poi credimi, senza offesa personale ma solo esaminando la struttura del codice, ci sarebbe da intervenire :)
     
    If .Item(Riga, 10) = CStr(Fattura) And .Item(Riga, 1) = Codice Then






  • di Nicola (utente non iscritto) data: 24/07/2015 10:13:55

    Non ci crederai ma con la tua modifica ho ottenuto il risultato che volevo...Vedi allegato...

    cit" Poi credimi, senza offesa personale ma solo esaminando la struttura del codice, ci sarebbe da intervenire :)"

    Vecchio Frac come potrei offendermi ....sono da un po che vi seguio e ho tanta voglia di migliorarmi...E solo con persone come te che posso riuscirci....

    Comunque potresti gentilmente spigarmi che tipo di struttura avresti utilizzato???

    Ti ringrazio tantissimo



  • di Nicola (utente non iscritto) data: 24/07/2015 10:16:17

    Attenzione le freccie all'interno dell'allegato si sono spostate...

    i campi riempiti sono sotto le freccie



  • di Vecchio Frac data: 24/07/2015 11:09:17

    cit. "Non ci crederai ma con la tua modifica ho ottenuto il risultato che volevo"
    ---> Eh lo so bene... infatti era lì il problema (un confronto tra un testo e un numero!). Solo che poi non era chiaro quali campi andavano valorizzati e come.

    cit. "potresti gentilmente spigarmi che tipo di struttura avresti utilizzato"
    --_> E qui le cose si fanno più complesse... :) non vorrei farti riscrivere o reimpostare il progetto. Comincia intanto con l'indentare meglio il codice per renderlo più leggibile e cerca di evitare le variabili globali se possibile.
    Appena posso guardo il nuovo allegato.





  • di Nicola (utente non iscritto) data: 24/07/2015 11:24:47

    Grazie Vecchio Frac come sempre.....e come sempre cerco di seguire i tuoi suggerimenti....

    Ora continuo il mio progetto cercando di renderlo un pò meno incasinato(((se riesco)))..

    In questo momento sto studiando un po dei tuoi codici per cercare di avvicinarmi hai tuoi suggerimenti....Ma credo che non mi basti tutta la vita


    Chiudo il post come risolto ...

    In caso di difficoltà ...mi farò sentire ...

    Grazie mille