Ho fatto qualche prova e, partendo dal fatto che la DataGridView è un oggetto pesante e lento di suo, tu fai mille cose per peggiorare la situazione.
- usi pesantemente ContabilitaDataGridView_CellFormatting per ogni cella che viene visualizzata (è pesantissimo) e fra l'altro ripetendo due volte
If e.ColumnIndex = 1 Then senza un perché ...
- adotti il resize fill automatico delle colonne, altra scelta discutibile, che fa perdere un sacco di tempo alla visualizzazione. Mettilo a None
- calcoli e ricalcoli entrate e uscite continuamente e con il codice ripetuto (mettilo in una Sub no?) anche quando non serve ... A che ti serve nella Load se lo fai nella Shown?
- il calcolo lo fai nelle textbox e poi nel Change delle textbox queste si modificano ricorsivamente per il formato ... ma che senso ha? Solo per perdere termpo? Togli tutto il codice dai change del textbox e fai direttamente quello che ti serve nel calcolo. Metti
Dim somma As Decimal = 0
e poi
TextBox1.Text = somma.ToString("c2")
e ovviamente
TextBox3.Text = (somma - uscite).ToString("c2")
Fra l'altro questo calcolo andrebbe fatto fare al DBMS nella SELECT aggiungendo SUM(entrate) e SUM(uscite) e non al codice ...
Comunque, non migliorerai chissà quanto la situazione perché, ti ripeto, la DataGridView è lenta di suo. Ma poi, se continui ad usare tutti gli automatismi (binding, ecc...) e non codice completamente controllato da te, non potrai ottimizzare moltissimo.