# 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
