(Guide en français – version 23.x et suivantes) > Objectif : vous montrer comment éliminer les tâches manuelles d’import et d’export de données (clients, devis, factures, stocks, etc.) dans Dolibarr grâce aux fonctionnalités natives, aux modules supplémentaires et aux scripts externes.
1️⃣ Pourquoi automatiser les import‑export dans Dolibarr ?
| Besoin fréquent | Problème sans automatisation | Solution automatisée |
|---|---|---|
| Migration de données | Saisie manuelle, erreurs de copie, perte de temps. | Script d’import CSV qui charge des centaines voire des milliers d’enregistrements en quelques secondes. |
| Synchronisation avec un ERP / CRM externe | Export/Import ponctuel, pas de suivi. | Job planifié (cron ou tâche Windows) qui extrait les nouveaux articles chaque nuit et les pousse dans l’autre système via l’API. |
| Reporting périodique | Export manuel de factures ou de stocks chaque mois. | Export automatique vers répertoire FTP, SFTP ou Google Drive à la date fixée. |
| Mise à jour de prix / références | Modification ligne par ligne dans le catalogue. | Batch d’import qui met à jour les prix directement depuis un fichier de prix fourni par le fabricant. |
2️⃣ Les mécanismes natifs de Dolibarr
| Fonction | Où se trouve ? | Points clés |
|---|---|---|
| Import/Export via le module “Import‑Export” | Menu Maintenance → Import‑Export | Prend en charge les formats CSV, TSV, ODS, JSON. Interface graphique simple. |
| Batch import via ligne de commande | dolibarr.php (ou cli.php à partir de 22.0) |
Permet de lancer un import sans passer par l’interface (utile pour les scripts cron). |
| Scheduled jobs (tâches planifiées) | Menu Maintenance → Scheduler | Crée des tâches récurrentes (ex. : export chaque jour à 02 h). |
| API REST (Dolibarr 22+) | /dolibarr/api |
Expose des endpoints RESTful (GET/POST/PUT/DELETE) pour créer ou récupérer des données directement. |
| Webservice SOAP (ancien) | Désactivé par défaut, mais disponible si le plugin SOAP est activé. | Utilisable pour les anciennes intégrations. |
3️⃣ Exemples concrets d’automatisation
📥 Exemple 1 : Importer massivement des clients depuis un CSV chaque semaine
-
Préparer le CSV (
clients.csv) :nom,adresse,code_postal,ville,pays,email,phone
Dupont Jean,12 rue des Fleurs,75001,Paris,France,jean.dupont@exemple.com,0123456789
Martin Sophie,5 avenue du Port,13001, Marseille,France,sophie.martin@exemple.com,0412345678 -
Créer le fichier de mapping (dans
htdocs/import/import_customer.php) (exemple simplifié) :<?php
require_once "../../main.inc.php";
require_once $conf->path.'class/import/ImportCustomer.php';
$imp = new ImportCustomer($db);
$imp->init();
$imp->mapCSVHeaders([
'nom' => 'label',
'adresse' => 'address',
'code_postal' => 'zipcode',
'ville' => 'city',
'pays' => 'country_id',
'email' => 'email',
'phone' => 'phone'
]);
$imp->setFile('clients.csv');
$imp->import();
echo $imp->getMessage();
?> -
Créer la tâche planifiée (cron)
0 3 * * MON /usr/bin/php /var/www/html/dolibarr/htdocs/import/import_customer.php >> /var/log/dolibarr_import_customer.log 2>&1Résultat : chaque lundi à 03 h, tous les nouveaux clients du fichier
clients.csvsont importés dans Dolibarr sans intervention humaine.
📤 Exemple 2 : Exporter automatiquement les factures du mois précédent chaque 1er du mois
-
Utiliser le scheduler intégré
- Aller dans Maintenance → Scheduler.
-
Créer une nouvelle tâche :
Champ Valeur Description Export factures du mois précédent Cron 0 4 1 * *Commande php -f /var/www/html/dolibarr/htdocs/report/export_factures.php
-
Script d’export (
export_factures.php)« `php <?php
require_once ‘inc.php’;
require_once ‘core/init.php’;
$export = new FactureExport($db);
$export->setPeriod(‘previousmonth’); // fonction fictive, adaptée à votre version
$export->saveCSV(‘/var/www/html/dolibarr/exports/factures‘ . date(‘Ym’) . ‘.csv’);
echo "Export terminé le ".date(‘H:i’)."\n";
?> - Livraison
- Le fichier CSV apparaît chaque 1er du mois dans le dossier
/exports. - Vous pouvez ajouter une ligne
curl -F "file=@/exports/factures_$(date +%Y%m).csv" https://myshop.com/uploadpour le transmettre directement à un partenaire.
- Le fichier CSV apparaît chaque 1er du mois dans le dossier
🔁 Exemple 3 : Synchroniser les prix des produits depuis un fichier Excel quotidien
-
Fichier source (
prices.xlsx) – généré chaque jour par le système de gestion des fournisseurs.id_produit prix_unitaire PROD123 17,50 PROD124 23,30 -
Convertir en CSV (
prices.csv) → (peut être fait par le script d’extraction du fournisseur ou par un simplexlsx2csv) -
Routine d’import dans Dolibarr :
php -f /var/www/html/dolibarr/htdocs/stock/update_prices.php<?php
require_once '../inc.php';
require_once 'class/ProductImport.php';
$imp = new ProductImport($db);
$imp->setFile('prices.csv');
$imp->setMapping([
'id_produit' => 'ref',
'prix_unitaire' => 'price',
]);
$imp->importFromFile(); // charge le CSV et met à jour le prix du produit
echo $imp->getMessage();
?> -
Planifier le tout avec cron (tous les jours à 02 h)
0 2 * * * /usr/bin/php /var/www/html/dolibarr/htdocs/stock/update_prices.php >> /var/log/dolibarr_price_update.log 2>&1Résultat : à chaque matin, les prix du catalogue sont mis à jour automatiquement dans Dolibarr. Pas besoin de toucher le fichier manuellement.
4️⃣ FAQ – Questions fréquentes
| Question | Réponse détaillée |
|---|---|
| 1. Quels formats de fichiers peuvent être importés ? | CSV (UTF‑8), TSV, ODS, XLSX (via le plugin odt2csv), JSON. Le mapping doit respecter l’ordre des colonnes : la première ligne doit contenir les en‑têtes. |
| 2. Puis‑je limiter l’import à certaines catégories de produits ? | Oui. Dans le fichier de mapping, ajoutez une colonne “category” ou utilisez le filtre Import→Criteria (ex. : category = 'Alimentaire'). Vous pouvez également ajouter condition dans le script : if ($row['category'] != 'Alimentaire') continue;. |
| 3. J’obtiens “Error: Duplicate key” lors de l’import. Pourquoi ? | Cela signifie qu’un enregistrement possède déjà la même clé (généralement ref ou email). Soit vous supprimez/renommez les doublons dans le CSV, soit activez l’option “Ignore existing entries” du module Import‑Export. |
| 4. Comment exporter uniquement les lignes “non traitées” après un job planifié ? | Activez le mode “Log” du scheduler. Le fichier de log (/var/log/dolibarr_scheduler.log) contiendra l’output de chaque commande. Vous pouvez créer un second script qui lit le log et exporta les enregistrements dont le champ import_status = ‘pending’. |
| 5. Puis‑je automatiser l’envoi par e‑mail des rapports d’export ? | Oui. Ajoutez dans le script d’export une partie PHPMailer : $mail = new PHPMailer(); $mail->addAddress('admin@example.com'); $mail->Subject='Rapport factures du mois précédent'; $mail->Body=$content; $mail->send(); (Assurez‑vous que l’extension PHPMailer est installée via Composer ou le dépôt de Dolibarr). |
| 6. J’ai besoin d’importer des données très volumineuses (plus de 100 k lignes). Quelle configuration faut‑il modifier ? | – Augmentez memory_limit à 256 M ou plus dans php.ini. – Augmentez max_execution_time à 300 s. – Utilisez le mode CLI ( php -f script.php) plutôt que l’interface web pour éviter les timeout. – Activez le batch size du ImportProduct ($imp->setBatchSize(500)) pour traiter par paquets. |
| 7. Que faire si l’import échoue à mi‑parcours ? | Dolibarr crée un fichier import_<module>_log.txt contenant la ligne échouée et le message d’erreur. Corrigez le CSV puis relancez le script. Vous pouvez aussi activer la fonction “Rollback transaction” (dans class/import/ImportProduct.php) pour annuler l’ensemble des écritures en cas d’erreur. |
| 8. Est‑ce que les automatisations fonctionnent aussi en mode multi‑site (multisociete) ? | Oui. Le script doit préciser la société active : $db->setSociete($socid); ou bien appeler SetCurrentSocite($soc_id); avant le traitement. Vous pouvez injecter le numéro de société dans le nom du fichier d’import pour lancer un job distinct pour chaque site. |
| 9. Pouvez‑je déclencher manuellement un export depuis l’interface admin par cron ? | Oui. Accédez à Maintenance → Scheduler → Run et choisissez le job correspondant. Vous pouvez le rendre disponible via une URL “trigger” : http://exemple.com/dolibarr/htdocs/scheduler/runs.php?job=export_price. |
| 10. Où stocker les fichiers d’export afin qu’ils soient accessibles en HTTPS ? | Placez le répertoire dans public_html/exports/ (ou un sous‑dossier protégé par .htaccess qui limite l’accès). Exemple d’.htaccess : AuthType Basic AuthName "Accès restreint" AuthUserFile /etc/apache2/.htpasswd Require valid-user Allow from all Assurez‑vous que le serveur Apache est configuré pour servir ce chemin sans exécution de PHP (pas de Options +ExecCGI). |
5️⃣ Bonnes pratiques à retenir
- Versionner les scripts : stockez vos fichiers
*.phpet les CSV dans un dépôt Git. Ainsi, les changements sont traçables et vous pouvez revenir à une version fonctionnelle. - Testez en mode “Dry‑run” avant de lancer l’import sur les données de production. La plupart des classes d’import offrent un flag
--dry-runqui simule l’opération sans écrire en base. - Utilisez des chemins relatifs (
$doc->path) afin que le script reste portable quel que soit l’emplacement du serveur. - Conservez les logs (
>> /var/log/...) pour pouvoir diagnostiquer les échecs sans toucher au système. 5. Sécurisez les accès : le répertoire d’export ne doit contenir aucun script d’exécution. Ajoutez un.htaccessinterdisantphpet$_REQUEST. - Automatisez les notifications : ajoutez un envoi d’e‑mail ou de notification Slack dès la fin du job (
curl -X POST -d '{"text":"Import OK"}' https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX). 7. Mettez à jour le plugin “Import‑Export” régulièrement. Les versions 23.x introduisent la prise en charge native des fichiers XLSX et un mapper JSON plus puissant. —
6️⃣ Ressources complémentaires
| Ressource | URL |
|---|---|
| Documentation officielle – Import/Export | https://wiki.dolibarr.org/fr/Import-Export |
| Plugin “Scheduled Jobs” (Scheduler) | https://github.com/Dolibarr/dolibarr-modules-morning |
| API REST – Guide d’utilisation | https://wiki.dolibarr.org/fr/API_REST |
| Article community – “Batch import avec PHP CLI” | https://blog.tuxfamily.org/2022/09/12/batch-import-dolibarr/ |
| Webinar – “Automatiser les processus de facturation” (enregistrement) | https://www.dolibarr.org/webinars/automatisation-facturation |
| Pack d’exemples GitHub | https://github.com/Dolibarr/dolibarr-import-export-examples |
7️⃣ Conclusion
Dolibarr offre déjà de solides fonctionnalités d’import‑export, mais c’est en les couplant à des jobs planifiés, à l’API ou à des scripts CLI que l’on touche à l’automatisation véritable.
- Vous pouvez déployer des migrations massives en un clic, synchroniser les prix chaque jour, ou exporter des rapports à intervalles réguliers sans toucher à l’interface.
- La mise en place passe par trois étapes clés : définir le format du fichier → créer/mapper le script → planifier le job.
- En suivant les bonnes pratiques (logs, dry‑run, versionning) et en exploitant les FAQ ci‑dessus, vous éliminerez les tâches répétitives et réduirez les risques d’erreur dans votre flux de travail quotidien. > Envie d’un starter kit ?
Clonez le dépôt : >
bash git clone https://github.com/Dolibarr/dolibarr-import-export-examples.git cd dolibarr-import-export-examples cp ex_jobs/* /var/www/html/dolibarr/htdocs/ chmod 750 /var/www/html/dolibarr/htdocs/import*> Vous avez ainsi un squelette prêt à être adapté à vos fichiers CSV/SQL et vos besoins spécifiques.
Bonne automatisation ! 🚀
Article rédigé en novembre 2025 – basé sur Dolibarr 23.0 et versions supérieures.