cron – taxClassId are not registered with the rest of the product

I'm trying to update some attributes of my product with a cron to avoid common mistakes. The code causing me problems is executed in a loop:

foreach ($ storesIds as $ storeId) {
$ this-> storeEmulation-> startEnvironmentEmulation ($ storeId);
$ fixed = $ this-> doExecute ($ storeId);
$ this-> storeEmulation-> stopEnvironmentEmulation ();
}

The code of the "doExecute method" is simplified here, tests are done before to avoid saving a product for nothing, here is how I save a product:

$ searchCriteria = $ this-> searchCriteriaBuilder-> create ();
$ products = $ this-> productRepository-> getList ($ searchCriteria) -> getItems ();

// [...]

foreach ($ produced as $ product) {

// [...]

    $ fixes[] = ['visibility' => ['from' => $product->getVisibility(), 'to' => $expectedVisibility]];
$ product-> setStatus ($ expectedVisibility);

$ fixes[] = ['taxClassId' => ['from' => $product->getTaxClassId(), 'to' => $expectedTaxClassId]];
$ product-> setTaxClassId ($ waitTaxClassId);

try {
$ this-> productRepository-> save ($ product);
$ this-> logger-> notice ('A product has been corrected', [
            'sku' => $product->getSku(),
            'storeId' => $store->getId(),
            'fixes' => $fixes
        ])
} catch ( Exception $ e) {
$ this-> logger-> error ('A product can not be repaired', [
            'sku' => $product->getSku(),
            'storeId' => $store->getId(),
            'fixes' => $fixes
        ])
}
}

I can see in the newspapers that during the first extraction, visibility is corrected. But the taxClassId does not change:

[2019-03-15 22:49:57]    FixLogger.NOTICE: A product has been corrected {"sku": "107", "storeId": "8", "corrects":[{"taxClassId":{"from":"0","to":"2"}}]} []
[2019-03-15 22:49:58]    FixLogger.NOTICE: A product has been corrected {"sku": "018-K", "storeId": "8", "corrects":[{"visibility":{"from":"2","to":1}},{"taxClassId":{"from":"8","to":"2"}}]} []
[2019-03-15 22:49:58]    FixLogger.NOTICE: A product has been corrected {"sku": "109-K", "storeId": "8", "corrects":[{"taxClassId":{"from":"8","to":"2"}}]} []

[2019-03-15 22:50:27]    FixLogger.NOTICE: A product has been corrected {"sku": "107", "storeId": "8", "corrects":[{"taxClassId":{"from":"0","to":"2"}}]} []
[2019-03-15 22:50:27]    FixLogger.NOTICE: A product has been corrected {"sku": "018-K", "storeId": "8", "corrects":[{"taxClassId":{"from":"8","to":"2"}}]} []
[2019-03-15 22:50:28]    FixLogger.NOTICE: A product has been corrected {"sku": "109-K", "storeId": "8", "corrects":[{"taxClassId":{"from":"8","to":"2"}}]} []

Any idea where I'm wrong?

Thank you for your help!