When you execute shell script with ansible module ansible.builtin.shell, bash is invoked as a non-interactive login shell. Consequently, environment variables from the user are not loaded.

If you execute man bash, you’ll see:

When  bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile,
       if that file exists.  After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands  from  the  first
       one that exists and is readable.  The --noprofile option may be used when the shell is started to inhibit this behavior.

       When  an  interactive  login shell exits, or a non-interactive login shell executes the exit builtin command, bash reads and executes commands from the files ~/.bash_logout
       and /etc/bash.bash_logout, if the files exists.

       When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists.  This may be inhibited  by  using  the
       --norc option.  The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.

       When  bash  is  started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV in the environment, expands its value if it appears there,
       and uses the expanded value as the name of a file to read and execute.  Bash behaves as if the following command were executed:
              if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
       but the value of the PATH variable is not used to search for the filename.

The solution is juste to explicitly load bash_profile:

- name: "On récupère la version d'oracle"
      ansible.builtin.shell: |
      source $HOME/.bash_profile # or source ~/.bash_profile
      echo $ORACLE_HOME
      echo $ANOTHER_ENV_VAR