Mettre à jour les produits par programme dans Magento

Je suis en train de travailler sur un script qui permettra de créer ou de mettre à jour les produits de mon catalogue.
Le script fonctionne très bien lorsque le produit a besoin d'être créé, mais il échoue lorsque le produit existe déjà dans la base de données me donner (beaucoup de fois) les messages suivants :

2011-09-30T08:00:53+00:00 ERR (3): Recouvrable d'Erreur: Argument 3
passé à
Mage_Catalog_Model_Resource_Eav_mysql4_abstract::_canUpdateAttribute()
doit être un tableau, null donné, appelé en ...
2011-09-30T08:00:53+00:00
ERR (3): Recouvrable d'Erreur: Argument passé à 3
Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() doit être un
tableau, null donné, appelé en ...
2011-09-30T08:00:53+00:00 ERR (3):
Avertissement: array_key_exists() [function.tableau-clé-existe en]:
deuxième argument doit être un tableau ou un objet en ...

J'ai été à la recherche à la méthode citée dans le message, mais je ne peux pas trouver une raison pour laquelle le script échoue.
Le script d'abord essayer de charger un produit en utilisant :

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);

puis de tester si le produit a été extrait à l'aide d'un simple if(!$product) { //creation }.
Tout le code qui suivent l'instruction if est partagé pour la création ou la mise à jour et se compose de setter appels sur l'objet produit.

Voici le code que j'utilise :

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
if(!$product) {
    //the product doesn't exist yet
    $product = new Mage_Catalog_Model_Product();
    $product->setSku($sku);
    $product->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE);
    $product->setCreatedAt(strtotime('now'));
}
//setters calls
$product->setTeinte(trim((string)$record->web_teinte));
//...
//finally save the product
$product->save();

Peut-être que quelqu'un a déjà été confronté au même problème.
Toute aide est la bienvenue ! Merci.

source d'informationauteur