Ibrahim Ba comincia l’esperienza italiana con la maglia del Milan nell’estate del 1997, acquistato per 11,5 miliardi di lire. Silvio Berlusconi, vedendolo in campo in occasione di una partita amichevole allo Stadio Brianteo di Monza, lo soprannominò Beaujolais nouveau, paragonandolo al vino francese per la sua frizzantezza. Nel corso dei primi due anni trascorsi al Milan era riconoscibile dal soprannome Ibou, ereditato dal padre e stampato sulla sua maglia numero 13, e per la pittoresca capigliatura ossigenata.
Nonostante la stagione fallimentare della squadra, che nel 1997-1998 chiude al 10º posto in Serie A e perde la finale di Coppa Italia contro la Lazio, Ba, pur avendo un rendimento altalenante anche all’interno delle singole partite, alternando errori banali ad azioni di rilievo, si rende protagonista su 40 partite stagionali di 11 assist per i compagni tra campionato e coppa nazionale, più un’autorete procurata e un gol, contro la Lazio, alla seconda giornata. Impiegato da Fabio Capello sulla corsia destra di centrocampo nel 4-4-2, a tratti ha mostrato nella sua prima stagione rossonera ottime capacità di corsa e inserimento sulla fascia finalizzate al cross o al passaggio, risultando spesso determinante nelle azioni da gol rossonere e segnalandosi come uno dei migliori giocatori della deludente stagione del Milan. Nel 1998-1999, con l’avvento di Alberto Zaccheroni, comincia da titolare ma già nel mese di ottobre perde il posto da esterno nel 3-4-3 e da lì in poi viene utilizzato soprattutto come subentrante da esterno destro o sinistro, mettendo insieme 18 presenze totali tra campionato e coppa nazionale in un Milan che si laurea campione d’Italia vincendo lo scudetto.
Nella stagione successiva dopo esser subentrato al 77° al posto di Thomas Helveg nella Supercoppa italiana persa 1-2 contro il Parma, passa in prestito al Perugia. Il 18 settembre 1999, al debutto con la squadra umbra, è squalificato per quattro giornate dopo una testata a Fabio Macellari del Cagliari. Ba è il primo giocatore del campionato italiano a essere sanzionato con la Prova TV. La stagione per Ba finisce a fine febbraio quando si rompe il tendine rotuleo della gamba destra in uno scontro di gioco in Perugia-Verona.[7] Le sue presenze in campionato si fermano così a 14, con un gol all’attivo, più 4 presenze e un gol in Coppa Italia. Rientrato al Milan, totalizza appena 11 presenze nel 2000-2001 (comprese tutte le competizioni ufficiali), risultando decisivo in Milan-Bologna (3-3) con un assist da destra a Andriy Shevchenko. Da settembre 2001 a febbraio 2002 veste la maglia dell’Olympique Marsiglia (11 presenze totali), per poi tornare al Milan, con cui scende in campo in due circostanze in campionato durante il resto della stagione 2001-2002. Nell’annata seguente gioca tre partite in Serie A, di cui due da subentrante come terzino destro nel 4-3-1-2 di Carlo Ancelotti e vince la Coppa Italia, collezionando due apparizioni da subentrante nelle due semi-finali contro la sua ex squadra Perugia. Da componente della rosa vince anche la Champions League, pur senza mai scendere in campo nella competizione europea.