I need to write a Validation Rule that states: When a user manually tries to change or update the value of Stage on Opportunity object it should throw an error. On opportunity there exists an Approval Process and the stage should be updated only through an approval process or there is a field update through Approval Process.
You can use Workflow rule and Record type to achieve this. Create Two record type and set their dependent picklist values. When You submit that record for approval, update a sample field which will call workflow rule to change the record type of your object. And using that record type you can see the picklist values which are valid for the user to set.
I wrote a simple validation rule which fires only when the field is being updated manually and not through the approval. I am quite dazed by the way it functions but it works. The Approval process bypasses the validation and it updates the record as per the functionality.
This is the simple Validation Rule I wrote and it worked fine:
(ISPICKVAL(PRIORVALUE(StageName), 'Gate 2') && ISPICKVAL(StageName, 'Gate 3'))
(ISPICKVAL(PRIORVALUE(StageName), 'Gate 3') && ISPICKVAL(StageName, 'Gate 4'))