I ma not sure the reason you need a Do...Loop to surround the user input (AcadUtility.Getxxxx()).
When getting a user input, the result could be either expected, or not expected (invalid input), or cancel (when user press Esc key, which results in VBA to raise a runtime error).
Usually a loop could be used to surround GetXXXX() call, if the user input is not in expected range and you want user to input again; or if the user input presents a list of keywords, some of them result in another round of user input.
In your case, if you indeed required the selected entity being longer that 15, then your code does things correctly: user will be asked for input again and again until the selected entity is longer than 15. However, it may be better to use keyword (AcadUtility.InitializeInput()) in conjunction with GetXxxx() call, to give user other necessary/better options.
Also, when using GetXXXX(), it is common practice to handle error to catch user pressing Esc button to cancel the input:
On Error Resume Next
ThisDrawing.Utility.GetEntity ent, pt, vbCr & "Select entity:"
In the next line of code, you can either test if the "ent" is Nothing or not. If it is nothing, then user pressed Esc; or you can test err.Number:
If err.Number<>0 Then
''User pressed Esc
End if
If you do use Loop to surround the GetXxxx() call, you can exit the loop anytime (in whatever condition you choose) when Exit Loop statement:
On Error Resume Next
Do
ThisDrawing.Utility.GetXxxx ...
''Test error (user pressed Esc?)
'' Do something
If [condition2] Then
Exit Loop
End if
'' Loop continues as long as [condition1] is met
Loop While [condition1]