Where do I use Ansible and where is Terraform used? ( Strengths & Weaknesses)
I think you have to consider the history of the two tools to answer this question properly:


Ansible was created to manage the installation and maintenance of virtual machines, thus it originally only had the capability to install software into an operating system, perform systems administration tasks within that machine.  Subsequently, it has been extended to be able to create cloud resources in AWS, Azure, GCP and others.
Terraform was created to manage cloud resources, it's effectively a facade layer over the various APIs in AWS, Azure, GCP, etc.  It has subsequently been extended to be able to cover many of the functions that Ansible also covers such as installing software.


My personal workflow is to use both applications for what they are really good at, thus I create infrastructure (Virtual Machines, Clusters, Storage, Networks, etc) in Terraform and then use Ansible to install and configure software as required.

I can, and have in some situations, just used Terraform or Ansible, it's just a little harder as you have to learn how to use one tool in a different way.

Bruce Becker pointed out in a comment that one of the main differences is the fact that Terraform is "eventually consistent", in that it does a good job of understanding the current state and then making changes that converge on a "desired state". This workflow is better for the majority of tasks than Ansible. In Ansible you can do a test run with --check, but this doesn't always take into account cascading changes.