432 lines
8.4 KiB
Markdown
432 lines
8.4 KiB
Markdown
# Ratio Inventaires
|
||
|
||
Projet Excel/VBA permettant de gérer les inventaires, les articles, les fournisseurs, les factures, le chiffre d’affaires et les ratios de consommation pour plusieurs activités.
|
||
|
||
Le projet est organisé pour travailler proprement avec PyCharm, Git/Gitea et des scripts de mise en production automatisés.
|
||
|
||
---
|
||
|
||
## Objectif du projet
|
||
|
||
Le projet permet de maintenir plusieurs classeurs Excel métier :
|
||
|
||
- `Ratio_Cuisine.xlsm`
|
||
- `Ratio_Restauration.xlsm`
|
||
- `Démo_Ratio_Cuisine.xlsm`
|
||
|
||
Les fichiers de développement sont conservés dans `Excel/dev`, puis copiés vers `Excel/prod` par des scripts de mise en production.
|
||
|
||
Le numéro de version est géré automatiquement par fichier `.txt` interne, puis écrit directement dans le classeur Excel livré.
|
||
|
||
---
|
||
|
||
## Organisation des dossiers
|
||
|
||
```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 d’automatisation :
|
||
|
||
```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
|
||
Maj_prod_Cuisine.bat CUISINE
|
||
```
|
||
|
||
Le script effectue :
|
||
|
||
1. sauvegarde de l’ancienne 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.
|
||
|
||
---
|
||
|
||
## Mise en production Restauration
|
||
|
||
Depuis le dossier `Scripts`, lancer :
|
||
|
||
```bat
|
||
Maj_prod_Restauration.bat RESTAURATION
|
||
```
|
||
|
||
Le script effectue :
|
||
|
||
1. sauvegarde de l’ancienne 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.
|
||
|
||
---
|
||
|
||
## Fichier de démonstration
|
||
|
||
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 d’identifiants 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 d’installation 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 qu’aucun fichier `~$Ratio_*.xlsm` n’est 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
|
||
git status
|
||
```
|
||
|
||
Ajouter les modifications :
|
||
|
||
```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
|
||
```
|
||
|
||
---
|
||
|
||
## Dépannage
|
||
|
||
### 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
|
||
```
|
||
|
||
---
|
||
|
||
### Erreur dans `set_cell_silent.vbs` au moment de fermer Excel
|
||
|
||
Cause probable : Excel est resté en arrière-plan.
|
||
|
||
Solution : utiliser la version robuste de `set_cell_silent.vbs`, qui ferme explicitement le classeur et l’application Excel après sauvegarde.
|
||
|
||
---
|
||
|
||
## Auteur
|
||
|
||
Michel
|