problem while using Vector3.MoveTowards

I’m trying to make a deck of cards and the player should be able to draw a random card from the deck (clone) and then move it to hand ,the problem is that it’s look like the movement happen in just one frame… i’m new to unity and c# .

 void Update()
    {
    if (isdraw)
    {
        Debug.Log("pressssd");
          StartCoroutine("MoveDealtCard");
      
    }
      isdraw = false ;
}
 GameObject DealCard()
{
    if (cards.Count == 0)
    {
        showReset = true;
        return null;
        //Alternatively to auto reset the deck:
        //ResetDeck();
    }

    int card = Random.Range(0, cards.Count - 1); //pick a random card index
    GameObject go = GameObject.Instantiate(cards[card]) as GameObject; //Clones the object original  
    cards.RemoveAt(card);

    if (cards.Count == 0)
    {
        showReset = true;
    }

    return go; //returns the clone
}

 IEnumerator MoveDealtCard()
{
    GameObject newCard = DealCard();
    // check card is null or not
    if (newCard == null)
    {
        Debug.Log("Out of Cards");
        showReset = true;
        yield return null;
    }

    //newCard.transform.position = Vector3.zero;
    //  newCard.transform.position = new Vector3((float)cardsDealt / 4, (float)cardsDealt / -4, (float)cardsDealt / -4); // place card 1/4 up on all axis from last
    float step = speed * Time.deltaTime;
    newCard.transform.position = Vector3.MoveTowards(transform.position, target.position, step);
    hand.Add(newCard); // add card to hand
    cardsDealt++;
    yield return null;
}

MoveDealtCard does not contain any loop, so the MoveTowards is only executed once and then the routine ends.

You probably want some kind of for or while - loop in MoveDealtCard to execute the movement steps until the card reached its destination:

newCard.transform.position = transform.position; // start at our position
while (Vector3.Distance(newCard.transform.position, target.position) > 0.1f) // until we come really close
{
     float step = speed * Time.deltaTime;
     // step by step move towards the target.position
     newCard.transform.position = Vector3.MoveTowards(newCard.transform.position, target.position, step);
     yield return null; // continue next frame
}