My concern here is that if we use Dave's second submitted code which the OP say works if we change Tcnt to (tcnt-1) in line 11.

Sub Test2()
    Dim ws As Worksheet, LastRow As Integer, Cnt As Integer, Tcnt As Integer
    Set ws = ThisWorkbook.Sheets("Sheet1")
    With ws
        LastRow = .Range("I" & .Rows.Count).End(xlUp).Row
        .Range(.Cells(1, 2), .Cells(LastRow, 2)).ClearContents
    End With
    For Cnt = 1 To LastRow
        Tcnt = Tcnt + 1
        If ws.Cells(Cnt, "I") >= ws.Cells(1, "D") Then
           ws.Cells(Cnt, "B") = Tcnt
           Tcnt = 0
       End If
    Next Cnt 
End Sub
In this code we are setting Tcnt to 1
Tcnt = Tcnt + 1
Why isn't Tcnt set to zero initially? If we follow the OP's suggestion of amending the following line to this
ws.Cells(Cnt, "B") = (Tcnt - 1)
You are setting the value back to Zero if it finds a value greater than or equal to the value in cell D1, which means it doesn't count the find.