Why Dose not this work (IEnumerator)

Hi.
I’m having trouble with my script.
I am trying to make my object move from A to B in x amount (this case 4) seconds;
But when I run my script the objects just flies away and the teleports to point B;

Please help

        if (Input.GetKey(KeyCode.H))
        {
            StartCoroutine(Move(transform.position, HomePos.transform.position, 3.0f, this.gameObject.transform));
        }


IEnumerator Move(Vector3 A, Vector3 B, float time, Transform target)
        {
        float speed = Vector3.Distance(A,B) / time; 

        Vector3 direction = (B - A).normalized;

        target.position = A;

        float elapsed = 0.0f;

        while (elapsed < time) 
        {
            elapsed += Time.deltaTime;
            target.Translate(direction * speed * Time.deltaTime);
            yield return true;
        }
        transform.position = B;
    }

I might do it this way:

void Update() {
	if (Input.GetKeyDown(KeyCode.H)) {
		StartCoroutine(Move(HomePos.transform.position, 3.0f, gameObject.transform));
	}
}

IEnumerator Move(Vector3 newPos, float time, Transform target) {
	float speed = (target.position - newPos).magnitude / time; 

	while (target.position != newPos) {
		transform.position = Vector3.MoveTowards (target.position, newPos, Time.deltaTime * speed);
		yield return null;
	}	                                          
}

Note I’ve eliminated the start position and just assume the current position is the start position.