È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

creare una user form

  • Messaggi
  • OFFLINE
    Eurialo-67
    Post: 14
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 14/03/2021 23:24
    Buonasera a tutti, vorrei creare una user form posizionata nel foglio "partitario" e che mi popoli tutti i campi contenuti nel foglio "store", nella user form il campo dedicato a "riferimento" dovrebbe essere una casella combinata che vada a prendere i valori dal foglio "appo", io ho provato a smanettarci, ma non avendo assoluta dimestichezza non sono riuscito ad approdare a nulla. Vorreste aiutarmi?
    Ringrazio in anticipo....
  • OFFLINE
    alfrimpa
    Post: 4.613
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 14/03/2021 23:32
    Guarda questo tutorial di altro forum

    https://www.forumexcel.it/forum/threads/popolare-userform-con-dati-di-una-tabella-ed-inserire-dati-in-un-altro-foglio.7320/

    Vi troverai informazioni molto utili.


    Alfredo
  • OFFLINE
    alfrimpa
    Post: 4.615
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 15/03/2021 11:22
    Ho avuto oggi modo di vedere il file allegato ma relativamente al problema che poni non c'è assolutamente nulla se non una userform con 10 etichette (label) ed una casella di riepilogo (combobox) vuota.

    Tu hai chiesto un aiuto ma che tipo di aiuto vorresti?

    Che qualcuno faccia il lavoro per te?

    Tieni presente che oltre a costruire la userform (e sarebbe il meno) occorre conoscere un minimo di VBA per scrivere il codice necessario per il suo funzionamento.

    Senza il codice VBA una userform è una scatola vuota inutile ed inutilizzabile.

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 14
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 15/03/2021 14:31
    Carissimo, detta così, sembrerebbe che io mi voglia approfittare di qualcuno, non voglio lavarmene le mani, avevo visto un tutorial e mi sembrava potessi riuscirci, ma giustamente, non avendo rudimenti di vba mi sono incartato subito e quindi ho postato il mio problema sul forum, mi piacerebbe riuscire nell'intento, in che modo? Non idea, magari con il vostro aiuto....
  • OFFLINE
    alfrimpa
    Post: 4.616
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 15/03/2021 16:14
    Non ho mai detto (nè pensato) che tu voglia approfittarti di qualcuno.

    Ciò nondimeno, ne converrai, l'uso delle userform prevede un utilizzo medio avanzato di Excel non certo di base.

    Comunque comincia tu con il costruire la userform che è la cosa più semplice da fare (a questo proposito guarda su YouTube sul canale Excel magico i video dal n. 111 al 114) come serve a te e poi quando sei pronto posta il file sul forum e ne riparliamo.

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 15
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 16/03/2021 02:18
    alfrimpa, 15/03/2021 16:14:

    Non ho mai detto (nè pensato) che tu voglia approfittarti di qualcuno.

    Ciò nondimeno, ne converrai, l'uso delle userform prevede un utilizzo medio avanzato di Excel non certo di base.

    Comunque comincia tu con il costruire la userform che è la cosa più semplice da fare (a questo proposito guarda su YouTube sul canale Excel magico i video dal n. 111 al 114) come serve a te e poi quando sei pronto posta il file sul forum e ne riparliamo.

    Va bene, grazie, saluti...
  • OFFLINE
    Eurialo-67
    Post: 16
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 29/03/2021 16:55
    Registrazione con ures form
    alfrimpa, 15/03/2021 16:14:

    Non ho mai detto (nè pensato) che tu voglia approfittarti di qualcuno.

    Ciò nondimeno, ne converrai, l'uso delle userform prevede un utilizzo medio avanzato di Excel non certo di base.

    Comunque comincia tu con il costruire la userform che è la cosa più semplice da fare (a questo proposito guarda su YouTube sul canale Excel magico i video dal n. 111 al 114) come serve a te e poi quando sei pronto posta il file sul forum e ne riparliamo.




    Buongiorno, come richiesto, ho cercato di fare tesoro dei video consigliati ed ho cercato di portarmi avanti fin dove sono riuscito.
    Allo stato attuale vorrei sapere come:
    1) nella user form al campo riferimento vorrei mettere una combobox piuttosto che un testo, e che questi venga trovato nella colonna A foglio "APPO", poi una volta confermato il codice che sia possibili popolare il campo descrizione prelevandolo dalla colonna 2 sempre dal foglio "appo" come una specie di cerca verticale.
    2) che una volta confermata la registrazione, che rimanga selezionato il foglio "partitario" perchè per ovviare ad un errore ho messo il comando di attivazione del foglio "STORE" però accade che dopo la registrazione vengo spostato sul foglio "store"...
    ora.. un aiuto..??!😥
  • OFFLINE
    alfrimpa
    Post: 4.639
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 30/03/2021 11:12
    Ok e complimenti per quanto hai realizzato.

    Ma i dati immessi nella maschera su quale foglio devono essere registrati?

    Se vuoi inserire una combobox per il riferimento e se la devi popolare con i dati provenienti dalla colonna A del foglio store poichè hai migliaia di dati la casella di riepilogo è scomoda da utilizzare in queste condizioni; se non sai il numero di riferimento dovresti scorrerla per migliaia di righe.

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 17
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 30/03/2021 13:43
    Re:
    alfrimpa, 30/03/2021 11:12:

    Ok e complimenti per quanto hai realizzato.

    Ma i dati immessi nella maschera su quale foglio devono essere registrati?

    Se vuoi inserire una combobox per il riferimento e se la devi popolare con i dati provenienti dalla colonna A del foglio store poichè hai migliaia di dati la casella di riepilogo è scomoda da utilizzare in queste condizioni; se non sai il numero di riferimento dovresti scorrerla per migliaia di righe.




    Grazie per il riscontro,
    il foglio "store" = database, il quale viene popolato dai valori immessi nella user form, la user form\combobox preleva i dati dal foglio APPO, che sarebbero "Rif" e Descr" il resto viene immesso dall'operatore.
    Inoltre ho provato ad inserire qualche riga di codice per l'automazione della combobox.... ma.. c'è qualcosa che non funziona.. magari riallego il file
    Ma come tu giustamente osservi ci sarebbe sa scrollare un bel po di righe, forse sarebbe opportuna qualche soluzione che faccia una ricerca con una porzione di "riferimento" .
  • OFFLINE
    alfrimpa
    Post: 4.640
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 30/03/2021 15:34
    Scusa ma la data che inserisci sulla userform in quale colonna del foglio store deve andare?

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 18
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 30/03/2021 16:21
    alfrimpa, 30/03/2021 15:34:

    Scusa ma la data che inserisci sulla userform in quale colonna del foglio store deve andare?

    All'ultima
  • OFFLINE
    alfrimpa
    Post: 4.642
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 30/03/2021 19:59
    Al pulsante sulla userform abbina questo codice

    vb
    Private Sub Cmd_Registra_Click()
    Dim ur As Long
    ur = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
    With Foglio1
        .Cells(ur + 1, 1).Value = Me.ComboBox1.Value
        .Cells(ur + 1, 2).Value = Me.Txt_Destrizione.Value
        .Cells(ur + 1, 3).Value = Me.Txt_qta_car.Value
        .Cells(ur + 1, 4).Value = Me.Txt_qta_scar.Value
        .Cells(ur + 1, 5).Value = Me.Txt_Prezzo.Value
        .Cells(ur + 1, 6).Value = Me.Txt_listino.Value
        .Cells(ur + 1, 7).Value = Me.Txt_sconto.Value
        .Cells(ur + 1, 10).Value = Me.Txt_data.Value
    End With
        Me.Hide
        MsgBox Me.ComboBox1.Value & " registrato alla riga " & ur + 1, vbInformation, "REGISTRATO"
        Unload Me
    End Sub


    e all'evento Initialize (non Inizialise come avevi scritto) abbina questo

    vb
    Private Sub UserForm_initialize()
    Dim i As Long
    Dim ur As Long
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    For i = 2 To ur
       Me.ComboBox1.AddItem Foglio2.Range("A" & i).Value
    Next i
    End Sub
    


    Resta il fatto che avere oltre 3.400 voci in una combobox è follia pura.
    [Modificato da alfrimpa 30/03/2021 19:59]

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 19
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 30/03/2021 21:26
    Re:
    alfrimpa, 30/03/2021 19:59:

    Al pulsante sulla userform abbina questo codice

    vb
    Private Sub Cmd_Registra_Click()
    Dim ur As Long
    ur = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
    With Foglio1
        .Cells(ur + 1, 1).Value = Me.ComboBox1.Value
        .Cells(ur + 1, 2).Value = Me.Txt_Destrizione.Value
        .Cells(ur + 1, 3).Value = Me.Txt_qta_car.Value
        .Cells(ur + 1, 4).Value = Me.Txt_qta_scar.Value
        .Cells(ur + 1, 5).Value = Me.Txt_Prezzo.Value
        .Cells(ur + 1, 6).Value = Me.Txt_listino.Value
        .Cells(ur + 1, 7).Value = Me.Txt_sconto.Value
        .Cells(ur + 1, 10).Value = Me.Txt_data.Value
    End With
        Me.Hide
        MsgBox Me.ComboBox1.Value & " registrato alla riga " & ur + 1, vbInformation, "REGISTRATO"
        Unload Me
    End Sub


    e all'evento Initialize (non Inizialise come avevi scritto) abbina questo

    vb
    Private Sub UserForm_initialize()
    Dim i As Long
    Dim ur As Long
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    For i = 2 To ur
       Me.ComboBox1.AddItem Foglio2.Range("A" & i).Value
    Next i
    End Sub
    


    Resta il fatto che avere oltre 3.400 voci in una combobox è follia pura.




    Ti ringrazio tantissimo per l'aiuto che mi hai dato, considero che scrollare tante righe sarà laborioso! vedo come mi trovo... nel caso ne riparliamo...😥😥
  • OFFLINE
    Eurialo-67
    Post: 20
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 01/04/2021 12:38
    Buongiorno, per fare in modo che dopo che si sceglie il codice nella user form il campo descrizione restituisca la descrizione corrispondente al codice inserito?
  • OFFLINE
    alfrimpa
    Post: 4.648
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 02/04/2021 12:21
    Puoi farlo utilizzando un CERCA.VERT lato VBA (WorksheetFunction.VLookup).

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 21
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 03/04/2021 22:36
    Re:
    alfrimpa, 02/04/2021 12:21:

    Puoi farlo utilizzando un CERCA.VERT lato VBA (WorksheetFunction.VLookup).




    Buonasera, sii clemente....
    ho pensato al tuo disapputo nell'usare la combobox per via della moltitudine di voci, e quindi ho pensato di tornare sui miei passi e rimettere txtriferimento.. però occorrerebbe inserire una convalisa dati altrimenti rischieremmo di mettere codici sbagliati, potresti indicarmi la strada!?..
    e per quanto riguarda, la funzione VLookup.. mi puoi dare informazioni più analitiche? stò cercando di capire ma..... è dura!!!!
  • ONLINE
    dodo47
    Post: 3.127
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 04/04/2021 11:45
    Ciao a tutti

    @Eurialo:

    avrai sempre difficoltà nelle scelte, in quanto nei tuoi DB (Store e APPO), a parte il "Riferimento", non hai una chiave esplicativa del prodotto, mi spiego meglio:

    Ipotizza di aver trasformato la Txt Riferimento in comboBox contenente tutti i valori di APPO, e di scegliere un valore e che dopo la scelta nella txtRiferimento appaia la descrizione:

    questo è uno stralcio di APPO:
    5000289387 Coperchio
    5000289391 Coperchio
    5000289392 Coperchio


    come fai a decidere quale codice usare, ovvero qual è il coperchio giusto??
    sai a memoria la differenza tra i tre codici?

    saluti
    [Modificato da dodo47 04/04/2021 12:32]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    alfrimpa
    Post: 4.649
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Master
    Excel 365
    00 04/04/2021 11:49
    Concordo con Dodo47 (che saluto).

    Oltre al codice di riferimento anche la descrizione del prodotto deve essere univoca; insomma non deve esserci una marea di "coperchi" tutti uguali.

    Alfredo
  • OFFLINE
    Eurialo-67
    Post: 22
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 05/04/2021 07:36
    Comprendo la vostra perplessità e concordo che vi dovrebbe avere una descrizione più analitica dell'articolo, purtroppo è una situazione che ho trovato ed ho avuto modo di osservare che gli addetti che aggiornano questo file hanno come chiave principale nella loro mente il CODICE! forse per loro la descrizione è puramente indicativa visto che quando devono identificare il pezzo di ricambio , focalizzano solo in codice. Non se ho reso l'idea. Saluti...
  • ONLINE
    dodo47
    Post: 3.128
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 05/04/2021 10:42
    Ciao
    dopo aver cambiato il nome della Txt_Destrizione in Txt_Descrizione (che mi sembra più corretto) ed aver sostituito la txtRiferimento con la ComboBox1, potresti fare nel seguente modo:

    Private Sub UserForm_initialize()
    Dim ur As Long
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    With ComboBox1
    .List = Foglio2.Range("A2:A" & ur).Value
    End With
    Me.ComboBox1.SetFocus
    End Sub
    
    
    Private Sub ComboBox1_AfterUpdate()
    Dim ur As Long, rng As Range
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    valore = Application.VLookup(ComboBox1.Value, Foglio2.Range("A2:B" & ur), 2, 0)
    
    If IsError(valore) Then
        MsgBox "Riferimento inesistente"
        Me.ComboBox1.Value = ""
        Me.Txt_Descrizione = ""
    Else
        Me.Txt_Descrizione = valore
    End If
    End Sub
    
    
    Private Sub Cmd_Registra_Click()
    Dim ur As Long
    ur = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
    With Foglio1
        .Cells(ur + 1, 1).Value = Me.ComboBox1.Value
        .Cells(ur + 1, 2).Value = Me.Txt_Descrizione.Value
        .Cells(ur + 1, 3).Value = Me.Txt_qta_car.Value
        .Cells(ur + 1, 4).Value = Me.Txt_qta_scar.Value
        .Cells(ur + 1, 5).Value = Me.Txt_Prezzo.Value
        .Cells(ur + 1, 6).Value = Me.Txt_listino.Value
        .Cells(ur + 1, 7).Value = Me.Txt_sconto.Value
        .Cells(ur + 1, 10).Value = Me.Txt_data.Value
    End With
        Me.Hide
        MsgBox Me.ComboBox1.Value & " registrato alla riga " & ur + 1, vbInformation, "REGISTRATO"
        Unload Me
    End Sub
    
    Private Sub CMD_Esci_Click()
        Unload Me
    End Sub


    Infine ti suggerisco di creare nomi variabili descrittivi per i nomi dei fogli e non riferirti a Foglio1 o Foglio2 per una migliore lettura del codice, per esempio:
    dim mAppo as worksheet
    set mAppo=worksheets("APPO")

    e nel codice diferirti a mAppo e non a Foglio2

    saluti
    [Modificato da dodo47 05/04/2021 11:35]
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Eurialo-67
    Post: 23
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 05/04/2021 23:07
    Re:
    dodo47, 05/04/2021 10:42:

    Ciao
    dopo aver cambiato il nome della Txt_Destrizione in Txt_Descrizione (che mi sembra più corretto) ed aver sostituito la txtRiferimento con la ComboBox1, potresti fare nel seguente modo:

    Private Sub UserForm_initialize()
    Dim ur As Long
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    With ComboBox1
    .List = Foglio2.Range("A2:A" & ur).Value
    End With
    Me.ComboBox1.SetFocus
    End Sub
    
    
    Private Sub ComboBox1_AfterUpdate()
    Dim ur As Long, rng As Range
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    valore = Application.VLookup(ComboBox1.Value, Foglio2.Range("A2:B" & ur), 2, 0)
    
    If IsError(valore) Then
        MsgBox "Riferimento inesistente"
        Me.ComboBox1.Value = ""
        Me.Txt_Descrizione = ""
    Else
        Me.Txt_Descrizione = valore
    End If
    End Sub
    
    
    Private Sub Cmd_Registra_Click()
    Dim ur As Long
    ur = Foglio1.Cells(Rows.Count, 1).End(xlUp).Row
    With Foglio1
        .Cells(ur + 1, 1).Value = Me.ComboBox1.Value
        .Cells(ur + 1, 2).Value = Me.Txt_Descrizione.Value
        .Cells(ur + 1, 3).Value = Me.Txt_qta_car.Value
        .Cells(ur + 1, 4).Value = Me.Txt_qta_scar.Value
        .Cells(ur + 1, 5).Value = Me.Txt_Prezzo.Value
        .Cells(ur + 1, 6).Value = Me.Txt_listino.Value
        .Cells(ur + 1, 7).Value = Me.Txt_sconto.Value
        .Cells(ur + 1, 10).Value = Me.Txt_data.Value
    End With
        Me.Hide
        MsgBox Me.ComboBox1.Value & " registrato alla riga " & ur + 1, vbInformation, "REGISTRATO"
        Unload Me
    End Sub
    
    Private Sub CMD_Esci_Click()
        Unload Me
    End Sub


    Infine ti suggerisco di creare nomi variabili descrittivi per i nomi dei fogli e non riferirti a Foglio1 o Foglio2 per una migliore lettura del codice, per esempio:
    dim mAppo as worksheet
    set mAppo=worksheets("APPO")

    e nel codice diferirti a mAppo e non a Foglio2

    saluti



    Buonasera, ti ringrazione per l'attenzione prestata, e sembra funzionare tutto, tranne per il fatto che che non tutti i codici riescono a superare il controllo del codice, seppur esistenti nel foglio APPO, quindi accade che digito per esempio " 188171" e mi appare il messaggio "Riferimento inesistente". Ho notato che il problema sussiste con i riferimenti che contengono solo numeri invece con i riferimenti alfabetici o alfanumerici funziona bene.
    Saluti

  • ONLINE
    dodo47
    Post: 3.129
    Registrato il: 06/04/2013
    Utente Master
    2010
    00 06/04/2021 09:55
    ciao
    cambia questa:
    Private Sub ComboBox1_AfterUpdate()
    Dim ur As Long, rng As Range, ToFind As Variant
    ur = Foglio2.Cells(Rows.Count, 2).End(xlUp).Row
    ToFind = ""
    
    If IsNumeric(Me.ComboBox1.Value) Then
        ToFind = Me.ComboBox1.Value * 1
    Else
        ToFind = Me.ComboBox1.Value
    End If
    valore = Application.VLookup(ToFind, Foglio2.Range("A2:B" & ur), 2, 0)
    
    If IsError(valore) Then
        MsgBox "Riferimento inesistente"
        Me.ComboBox1.Value = ""
        Me.Txt_Descrizione = ""
    Else
        Me.Txt_Descrizione = valore
    End If
    End Sub


    Comincia a fare qualcosa in autonomia

    ùsaluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Eurialo-67
    Post: 24
    Registrato il: 08/06/2018
    Città: CORATO
    Età: 56
    Utente Junior
    365
    00 07/04/2021 23:01
    Vi ringrazio per l'aiuto che mi avete dato, cercherò di fare tesoro di tutto quanto.... saluti.