ho anche specificato che ha dei problemi
Non ha solo problemi di funzionamento, è la logica che non va. Per esempio...
codice:
If MIA_FLEX.Rows <> MIA_FLEX.Row + 1 Then

'tutto quello che segue verrà eseguito solo se .Rows è diverso da .Row+1  
   
   If MIA_FLEX.Row = 0 Then
        With MIA_FLEX
            .Row = .Row + 1
            .RowSel = .Row
            .ColSel = .Cols - 1
            If .RowIsVisible(.Row) = False Then .TopRow = .Row
            .SetFocus
        End With
    
    Else
    
'...quindi la condizione che segue non potrà mai essere vera
 
       If MIA_FLEX.Rows = MIA_FLEX.Row + 1 Then
    
            With MIA_FLEX
                .Row = .Row - 1
                .RowSel = .Row
                .ColSel = .Cols - 1
                If .RowIsVisible(.Row) = False Then .TopRow = .Row
                .SetFocus
            End With
        
        Else
    
            With MIA_FLEX
                .Row = .Row - Rotation
                .RowSel = .Row
                .ColSel = .Cols - 1
                If .RowIsVisible(.Row) = False Then .TopRow = .Row
                .SetFocus
            End With
            
        End If
    
    End If

End If