Si jamais, encore des personnes sur prestashop 1.6 :
vous pouvez commenter ce code de la classe cartRule et ça marchera
// Check if the carrier chosen by the customer is usable with the cart rule
if ($this->carrier_restriction && $check_carrier) {
/*
if (!$context->cart->id_carrier) {
return (!$display_error) ? false : Tools::displayError('You must choose a carrier before applying this voucher to your order');
}
$id_cart_rule = (int)Db::getInstance()->getValue('
SELECT crc.id_cart_rule
FROM ' . _DB_PREFIX_ . 'cart_rule_carrier crc
INNER JOIN ' . _DB_PREFIX_ . 'carrier c ON (c.id_reference = crc.id_carrier AND c.deleted = 0)
WHERE crc.id_cart_rule = ' . (int)$this->id . '
AND c.id_carrier = ' . (int)$context->cart->id_carrier);
if (!$id_cart_rule) {
return (!$display_error) ? false : Tools::displayError('You cannot use this voucher with this carrier');
}
*/
}