Redirect user based on role when they try access a particular page

function redirect_non_vendors() {

    global $wp;
    $user = wp_get_current_user();

    $role_needed = 'vendor';
    $page_to_check = 'secret/page/url';
    $redirect_url = home_url( '/go-here/' );

    if ( ! in_array( $role_needed, (array) $user->roles ) && $page_to_check === $wp->request ) {
        wp_redirect( $redirect_url );
        exit;
    }
}

add_action( 'template_redirect', 'redirect_non_vendors' );

You’ll want to replace three things here:

vendor: the role that someone has to have to access the page

secret/page/url: the “particular page” you mention in your question

/go-here/: the URL to send a user to if they are not the role