Try setting Temp to the Range Value...
Use
mondico(c.Offset(, 1).Value) = c.Offset(, 1).Value
In all subs, instead of
temp = c.Offset(, 1)
mondico(temp) = temp
I see that you are searching the entire column for the textbox value in every case. It will be much faster if you group all the Rows by the Profs in textbox 1 sub, then just search those rows.
StartRow = Columns(1).Find(What:=textbox1, After:=Cells(Rows.Count, "A"), SearchDirection:=xlNext).Row
EndRow = Columns(1).Find(What:=textbox1, After:=Cells(Rows.Count, "A"), SearchDirection:=xlPrevious).Row
For each c in Range(Rows(StartRow & ":" & EndRow)).Columns(n)
In fact, I dislike looping that much that I Sort+Unique the first column into an index list in column A and use that List as textbox1.list