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.
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.
alfrimpa, 30/03/2021 15:34:Scusa ma la data che inserisci sulla userform in quale colonna del foglio store deve andare?
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
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
alfrimpa, 30/03/2021 19:59:Al pulsante sulla userform abbina questo codice vbPrivate 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 vbPrivate 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.
alfrimpa, 02/04/2021 12:21:Puoi farlo utilizzando un CERCA.VERT lato VBA (WorksheetFunction.VLookup).
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
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
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