Ciao Sol39
,
avrei una necessità e ho bisogno del vostro aiuto:
in un file excel è presente un foglio chiamato foglio1;
in questo foglio1 è presente un database, di valori numerici e non, che occupa le colonne A, B, C, D ed E e le righe vanno man mano ad aumentare ad ogni inserimento;
sempre in questo foglio c'è un pulsante che mi apre una userform e in questa userform sono presenti sei textbox (5 per i valori delle colonne e una per la ricerca parziale del testo;
Quello che vorrei:
Vorrei che nella textbox1, appena scrivo un valore (che è contenuto in un punto del database (colonne A:E, riga x)) mi esca la riga corrispondente nelle 5 textbox.
Se invece non è presente, vorrei che mi uscisse un messagebox con scritto: attenzione il valore che stai cercando non è presente nel database.
Tipo:
la textbox1 serve per la ricerca parziale.
la textbox2 conterrà i valori della colonna A
la textbox3 conterrà i valori della colonna B
la textbox4 conterrà i valori della colonna C
la textbox5 conterrà i valori della colonna D
la textbox6 conterrà i valori della colonna E
al database verrano inseriti valori (quindi ogni riga sarà piena) sia tramite foglio, sia tramite altra userform.
Spero in un vostro aiuto e grazie mille in anticipo.
Per qualsiasi domanda, sono qui.
Sol39
In assenza di un file di esempio, ho presupposto che la tabella dati sia una tabella Excel strutturata.
Con questo presupposto, prova quanto segue:
'========>>
Option Explicit
'-------->>
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim SH As Worksheet
Dim Rng As Range, foundRng As Range, dataRng As Range
Dim oTabella As ListObject
Dim oTBox As MSForms.TextBox
Dim arrTextBox As Variant
Dim sRicerca As String
Dim i As Long
Const sFoglio As String = "Foglio1"
Const sTabella As String = "Tabella1"
sRicerca = Me.TextBox1.Value
Set SH = ThisWorkbook.Sheets(sFoglio)
Set oTabella = SH.ListObjects(sTabella)
Set Rng = oTabella.DataBodyRange
With Me
arrTextBox = Array(.TextBox2, .TextBox3, .TextBox4, .TextBox5, .TextBox6)
End With
Set foundRng = Rng.Find(What:=sRicerca, After:=Rng.Cells(1), LookIn:=xlFormulas2, \_
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, \_
MatchCase:=False, SearchFormat:=False)
If Not foundRng Is Nothing Then
Set dataRng = Intersect(foundRng.EntireRow, Rng.EntireColumn)
For i = 1 To Rng.Columns.Count
Set oTBox = arrTextBox(i - 1)
oTBox.Text = dataRng.Cells(i).Value
Next i
Else
For i = 1 To Rng.Columns.Count
Set oTBox = arrTextBox(i - 1)
oTBox.Text = vbNullString
Next i
Call MsgBox(Prompt:="La stringa " & sRicerca & " non e' stata trovata! ", \_
Buttons:=vbCritical, \_
Title:="REPORT")
End If
End Sub
'<<========
Potresti scaricare il mio file di prova Sol20231011.xlsm
Postscriptum:
Per un collegamento alternativo allo stesso file, prova: Sol20231011.xlsm
===
Regards,
Norman
