No sé si tu función será coherente o no porque esto es el foro de VB cásico y aparte no controlo el datagrid, pero te puedo intentar aconsejar un poco:
En primer lugar noto que no sales del Loop en ningún momento, lo que hace que la función se ejecute hasta el final siempre.
En segundo lugar yo probaría comparando valores en lugar de cadenas de texto que pueden contener espacios.
En tercer lugar, si el valor puede ser 0 deberias inicializar number con -1 y la variable e ponerla a 0 a cada vuelta del primer loop
Algo así:
Código vb:
Ver originalDo
number = i
e=0
Do
If Val(DataGrid_Clientes.Item(i, 0).Value) = e Then
number = -1
exit do ' si el numero esta en uso no buscamos mas
End If
e += 1
Loop While (e < DataGrid_Clientes.RowCount)
if number<>-1 then exit do ' si encontramos un numero vacio no buscamos mas
i += 1
Loop While (i < DataGrid_Clientes.RowCount)
No sé si es del todo correcto, pero espero que te ayude en algo.
Saludos.