I had the same problem and to solve it, I intercept the ColumnWidthChanged event.
The width of the column txtLibel can changed, the others don’t change (sum of width = 530).
Private Sub dgvEcrit2_ColumnWidthChanged(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) _
Handles dgvEcrit2.ColumnWidthChanged
If e.Column.Name = "txtLibel" Then
Dim w As Int16 = dgvEcrit2.Columns("txtLibel").Width
w = Me.dgvEcrit2.Location.X + Me.dgvEcrit2.RowHeadersWidth + 530 + w
Me.txtSoldeInitD.Location = New System.Drawing.Point(w + 5, 12)
Me.txtSoldeInitC.Location = New System.Drawing.Point(w + 85, 12)
End If
End Sub