Compare commits

..

17 Commits

Author SHA1 Message Date
08ce6f9151 Mise à jour des tableurs Ratio 2026-05-31 09:28:11 +02:00
e50ea5c22c reorganisation ouvrture 2026-05-26 12:41:59 +02:00
a037ac5ea7 refonte générale des requêtes 2026-05-14 15:52:14 +02:00
9e06f7257b Modification des requêtes 2026-05-13 17:36:40 +02:00
c2b75076d0 Modification du versionnage auto 2026-05-10 16:12:23 +02:00
703d2ecda3 Réglages feuille Catalogue 2026-05-08 17:40:18 +02:00
fc0e813b2b Réglages power query pour tout le classeur 2026-05-07 19:30:32 +02:00
e1623d8007 Consolidation des calculs de ratio 2026-05-04 11:17:27 +02:00
2930fd4e50 Maj centrale 2 2026-05-03 15:40:49 +02:00
f26b3d6816 Maj centrale 2026-05-03 10:00:55 +02:00
659c93f3a5 Correction bug UF Articles 2026-05-02 15:01:05 +02:00
422799ece0 maj 2026-04-27 18:33:58 +02:00
5f398fd1f2 Ajout de l'utilisateur dans les inventaires 2026-04-24 08:53:42 +02:00
aadbb77cbc Refonte feuille catalogue 2026-04-23 18:11:18 +02:00
090aa78a59 refonte page Catalogue 2026-04-23 11:49:52 +02:00
b5ab432fa9 Ajout du numéro de facture 2026-04-02 09:26:34 +02:00
c04c7e848b Mise en place maj auto 2026-03-31 17:13:19 +02:00
78 changed files with 904 additions and 408 deletions

4
.gitignore vendored
View File

@@ -39,7 +39,9 @@ Excel/prod/Ratio_Restauration_20*.xlsm
!Excel/prod/Ratio_Cuisine_VERSION.txt
!Excel/prod/Ratio_Restauration.xlsm
!Excel/prod/Ratio_Restauration_VERSION.txt
Excel/backup/
Softs/
Excel/Tableurs modèles/*NEW*.xlsx
# On ignore tout le dev (fichiers de travail)
Excel/dev/
# (Optionnel si tu veux garder le dossier vide dans Git)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,2 +0,0 @@
4.2.66
2026-03-18

Binary file not shown.

View File

@@ -1,2 +0,0 @@
2.1.39
2026-03-18

BIN
Images/Logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 271 KiB

BIN
Images/cuisine.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
Images/restauration.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

537
README.md
View File

@@ -1,203 +1,428 @@
# Inventaire-Gestion
# Ratio Inventaires
Ce projet permet de gérer les inventaires et les ratios de plusieurs sites à partir dun fichier Excel central et dune base MySQL.
Projet Excel/VBA permettant de gérer les inventaires, les articles, les fournisseurs, les factures, le chiffre daffaires et les ratios de consommation pour plusieurs activités.
## Fonctionnalités
* Mise à jour du pilote ODBC sur machine client
* Authentification par site
* Lecture automatique du fichier `ratio.xlsm`
* Insertion des données dans la base correspondante
* Gestion des articles et inventaire par code barres
* Affichage dans Streamlit (à venir)
# 🚀 Installation du pilote MySQL ODBC 8.3
## ✅ Objectif
Assurer une compatibilité totale entre les fichiers Excel connectés à MySQL et le pilote ODBC, en uniformisant tous les postes avec la **version 8.3.0 du connecteur MySQL ODBC**.
Le projet est organisé pour travailler proprement avec PyCharm, Git/Gitea et des scripts de mise en production automatisés.
---
## 📥 Étapes d'installation
## Objectif du projet
1. Télécharger le fichier `mysql-connector-odbc-8.3.0-winx64.msi` depuis le site officiel :
Le projet permet de maintenir plusieurs classeurs Excel métier :
👉 [https://dev.mysql.com/downloads/connector/odbc/](https://dev.mysql.com/downloads/connector/odbc/)
- `Ratio_Cuisine.xlsm`
- `Ratio_Restauration.xlsm`
- `Démo_Ratio_Cuisine.xlsm`
2. Copier le fichier dans ce dossier sur chaque poste cible :
Les fichiers de développement sont conservés dans `Excel/dev`, puis copiés vers `Excel/prod` par des scripts de mise en production.
```
C:\Installers\
```
3. Créer un fichier `Installer_ODBC_93.bat` contenant :
```bat
@echo off
echo ===============================
echo Installation MySQL ODBC 8.3.0
echo ===============================
SET MYPATH=C:\Installers
SET INSTALLER=%MYPATH%\mysql-connector-odbc-8.3.0-winx64.msi
IF EXIST "%INSTALLER%" (
echo >> Démarrage de l'installation silencieuse...
msiexec /i "%INSTALLER%" /qn
echo >> Installation terminée avec succès.
pause
) ELSE (
echo >> Fichier MSI non trouvé :
echo >> %INSTALLER%
pause
)
```
4. Lancer le script :
* clic droit sur `Installer_ODBC_83.bat`
* puis **"Exécuter en tant quadministrateur"**
Le numéro de version est géré automatiquement par fichier `.txt` interne, puis écrit directement dans le classeur Excel livré.
---
## 🔁 (Optionnel) Désinstallation d'une version précédente
## Organisation des dossiers
Pour supprimer proprement une version antérieure (ex : 8.2), vous pouvez ajouter :
```text
Ratio_Inventaires/
├── Docs/
├── Excel/
│ ├── backup/
│ │ └── anciennes versions sauvegardées
│ │
│ ├── dev/
│ │ ├── Ratio_Cuisine_dev.xlsm
│ │ ├── Ratio_Cuisine_VERSION.txt
│ │ ├── Ratio_Restauration_dev.xlsm
│ │ └── Ratio_Restauration_VERSION.txt
│ │
│ └── prod/
│ ├── Démo_Ratio_Cuisine.xlsm
│ ├── Ratio_Cuisine.xlsm
│ └── Ratio_Restauration.xlsm
└── Scripts/
├── Maj_prod_Cuisine.bat
├── Maj_prod_Restauration.bat
├── maj_version.py
└── set_cell_silent.vbs
```
---
## Rôle des dossiers
### `Excel/dev`
Contient les fichiers de travail.
```text
Ratio_Cuisine_dev.xlsm
Ratio_Restauration_dev.xlsm
```
Ces fichiers sont les fichiers modifiables.
Les fichiers `*_VERSION.txt` restent uniquement dans `dev`. Ils servent de compteurs internes pour les scripts de versionnage.
---
### `Excel/prod`
Contient les fichiers livrables.
```text
Ratio_Cuisine.xlsm
Ratio_Restauration.xlsm
Démo_Ratio_Cuisine.xlsm
```
Les fichiers de production ne nécessitent plus de fichier `.txt` à côté. La version est directement écrite dans le classeur Excel.
---
### `Excel/backup`
Contient les anciennes versions de production sauvegardées automatiquement avant remplacement.
Exemple :
```text
Ratio_Cuisine_Vers1.0.15.xlsm
Ratio_Restauration_Vers2.1.3.xlsm
```
Le nombre de sauvegardes conservées est limité dans les scripts `.bat`.
---
### `Scripts`
Contient les scripts dautomatisation :
```text
Maj_prod_Cuisine.bat
Maj_prod_Restauration.bat
maj_version.py
set_cell_silent.vbs
```
---
## Versionnage
Le projet utilise deux familles de versions :
```text
Cuisine → 1.x.x
Restauration → 2.x.x
```
Les fichiers de version à conserver sont uniquement :
```text
Excel/dev/Ratio_Cuisine_VERSION.txt
Excel/dev/Ratio_Restauration_VERSION.txt
```
Les fichiers `.txt` de version ne doivent plus être copiés dans `Excel/prod`.
---
## Fonctionnement du script de version
Le script :
```text
Scripts/maj_version.py
```
fait les opérations suivantes :
1. lit le fichier `*_VERSION.txt` dans `Excel/dev` ;
2. force le numéro majeur selon le classeur ;
3. incrémente le patch ;
4. réécrit le fichier `.txt` ;
5. écrit la version directement dans le classeur Excel de production.
Exemple de version écrite dans Excel :
```text
Version : 1.0.12
Version : 2.1.4
```
Lécriture dans le classeur Excel est faite par :
```text
Scripts/set_cell_silent.vbs
```
Ce script ouvre Excel en arrière-plan, modifie la cellule de version, sauvegarde et ferme le classeur.
---
## Cellule de version dans Excel
La version est écrite automatiquement dans la feuille :
```text
Tableau de bord
```
La cellule utilisée doit être réservée à la version.
Recommandation actuelle :
```text
E1 = Version : x.x.x
```
Attention : `C1` est utilisé par le contexte du site, notamment `SiteCanonique`, et ne doit donc pas être utilisé pour la version.
---
## Mise en production Cuisine
Depuis le dossier `Scripts`, lancer :
```bat
msiexec /x {GUID-DE-LA-VERSION-8.2} /qn
Maj_prod_Cuisine.bat CUISINE
```
*(à compléter avec l'identifiant de produit si nécessaire)*
Le script effectue :
1. sauvegarde de lancienne version de production ;
2. copie de `Excel/dev/Ratio_Cuisine_dev.xlsm` vers `Excel/prod/Ratio_Cuisine.xlsm` ;
3. incrément de `Excel/dev/Ratio_Cuisine_VERSION.txt` ;
4. écriture de la version dans le classeur de production ;
5. nettoyage des anciennes sauvegardes.
---
## 🧩 Conseils
## Mise en production Restauration
* Intégrez ces fichiers dans votre dépôt (ex : dossier `Installers/`)
* Versionnez votre script dans Git (Gitea) pour faciliter le déploiement sur tous les sites
* Utilisez RustDesk ou accès direct pour l'installation sur les PC distants
Depuis le dossier `Scripts`, lancer :
# 🔧 Gestion et distribution du fichier Excel `Ratio_prod.xlsm`
Ce document décrit le fonctionnement mis en place pour garantir une version stable et toujours à jour du fichier Excel `Ratio_prod.xlsm`, utilisé dans le cadre du projet **Ratio & Inventaires**.
---
## 🗃️ Organisation des fichiers
### Structure dans le projet (Git)
/Excel/
├── dev/
│ └── Ratio\_dev.xlsm ← Fichier de travail
├── prod/
│ └── Ratio\_prod.xlsm ← Fichier de production (non suivi par Git)
* `Ratio_dev.xlsm` : version de développement modifiable, suivie par Git.
* `Ratio_prod.xlsm` : version validée, protégée (ajoutée au `.gitignore` pour éviter tout push accidentel).
---
## 🖥️ Synchronisation automatique avec le NAS Synology
Le fichier `Ratio_prod.xlsm` est copié automatiquement sur le NAS Synology, dans un dossier partagé :
### ⚙️ Configuration
* **Synology Drive Server** est activé sur le NAS.
* **Synology Drive Client** est installé sur le poste de travail.
* Dossier synchronisé : `Partage_Ratio`
* Mode de synchronisation recommandé : `Téléchargement uniquement`.
---
## 🔌 Copie automatique vers clé USB (via NAS)
### Prérequis
* Application **USB Copy** installée et activée sur le NAS.
### Fonctionnement
1. Brancher une clé USB sur le port en façade du NAS.
2. Le NAS copie automatiquement `Ratio_prod.xlsm` sur la clé USB si une version plus récente est disponible.
3. Le fichier est copié dans le dossier racine de la clé, ou dans un dossier `Ratio/`.
### Avantages
* Pas besoin dordinateur pour copier à la main.
* Copie toujours à jour dès que la clé est branchée.
---
## 🛠️ Installation manuelle depuis une clé USB
Contenu du dossier USB :
```
INSTALL_RATIO/
├── Ratio_prod.xlsm
└── Installer_Prod.bat
```bat
Maj_prod_Restauration.bat RESTAURATION
```
### Étapes :
Le script effectue :
1. Brancher la clé USB sur le poste utilisateur.
2. Lancer `Installer_Prod.bat` **en tant quadministrateur**.
3. Le fichier sera copié dans :
```
C:\Program Files\Ratio\Ratio.xlsm
```
et protégé en lecture seule.
1. sauvegarde de lancienne version de production ;
2. copie de `Excel/dev/Ratio_Restauration_dev.xlsm` vers `Excel/prod/Ratio_Restauration.xlsm` ;
3. incrément de `Excel/dev/Ratio_Restauration_VERSION.txt` ;
4. écriture de la version dans le classeur de production ;
5. nettoyage des anciennes sauvegardes.
---
## ♻️ Restaurer la version de production dans le projet (dev)
## Fichier de démonstration
Si la version de travail (`dev`) a été corrompue ou modifiée par erreur :
Le fichier :
```text
Excel/prod/Démo_Ratio_Cuisine.xlsm
```
est destiné à présenter le fonctionnement sans installation réseau obligatoire.
Il peut contenir des données locales dans des feuilles de type :
```text
DATA_Articles
DATA_Fournisseurs
DATA_Factures
DATA_Ca
DATA_Inventaires
```
La version démo peut fonctionner sans connexion MySQL, sans ODBC et sans fichier `.txt` distribué.
Recommandations pour la version démo :
- données locales uniquement ;
- pas didentifiants MySQL ;
- pas de requêtes Power Query actives ;
- pas de fichier de version `.txt` livré ;
- limitation volontaire des ajouts pour éviter un usage réel non maîtrisé.
---
## Connexions MySQL et ODBC
Les classeurs de production connectés peuvent utiliser MySQL via ODBC.
La version recommandée du pilote est :
```text
MySQL ODBC 8.3 Unicode Driver
```
Sur les postes clients connectés, le pilote doit être installé avant utilisation.
La version démo locale, elle, ne doit pas dépendre du pilote ODBC.
---
## Installation du pilote MySQL ODBC 8.3
Télécharger le pilote officiel :
```text
mysql-connector-odbc-8.3.0-winx64.msi
```
Puis le placer dans :
```text
C:\Installers\
```
Exemple de script dinstallation silencieuse :
```bat
@echo off
echo ===============================
echo Installation MySQL ODBC 8.3.0
echo ===============================
set MYPATH=C:\Installers
set INSTALLER=%MYPATH%\mysql-connector-odbc-8.3.0-winx64.msi
if exist "%INSTALLER%" (
echo Démarrage de l'installation silencieuse...
msiexec /i "%INSTALLER%" /qn
echo Installation terminée.
) else (
echo Fichier MSI non trouvé :
echo %INSTALLER%
)
```
À lancer en administrateur.
---
## Bonnes pratiques Git/Gitea
À versionner :
```text
Excel/dev/Ratio_Cuisine_dev.xlsm
Excel/dev/Ratio_Restauration_dev.xlsm
Excel/dev/*_VERSION.txt
Scripts/*.bat
Scripts/*.py
Scripts/*.vbs
README.md
```
À ignorer ou éviter de versionner :
```text
Excel/backup/
~$*.xlsm
*.tmp
*.bak
```
Selon la stratégie choisie, les fichiers de `Excel/prod` peuvent être versionnés ou non. Dans ce projet, ils servent de fichiers livrables générés par les scripts.
---
## Exemple de `.gitignore`
```gitignore
# Fichiers temporaires Excel
~$*.xlsm
~$*.xlsx
*.tmp
*.bak
# Sauvegardes générées
Excel/backup/
# Cache Python
__pycache__/
*.pyc
# Environnements virtuels
.venv/
venv/
```
---
## Checklist avant mise en production
Avant de lancer un script de mise en production :
1. fermer le classeur Excel concerné ;
2. vérifier quaucun fichier `~$Ratio_*.xlsm` nest présent ;
3. sauvegarder les modifications dans le fichier `dev` ;
4. lancer le script `.bat` correspondant ;
5. vérifier que la version est bien écrite dans le classeur `prod` ;
6. faire un commit Git/Gitea.
---
## Commandes utiles
Vérifier létat Git :
```bash
cp Excel/prod/Ratio_Cuisine.xlsm Excel/dev/Ratio_Cuisine_dev.xlsm
git status
```
Ou sous Windows :
Ajouter les modifications :
```powershell
Copy-Item -Path "Excel\prod\Ratio_prod.xlsm" -Destination "Excel\dev\Ratio_dev.xlsm" -Force
```bash
git add README_old.md Scripts/ Excel/dev/
```
Créer un commit :
```bash
git commit -m "Normalise versioning and prod deployment scripts"
```
Envoyer vers Gitea :
```bash
git push
```
---
## 🧾 Notes complémentaires
## Dépannage
* Le fichier `Ratio_prod.xlsm` nest **pas suivi par Git**, car exclu via `.gitignore`.
* Il est **protégé en lecture seule** sur le poste utilisateur.
* Une sauvegarde automatique est possible via **Hyper Backup** ou les **snapshots** du NAS.
### Erreur : fichier utilisé par un autre processus
Cause probable : le classeur est encore ouvert dans Excel ou un fichier temporaire existe.
Solution :
```bat
taskkill /F /IM excel.exe
```
Puis vérifier que le fichier temporaire a disparu :
```text
~$Ratio_Cuisine.xlsm
~$Ratio_Restauration.xlsm
```
---
# 📋 Checklist Release DEV → PROD
### Erreur dans `set_cell_silent.vbs` au moment de fermer Excel
Pour garantir que DEV reste ouvert et que PROD soit protégé :
Cause probable : Excel est resté en arrière-plan.
1. **Travailler dans DEV** : `Excel/dev/Ratio_dev.xlsm` (projet VBA non verrouillé).
2. **Lancer le script batch** (`build_prod.bat`).
* Copie DEV → PROD
* Application des protections (feuilles, structure, horodatage)
* Vérification/verrouillage du projet VBA PROD (manuel si nécessaire)
3. **Vérifier PROD** :
* Feuilles protégées
* Structure du classeur protégée
* Projet VBA verrouillé (mot de passe, déjà posé une fois)
4. **Distribuer PROD** : via NAS, USB ou dossier client.
👉 DEV reste toujours libre, PROD reste verrouillé et sûr.
Solution : utiliser la version robuste de `set_cell_silent.vbs`, qui ferme explicitement le classeur et lapplication Excel après sauvegarde.
---

206
README_old.md Normal file
View File

@@ -0,0 +1,206 @@
# Inventaire-Gestion
Ce projet permet de gérer les inventaires et les ratios de plusieurs sites à partir dun fichier Excel central et dune base MySQL.
## Fonctionnalités
* Mise à jour du pilote ODBC sur machine client
* Authentification par site
* Lecture automatique du fichier `ratio.xlsm`
* Insertion des données dans la base correspondante
* Gestion des articles et inventaire par code barres
* Affichage dans Streamlit (à venir)
# 🚀 Installation du pilote MySQL ODBC 8.3
## ✅ Objectif
Assurer une compatibilité totale entre les fichiers Excel connectés à MySQL et le pilote ODBC, en uniformisant tous les postes avec la **version 8.3.0 du connecteur MySQL ODBC**.
---
## 📥 Étapes d'installation
1. Télécharger le fichier `mysql-connector-odbc-8.3.0-winx64.msi` depuis le site officiel :
👉 [https://dev.mysql.com/downloads/connector/odbc/](https://dev.mysql.com/downloads/connector/odbc/)
2. Copier le fichier dans ce dossier sur chaque poste cible :
```
C:\Installers\
```
3. Créer un fichier `Installer_ODBC_93.bat` contenant :
```bat
@echo off
echo ===============================
echo Installation MySQL ODBC 8.3.0
echo ===============================
SET MYPATH=C:\Installers
SET INSTALLER=%MYPATH%\mysql-connector-odbc-8.3.0-winx64.msi
IF EXIST "%INSTALLER%" (
echo >> Démarrage de l'installation silencieuse...
msiexec /i "%INSTALLER%" /qn
echo >> Installation terminée avec succès.
pause
) ELSE (
echo >> Fichier MSI non trouvé :
echo >> %INSTALLER%
pause
)
```
4. Lancer le script :
* clic droit sur `Installer_ODBC_83.bat`
* puis **"Exécuter en tant quadministrateur"**
---
## 🔁 (Optionnel) Désinstallation d'une version précédente
Pour supprimer proprement une version antérieure (ex : 8.2), vous pouvez ajouter :
```bat
msiexec /x {GUID-DE-LA-VERSION-8.2} /qn
```
*(à compléter avec l'identifiant de produit si nécessaire)*
---
## 🧩 Conseils
* Intégrez ces fichiers dans votre dépôt (ex : dossier `Installers/`)
* Versionnez votre script dans Git (Gitea) pour faciliter le déploiement sur tous les sites
* Utilisez RustDesk ou accès direct pour l'installation sur les PC distants
# 🔧 Gestion et distribution du fichier Excel `Ratio_prod.xlsm`
Ce document décrit le fonctionnement mis en place pour garantir une version stable et toujours à jour du fichier Excel `Ratio_prod.xlsm`, utilisé dans le cadre du projet **Ratio & Inventaires**.
---
## 🗃️ Organisation des fichiers
### Structure dans le projet (Git)
/Excel/
├── dev/
│ └── Ratio\_dev.xlsm ← Fichier de travail
├── prod/
│ └── Ratio\_prod.xlsm ← Fichier de production (non suivi par Git)
* `Ratio_dev.xlsm` : version de développement modifiable, suivie par Git.
* `Ratio_prod.xlsm` : version validée, protégée (ajoutée au `.gitignore` pour éviter tout push accidentel).
---
## 🖥️ Synchronisation automatique avec le NAS Synology
Le fichier `Ratio_prod.xlsm` est copié automatiquement sur le NAS Synology, dans un dossier partagé :
### ⚙️ Configuration
* **Synology Drive Server** est activé sur le NAS.
* **Synology Drive Client** est installé sur le poste de travail.
* Dossier synchronisé : `Partage_Ratio`
* Mode de synchronisation recommandé : `Téléchargement uniquement`.
---
## 🔌 Copie automatique vers clé USB (via NAS)
### Prérequis
* Application **USB Copy** installée et activée sur le NAS.
### Fonctionnement
1. Brancher une clé USB sur le port en façade du NAS.
2. Le NAS copie automatiquement `Ratio_prod.xlsm` sur la clé USB si une version plus récente est disponible.
3. Le fichier est copié dans le dossier racine de la clé, ou dans un dossier `Ratio/`.
### Avantages
* Pas besoin dordinateur pour copier à la main.
* Copie toujours à jour dès que la clé est branchée.
---
## 🛠️ Installation manuelle depuis une clé USB
Contenu du dossier USB :
```
INSTALL_RATIO/
├── Ratio_prod.xlsm
└── Installer_Prod.bat
```
### Étapes :
1. Brancher la clé USB sur le poste utilisateur.
2. Lancer `Installer_Prod.bat` **en tant quadministrateur**.
3. Le fichier sera copié dans :
```
C:\Program Files\Ratio\Ratio.xlsm
```
et protégé en lecture seule.
---
## ♻️ Restaurer la version de production dans le projet (dev)
Si la version de travail (`dev`) a été corrompue ou modifiée par erreur :
```bash
cp Excel/prod/Ratio_Cuisine.xlsm Excel/dev/Ratio_Cuisine_dev_old.xlsm
```
Ou sous Windows :
```powershell
Copy-Item -Path "Excel\prod\Ratio_prod.xlsm" -Destination "Excel\dev\Ratio_dev.xlsm" -Force
```
---
## 🧾 Notes complémentaires
* Le fichier `Ratio_prod.xlsm` nest **pas suivi par Git**, car exclu via `.gitignore`.
* Il est **protégé en lecture seule** sur le poste utilisateur.
* Une sauvegarde automatique est possible via **Hyper Backup** ou les **snapshots** du NAS.
---
# 📋 Checklist Release DEV → PROD
Pour garantir que DEV reste ouvert et que PROD soit protégé :
1. **Travailler dans DEV** : `Excel/dev/Ratio_dev.xlsm` (projet VBA non verrouillé).
2. **Lancer le script batch** (`build_prod.bat`).
* Copie DEV → PROD
* Application des protections (feuilles, structure, horodatage)
* Vérification/verrouillage du projet VBA PROD (manuel si nécessaire)
3. **Vérifier PROD** :
* Feuilles protégées
* Structure du classeur protégée
* Projet VBA verrouillé (mot de passe, déjà posé une fois)
4. **Distribuer PROD** : via NAS, USB ou dossier client.
👉 DEV reste toujours libre, PROD reste verrouillé et sûr.
---
## Auteur
Michel

View File

@@ -1,77 +1,115 @@
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM --- Se place dans le dossier du .bat ---
cd /d "%~dp0"
REM Chemin du fichier de version pour la CUISINE
set "VERSION_FILE=..\Excel\prod\Ratio_Cuisine_VERSION.txt"
echo --- Mise en prod Ratio_Cuisine ---
set "ROOT=%~dp0.."
set "VERSION_FILE=%ROOT%\Excel\dev\Ratio_Cuisine_VERSION.txt"
set "SRC=%ROOT%\Excel\dev\Ratio_Cuisine_dev.xlsm"
set "DST_DIR=%ROOT%\Excel\prod"
set "DST=%DST_DIR%\Ratio_Cuisine.xlsm"
set "BACKUP_DIR=%ROOT%\Excel\backup"
set KEEP_BACKUPS=10
echo.
echo ROOT = %ROOT%
echo SRC = %SRC%
echo DST = %DST%
echo BACKUP_DIR = %BACKUP_DIR%
echo VERSION_FILE= %VERSION_FILE%
echo.
REM On lit l'ANCIENNE version avant de la mettre à jour (pour nommer la sauvegarde)
set "OLD_VERSION="
if exist "%VERSION_FILE%" (
set /p OLD_VERSION=<"%VERSION_FILE%"
)
REM Nombre de sauvegardes Cuisine à conserver
set KEEP_BACKUPS=10
echo Mise à jour de version...
python "maj_version.py" "%VERSION_FILE%"
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
pause
exit /b 1
)
REM === 2) CHEMINS DES FICHIERS EXCEL ===
set SRC=..\Excel\dev\Ratio_Cuisine_dev.xlsm
set DST_DIR=..\Excel\prod
REM Dossier commun de sauvegardes (Cuisine + Restauration)
set BACKUP_DIR=..\Excel\backup
REM Vérifications
if not exist "%SRC%" (
echo ERREUR : fichier source introuvable :
echo %SRC%
pause
exit /b 1
)
if not exist "%DST_DIR%" (
echo ERREUR : dossier de destination introuvable :
echo %DST_DIR%
pause
exit /b 1
)
REM Création auto du dossier de sauvegarde s'il n'existe pas
if not exist "%BACKUP_DIR%" (
echo Creation du dossier backup :
echo %BACKUP_DIR%
mkdir "%BACKUP_DIR%"
)
REM === 3) NOM DU FICHIER DE SAUVEGARDE AVEC ANCIENNE VERSION ===
if "%OLD_VERSION%"=="" (
REM Sécurité : si on n'a pas réussi à lire la version, on met un nom générique
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_Vers%OLD_VERSION%.xlsm"
if exist "%DST_DIR%\~$Ratio_Cuisine.xlsm" (
echo ERREUR : Ratio_Cuisine.xlsm est ouvert dans Excel.
echo Ferme le classeur de production avant de relancer la mise en prod.
exit /b 1
)
REM === 4) COPIE VERS PROD ===
if exist "%DST%" (
if "%OLD_VERSION%"=="" (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Cuisine_Vers%OLD_VERSION%.xlsm"
)
echo Sauvegarde de l'ancienne production...
echo De : %DST%
echo Vers : !BACKUP!
copy /Y "%DST%" "!BACKUP!"
if errorlevel 1 (
echo ERREUR : la sauvegarde de l'ancienne production a echoue.
exit /b 1
)
if not exist "!BACKUP!" (
echo ERREUR : le fichier de sauvegarde n'a pas ete cree.
echo Attendu : !BACKUP!
exit /b 1
)
echo Sauvegarde OK : !BACKUP!
) else (
echo Aucun ancien fichier de production trouve, pas de sauvegarde a faire.
)
echo.
echo Copie vers la version de production...
copy /Y "%SRC%" "%DST_DIR%\Ratio_Cuisine.xlsm"
copy /Y "%SRC%" "%DST%"
REM === 5) SAUVEGARDE ===
echo Création de la sauvegarde datée...
copy /Y "%SRC%" "%BACKUP%"
if errorlevel 1 (
echo ERREUR lors de la copie vers production.
exit /b 1
)
echo Terminé.
exit /b 0
if not exist "%DST%" (
echo ERREUR : le fichier de production n'a pas ete cree.
exit /b 1
)
REM === 6) NETTOYAGE : on ne garde que les %KEEP_BACKUPS% dernières sauvegardes Cuisine ===
REM Tri par date décroissante (les plus récentes d'abord). On supprime au-delà de KEEP_BACKUPS.
echo.
echo Mise a jour de version...
python "%~dp0maj_version.py" "%VERSION_FILE%" "%DST%"
if errorlevel 1 (
echo ERREUR lors de la mise a jour de version.
exit /b 1
)
echo.
echo Nettoyage des anciennes sauvegardes Cuisine...
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_Cuisine_Vers*.xlsm" 2^>nul') do (
echo Suppression ancienne sauvegarde : %%F
del /q "%BACKUP_DIR%\%%F"
)
)
echo.
echo --- Mise en prod terminee ---
exit /b 0

View File

@@ -1,80 +1,114 @@
@echo off
setlocal ENABLEDELAYEDEXPANSION
REM --- Se place dans le dossier du .bat ---
cd /d "%~dp0"
echo --- Mise en prod Ratio_Restauration ---
REM Chemin du fichier de version pour la RESTAURATION
set "VERSION_FILE=..\Excel\prod\Ratio_Restauration_VERSION.txt"
set "ROOT=%~dp0.."
set "VERSION_FILE=%ROOT%\Excel\dev\Ratio_Restauration_VERSION.txt"
set "SRC=%ROOT%\Excel\dev\Ratio_Restauration_dev.xlsm"
set "DST_DIR=%ROOT%\Excel\prod"
set "DST=%DST_DIR%\Ratio_Restauration.xlsm"
set "BACKUP_DIR=%ROOT%\Excel\backup"
set KEEP_BACKUPS=10
echo.
echo ROOT = %ROOT%
echo SRC = %SRC%
echo DST = %DST%
echo BACKUP_DIR = %BACKUP_DIR%
echo VERSION_FILE= %VERSION_FILE%
echo.
REM On lit l'ANCIENNE version pour la sauvegarde
set "OLD_VERSION="
if exist "%VERSION_FILE%" (
set /p OLD_VERSION=<"%VERSION_FILE%"
)
REM Nombre de sauvegardes Cuisine à conserver
set KEEP_BACKUPS=10
echo Mise à jour de version...
python "maj_version.py" "%VERSION_FILE%"
if errorlevel 1 (
echo ERREUR lors de la mise à jour de version.
pause
exit /b 1
)
REM === 2) CHEMINS DES FICHIERS EXCEL ===
set SRC=..\Excel\dev\Ratio_Restauration_dev.xlsm
set DST_DIR=..\Excel\prod
REM Dossier commun de sauvegardes (Cuisine + Restauration)
set BACKUP_DIR=..\Excel\backup
if not exist "%BACKUP_DIR%" (
mkdir "%BACKUP_DIR%"
)
REM Vérifications
if not exist "%SRC%" (
echo ERREUR : fichier source introuvable :
echo %SRC%
endlocal
exit /b 1
)
if not exist "%DST_DIR%" (
echo ERREUR : dossier de destination introuvable :
echo %DST_DIR%
endlocal
exit /b 1
)
REM === NOM DU FICHIER DE SAUVEGARDE AVEC ANCIENNE VERSION ===
if "%OLD_VERSION%"=="" (
REM Sécurité si la lecture a échoué
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_Vers%OLD_VERSION%.xlsm"
if not exist "%BACKUP_DIR%" (
echo Creation du dossier backup :
echo %BACKUP_DIR%
mkdir "%BACKUP_DIR%"
)
REM === 4) COPIE VERS PROD ===
if exist "%DST_DIR%\~$Ratio_Restauration.xlsm" (
echo ERREUR : Ratio_Restauration.xlsm est ouvert dans Excel.
exit /b 1
)
if exist "%DST%" (
if "%OLD_VERSION%"=="" (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_sansVersion.xlsm"
) else (
set "BACKUP=%BACKUP_DIR%\Ratio_Restauration_Vers%OLD_VERSION%.xlsm"
)
echo Sauvegarde de l'ancienne production...
echo De : %DST%
echo Vers : !BACKUP!
copy /Y "%DST%" "!BACKUP!"
if errorlevel 1 (
echo ERREUR : la sauvegarde de l'ancienne production a echoue.
exit /b 1
)
if not exist "!BACKUP!" (
echo ERREUR : le fichier de sauvegarde n'a pas ete cree.
echo Attendu : !BACKUP!
exit /b 1
)
echo Sauvegarde OK : !BACKUP!
) else (
echo Aucun ancien fichier de production trouve, pas de sauvegarde a faire.
)
echo.
echo Copie vers la version de production...
copy /Y "%SRC%" "%DST_DIR%\Ratio_Restauration.xlsm"
copy /Y "%SRC%" "%DST%"
REM === 5) SAUVEGARDE DATÉE ===
echo Création de la sauvegarde datée...
copy /Y "%SRC%" "%BACKUP%"
if errorlevel 1 (
echo ERREUR lors de la copie vers production.
exit /b 1
)
echo --- Mise en prod terminee ---
endlocal
exit /b 0
if not exist "%DST%" (
echo ERREUR : le fichier de production n'a pas ete cree.
exit /b 1
)
REM === 6) NETTOYAGE : on ne garde que les %KEEP_BACKUPS% dernières sauvegardes Restauration ===
REM Tri par date décroissante (les plus récentes d'abord). On supprime au-delà de KEEP_BACKUPS.
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_restauration_Vers*.xlsm" 2^>nul') do (
echo.
echo Mise a jour de version...
python "%~dp0maj_version.py" "%VERSION_FILE%" "%DST%"
if errorlevel 1 (
echo ERREUR lors de la mise a jour de version.
exit /b 1
)
echo.
echo Nettoyage des anciennes sauvegardes Restauration...
for /f "skip=%KEEP_BACKUPS% delims=" %%F in ('dir /b /a-d /o-d "%BACKUP_DIR%\Ratio_Restauration_Vers*.xlsm" 2^>nul') do (
echo Suppression ancienne sauvegarde : %%F
del /q "%BACKUP_DIR%\%%F"
)
)
echo.
echo --- Mise en prod terminee ---
exit /b 0

View File

@@ -1,51 +1,135 @@
import sys
import subprocess
from pathlib import Path
from datetime import date
# =========================================================
# CONFIG
# =========================================================
VBS_SCRIPT = Path(__file__).parent / "set_cell_silent.vbs"
# =========================================================
# PREFIXE VERSION
# =========================================================
def detecter_major(path: Path) -> int:
nom = path.name.lower()
if "restauration" in nom:
return 2
return 1
# =========================================================
# LECTURE VERSION
# =========================================================
def lire_version(path: Path, major: int):
def lire_version(path: Path):
if not path.exists():
return [1, 0, 0]
return [major, 0, 0]
contenu = path.read_text(encoding="utf-8").strip().splitlines()
if not contenu:
return [1, 0, 0]
return [major, 0, 0]
version_str = contenu[0].strip()
try:
parts = [int(x) for x in version_str.split(".")]
while len(parts) < 3:
parts.append(0)
return parts[:3]
except ValueError:
return [1, 0, 0]
version = [int(x) for x in contenu[0].split(".")]
while len(version) < 3:
version.append(0)
version = version[:3]
# force le major correct
version[0] = major
return version
except Exception:
return [major, 0, 0]
def ecrire_version(path: Path, version):
version_str = ".".join(str(x) for x in version)
today = date.today().isoformat()
texte = f"{version_str}\n{today}\n"
path.write_text(texte, encoding="utf-8")
return version_str
# =========================================================
# INCREMENT
# =========================================================
def increment_patch(version):
version[2] += 1
return version
# =========================================================
# ECRITURE TXT
# =========================================================
def ecrire_version_txt(path: Path, version):
version_str = ".".join(str(x) for x in version)
contenu = f"{version_str}\n{date.today().isoformat()}\n"
path.write_text(contenu, encoding="utf-8")
return version_str
# =========================================================
# ECRITURE EXCEL
# =========================================================
def ecrire_version_excel(classeur: Path, version_str: str):
if not classeur.exists():
print(f"Classeur introuvable : {classeur}")
return
valeur = f"Version : {version_str}"
cmd = [
"cscript",
"//nologo",
str(VBS_SCRIPT),
str(classeur),
"Tableau de bord",
"C1",
valeur
]
subprocess.run(cmd, check=True)
# =========================================================
# MAIN
# =========================================================
def main():
if len(sys.argv) < 2:
print("Usage : python maj_version.py chemin_du_VERSION.txt")
if len(sys.argv) < 3:
print("Usage :")
print("python maj_version.py VERSION.txt classeur.xlsm")
sys.exit(1)
version_file = Path(sys.argv[1])
version = lire_version(version_file)
classeur = Path(sys.argv[2])
major = detecter_major(version_file)
version = lire_version(version_file, major)
version = increment_patch(version)
new_version_str = ecrire_version(version_file, version)
print(f"Nouvelle version : {new_version_str}")
version_str = ecrire_version_txt(version_file, version)
ecrire_version_excel(classeur, version_str)
print(f"Nouvelle version : {version_str}")
print(f"Classeur mis à jour : {classeur.name}")
if __name__ == "__main__":
main()
main()

View File

@@ -1,68 +1,71 @@
' set_cell_silent.vbs
' Usage: cscript //nologo set_cell_silent.vbs "C:\chemin\fichier.xlsm" "NomFeuille" "A1" "Valeur"
Option Explicit
Dim f, sheetName, addr, val
Dim xl, wb, ws
Dim xl, wb
Dim filePath, sheetName, cellAddress, cellValue
If WScript.Arguments.Count < 4 Then
WScript.Echo "[ERR] Args: set_cell_silent.vbs <fichier.xlsm> <feuille> <cellule> <valeur>"
WScript.Quit 1
WScript.Echo "[ERR] Usage : set_cell_silent.vbs fichier.xlsm feuille cellule valeur"
WScript.Quit 1
End If
f = WScript.Arguments(0)
filePath = WScript.Arguments(0)
sheetName = WScript.Arguments(1)
addr = WScript.Arguments(2)
val = WScript.Arguments(3)
cellAddress = WScript.Arguments(2)
cellValue = WScript.Arguments(3)
On Error Resume Next
Set xl = CreateObject("Excel.Application")
If Err.Number <> 0 Then
WScript.Echo "[ERR] Excel non disponible (" & Err.Description & ")"
WScript.Quit 1
WScript.Echo "[ERR] Creation Excel : " & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
xl.Visible = False
xl.DisplayAlerts = False
' Désactiver macros et événements AVANT douvrir
On Error Resume Next
xl.AutomationSecurity = 3 ' msoAutomationSecurityForceDisable
xl.EnableEvents = False
xl.ScreenUpdating = False
On Error GoTo 0
xl.AskToUpdateLinks = False
xl.AutomationSecurity = 3
Err.Clear
Set wb = xl.Workbooks.Open(filePath, 0, False)
On Error Resume Next
Set wb = xl.Workbooks.Open(f, False, False)
If Err.Number <> 0 Then
xl.Quit
WScript.Echo "[ERR] Ouverture classeur: " & Err.Description
WScript.Quit 1
WScript.Echo "[ERR] Ouverture classeur: " & Err.Description
xl.Quit
Set xl = Nothing
WScript.Quit 1
End If
On Error GoTo 0
On Error Resume Next
Set ws = wb.Worksheets.Item(sheetName)
Err.Clear
wb.Worksheets(sheetName).Range(cellAddress).Value = cellValue
If Err.Number <> 0 Then
wb.Close False
xl.Quit
WScript.Echo "[ERR] Feuille introuvable: " & sheetName
WScript.Quit 1
WScript.Echo "[ERR] Ecriture cellule: " & Err.Description
wb.Close False
xl.Quit
Set wb = Nothing
Set xl = Nothing
WScript.Quit 1
End If
On Error GoTo 0
On Error Resume Next
ws.Range(addr).Value2 = val
If Err.Number <> 0 Then
wb.Close False
xl.Quit
WScript.Echo "[ERR] Ecriture cellule " & addr & " : " & Err.Description
WScript.Quit 1
End If
On Error GoTo 0
Err.Clear
wb.Save
If Err.Number <> 0 Then
WScript.Echo "[ERR] Sauvegarde: " & Err.Description
wb.Close False
xl.Quit
Set wb = Nothing
Set xl = Nothing
WScript.Quit 1
End If
Err.Clear
wb.Close False
Set wb = Nothing
xl.Quit
WScript.Quit 0
Set xl = Nothing
WScript.Quit 0

View File

@@ -1,92 +0,0 @@
@echo off
chcp 1252 >nul
setlocal EnableExtensions
REM ===================== PARAMS =====================
set "ROOT=C:\Users\miche\PycharmProjects\Ratio_Inventaires"
set "DEV_XLSM=%ROOT%\Excel\dev\Ratio_dev.xlsm"
set "PROD_DIR=%ROOT%\Excel\prod"
set "PROD_XLSM=%PROD_DIR%\Ratio_prod.xlsm"
set "VERSION_TXT=%ROOT%\Excel\dev\VERSION.txt"
set "SHEET_NAME=Tableau de bord"
set "CELL_ADDR=U1"
echo.
echo === [1/4] Prep ===============================================
if not exist "%PROD_DIR%" md "%PROD_DIR%"
if not exist "%DEV_XLSM%" goto ERR_NO_DEV
if not exist "%VERSION_TXT%" (
>"%VERSION_TXT%" echo 1.0.0
echo [INFO] VERSION.txt created with 1.0.0
)
for /f %%i in ('powershell -NoProfile -Command "(Get-Date).ToString('yyyy_MM_dd')"') do set "DATESTAMP=%%i"
set "ARCHIVE_FILE=%PROD_DIR%\Ratio_prod_%DATESTAMP%.xlsm"
echo.
echo === [2/4] Lire VERSION.txt et maj cellule =====================
for /f "usebackq delims=" %%v in ("%VERSION_TXT%") do set "NEW_VER=%%v"
set "NEW_VER=%NEW_VER: =%"
if "%NEW_VER%"=="" goto ERR_EMPTY_VER
echo Version: %NEW_VER%
REM Mise a jour de P1 dans DEV via VBS (macros & evenements OFF)
cscript //nologo "%ROOT%\Scripts\set_cell_silent.vbs" "%DEV_XLSM%" "%SHEET_NAME%" "%CELL_ADDR%" "%NEW_VER%"
if errorlevel 1 goto U1_FAIL
echo [OK] U1 updated on DEV: %NEW_VER%
goto AFTER_U1
:U1_FAIL
echo [WARN] U1 update failed on DEV (continuing).
:AFTER_U1
echo.
echo === [3/4] Backup PROD et purge archives ======================
if not exist "%PROD_XLSM%" goto NO_BACKUP
echo Backup -> "%ARCHIVE_FILE%"
copy /Y "%PROD_XLSM%" "%ARCHIVE_FILE%" >nul
goto AFTER_BACKUP
:NO_BACKUP
echo Pas de PROD a sauvegarder.
:AFTER_BACKUP
REM Garder uniquement les 5 dernieres archives
powershell -NoProfile -Command "Get-ChildItem -Path '%PROD_DIR%' -Filter 'Ratio_prod_20*_??_??.xlsm' | Sort-Object LastWriteTime -Descending | Select-Object -Skip 5 | Remove-Item -Force -ErrorAction SilentlyContinue"
echo.
echo === [4/4] Copier DEV -> PROD =================================
copy /Y "%DEV_XLSM%" "%PROD_XLSM%"
if errorlevel 1 goto ERR_COPY
>"%PROD_DIR%\VERSION.txt" echo %NEW_VER%
echo.
echo [OK] Termine :
echo Version : %NEW_VER%
echo PROD : "%PROD_XLSM%"
echo VERSION : "%PROD_DIR%\VERSION.txt"
echo.
endlocal & exit /b 0
REM ===================== ERRORS =====================
:ERR_NO_DEV
echo [ERROR] DEV file not found: "%DEV_XLSM%"
endlocal & exit /b 1
:ERR_EMPTY_VER
echo [ERROR] VERSION.txt is empty. Put a version like 1.8.3 and rerun.
endlocal & exit /b 1
:ERR_COPY
echo [ERROR] Copy DEV -> PROD failed.
endlocal & exit /b 1

Binary file not shown.

Binary file not shown.

Binary file not shown.