commit 3a2fb2187eb8de737301a58dd67287802051d0a7 Author: StillHammer Date: Tue Dec 30 11:08:00 2025 +0700 Initial commit - Freelance Dashboard Dashboard KPI Excel pour suivi d'activite freelance Fichiers inclus: - Documentation (README, PLAN, DATA_MODEL, FORMULAS) - Template Excel avec tables de donnees - Plan d'implementation pour agent - Configuration MCP VBA Server πŸ€– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..25dadf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +# Excel temp files +~$* +*.tmp + +# Excel lock files +*.xlk + +# Windows reserved names +nul +con +prn +aux + +# Windows system files +Thumbs.db +Desktop.ini + +# Backups +.vba_backups/ +*.bak + +# Claude Code +.claude/ + +# MCP config (contains no secrets but local) +# .mcp.json diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..f02f6ac --- /dev/null +++ b/.mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "vba-mcp-pro": { + "command": "python", + "args": ["-m", "vba_mcp_pro.server"], + "cwd": "C:\\Users\\alexi\\Documents\\projects\\vba-mcp-monorepo", + "env": { + "PYTHONPATH": "C:\\Users\\alexi\\Documents\\projects\\vba-mcp-monorepo\\packages\\core\\src;C:\\Users\\alexi\\Documents\\projects\\vba-mcp-monorepo\\packages\\lite\\src;C:\\Users\\alexi\\Documents\\projects\\vba-mcp-monorepo\\packages\\pro\\src" + } + } + } +} diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..db489bb --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,263 @@ +# Freelance Dashboard - Instructions pour Claude + +## Projet + +Freelance Dashboard - Dashboard KPI Excel pour suivi d'activite freelance. + +## Status: En attente de developpement + +## MCP VBA Server + +Ce projet utilise **VBA MCP Server v0.6.0+** pour l'automatisation. + +### Outils Disponibles pour Excel + +| Outil | Description | Usage | +|-------|-------------|-------| +| `get_worksheet_data` | Lit donnees d'une feuille | Lecture donnees | +| `set_worksheet_data` | Ecrit donnees/formules | Peupler tables, KPIs | +| `list_excel_tables` | Liste les Excel Tables | Verifier structure | +| `create_excel_table` | Cree table structuree | Tables donnees | +| `insert_rows` | Insere lignes | Ajouter entrees | +| `delete_rows` | Supprime lignes | Nettoyer donnees | +| `insert_columns` | Insere colonnes | Modifier structure | +| `delete_columns` | Supprime colonnes | Modifier structure | +| `inject_vba` | Injecte module VBA | Macro refresh | +| `validate_vba` | Valide syntaxe VBA | Verifier code | +| `run_macro` | Execute macro VBA | Lancer refresh | +| `open_in_office` | Ouvre Excel visible | Voir resultat | +| `create_backup` | Cree backup fichier | Avant modifications | + +### Chemin du fichier + +``` +C:\Users\alexi\Documents\projects\freelance-dashboard\templates\FreelanceDashboard.xlsx +``` + +--- + +## Structure du Projet + +``` +freelance-dashboard/ +β”œβ”€β”€ README.md # Documentation principale +β”œβ”€β”€ PLAN.md # Plan projet (7 phases, 9h) +β”œβ”€β”€ DATA_MODEL.md # Schema des 3 tables +β”œβ”€β”€ FORMULAS.md # Toutes les formules Excel +β”œβ”€β”€ CLAUDE.md # CE FICHIER +β”œβ”€β”€ docs/ +β”‚ └── MCP_VBA_GUIDE.md # Guide utilisation MCP +β”œβ”€β”€ templates/ +β”‚ └── FreelanceDashboard.xlsx +└── scripts/ +``` + +--- + +## Workflow de Developpement + +### Phase 1: Structure Fichier (MCP VBA) + +```python +# Creer les donnees clients +data_clients = [ + ["ClientID", "Nom", "Secteur", "DateDebut"], + ["CLI001", "Acme Corporation", "Tech", "15/01/2024"], + ["CLI002", "Tech Solutions", "Tech", "01/03/2024"], + ["CLI003", "Marketing Pro", "Marketing", "10/06/2024"], + ["CLI004", "E-Shop Plus", "E-commerce", "22/09/2024"], + ["CLI005", "Finance Group", "Finance", "05/11/2024"], +] +set_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Clients", data_clients) + +# Creer la table structuree +create_excel_table("templates/FreelanceDashboard.xlsx", "Data_Clients", "A1:D6", "tbl_Clients", has_headers=True) +``` + +```python +# Creer les donnees temps +data_temps = [ + ["Date", "ClientID", "Projet", "Heures", "Description"], + ["02/01/2025", "CLI001", "Site Web", 3.5, "Maquettes"], + ["02/01/2025", "CLI002", "API Backend", 6.0, "Endpoints"], + ["03/01/2025", "CLI001", "Site Web", 4.0, "Integration"], + ["03/01/2025", "CLI003", "Campagne SEO", 2.5, "Audit"], + ["06/01/2025", "CLI002", "API Backend", 7.0, "Tests"], + # ... plus de donnees +] +set_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Temps", data_temps) +create_excel_table("templates/FreelanceDashboard.xlsx", "Data_Temps", "A1:E11", "tbl_Temps", has_headers=True) +``` + +```python +# Creer les donnees revenus +data_revenus = [ + ["Date", "ClientID", "Montant", "Type"], + ["15/01/2025", "CLI001", 2500, "Facture"], + ["20/01/2025", "CLI002", 4200, "Facture"], + ["25/01/2025", "CLI003", 1800, "Facture"], + # ... plus de donnees +] +set_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Revenus", data_revenus) +create_excel_table("templates/FreelanceDashboard.xlsx", "Data_Revenus", "A1:D8", "tbl_Revenus", has_headers=True) +``` + +### Phase 2: Formules KPIs (MCP VBA) + +```python +# Ecrire les KPIs sur l'onglet Dashboard +kpis = [ + ["CA Total", "=SUM(tbl_Revenus[Montant])"], + ["Heures Totales", "=SUM(tbl_Temps[Heures])"], + ["Taux Horaire Moyen", "=B1/B2"], + ["Nb Clients", "=COUNTA(tbl_Clients[ClientID])"], + ["Heures Semaine", "=SUMIFS(tbl_Temps[Heures],tbl_Temps[Date],\">=\"&TODAY()-WEEKDAY(TODAY(),2)+1)"], +] +set_worksheet_data("templates/FreelanceDashboard.xlsx", "Dashboard", kpis, start_cell="A1") +``` + +### Phase 3-5: TCD, Graphiques, Design (Excel UI) + +Ces elements doivent etre crees dans Excel UI: +- Tableaux Croises Dynamiques +- Graphiques (barres, camembert, combo) +- Slicers +- Mise en forme conditionnelle +- Layout final + +### Phase 6: VBA Refresh (MCP VBA - Optionnel) + +```python +code = ''' +Sub RefreshDashboard() + Application.CalculateFull + Dim ws As Worksheet + For Each ws In ThisWorkbook.Worksheets + Dim pt As PivotTable + For Each pt In ws.PivotTables + pt.RefreshTable + Next pt + Next ws + MsgBox "Dashboard actualise!", vbInformation +End Sub +''' +validate_vba(code, file_type="excel") +inject_vba("templates/FreelanceDashboard.xlsm", "mod_Refresh", code) +``` + +--- + +## Commandes Rapides + +### Lire donnees + +```python +get_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Clients") +get_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Temps") +``` + +### Ajouter entree temps + +```python +# Ajouter une ligne +insert_rows("templates/FreelanceDashboard.xlsx", "Data_Temps", position=12, count=1) +set_worksheet_data("templates/FreelanceDashboard.xlsx", "Data_Temps", + [["10/01/2025", "CLI001", "Nouveau Projet", 2.5, "Description"]], + start_cell="A12") +``` + +### Lister les tables + +```python +list_excel_tables("templates/FreelanceDashboard.xlsx") +``` + +### Ouvrir pour voir + +```python +open_in_office("templates/FreelanceDashboard.xlsx") +``` + +### Executer macro + +```python +run_macro("templates/FreelanceDashboard.xlsm", "RefreshDashboard") +``` + +--- + +## Limitations MCP VBA + +| Ce qui marche | Ce qui ne marche pas | +|---------------|---------------------| +| Ecrire donnees | Creer TCD | +| Creer Excel Tables | Creer graphiques | +| Ecrire formules | Design visuel | +| Injecter VBA | Creer slicers | +| Executer macros | Mise en forme conditionnelle | + +--- + +## Lien avec TimeTrack Pro + +``` +TimeTrack Pro (Access) Freelance Dashboard (Excel) + β”‚ β”‚ + β”‚ get_worksheet_data β”‚ + └──────────────────────────►│ + Export donnees +``` + +### Export manuel + +1. Lire donnees Access: `get_worksheet_data("TimeTrackPro.accdb", "tbl_Temps")` +2. Ecrire dans Excel: `set_worksheet_data("FreelanceDashboard.xlsx", "Data_Temps", data)` + +### Macro d'import (V2) + +```vba +Sub ImportFromTimeTrack() + ' Connexion ADODB vers TimeTrackPro.accdb + ' Import automatique des donnees +End Sub +``` + +--- + +## Fichiers Cles + +| Fichier | Quand l'utiliser | +|---------|------------------| +| `DATA_MODEL.md` | Schema tables + donnees demo | +| `FORMULAS.md` | Toutes les formules KPIs | +| `PLAN.md` | Layout, couleurs, phases | +| `docs/MCP_VBA_GUIDE.md` | Guide etape par etape | + +--- + +## Design + +### Palette Couleurs + +| Usage | Hex | +|-------|-----| +| Primaire (bleu fonce) | #2C3E50 | +| Accent (vert) | #27AE60 | +| Neutre (gris) | #ECF0F1 | +| Alerte (rouge) | #E74C3C | + +### KPIs a afficher + +- CA Total +- CA Mois en cours +- Heures totales +- Taux horaire moyen +- Nb clients actifs +- Top client +- Heures semaine + +--- + +## Contact + +Alexis Trouve - alexistrouve.pro@gmail.com diff --git a/DATA_MODEL.md b/DATA_MODEL.md new file mode 100644 index 0000000..58b0744 --- /dev/null +++ b/DATA_MODEL.md @@ -0,0 +1,203 @@ +# Freelance Dashboard - Modele de Donnees + +## Vue d'ensemble + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Data_Clients β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ ClientID (PK) │◄──────┐ +β”‚ Nom β”‚ β”‚ +β”‚ Secteur β”‚ β”‚ +β”‚ DateDebut β”‚ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ Data_Temps β”‚ β”‚ β”‚ Data_Revenus β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ Date β”‚ β”‚ β”‚ Date β”‚ +β”‚ ClientID (FK) │───────┼───────│ ClientID (FK) β”‚ +β”‚ Projet β”‚ β”‚ β”‚ Montant β”‚ +β”‚ Heures β”‚ β”‚ β”‚ Type β”‚ +β”‚ Description β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ + β”‚ + Relations +``` + +--- + +## Table: Data_Clients + +Liste des clients avec informations de base. + +| Colonne | Type | Format | Exemple | Validation | +|---------|------|--------|---------|------------| +| ClientID | Texte | CLI### | CLI001 | Unique, requis | +| Nom | Texte | - | Acme Corp | Requis | +| Secteur | Texte | - | Tech | Liste deroulante | +| DateDebut | Date | jj/mm/aaaa | 15/01/2024 | Date valide | + +### Secteurs suggeres + +- Tech +- Marketing +- Finance +- E-commerce +- Industrie +- Services +- Autre + +### Donnees de demo + +| ClientID | Nom | Secteur | DateDebut | +|----------|-----|---------|-----------| +| CLI001 | Acme Corporation | Tech | 15/01/2024 | +| CLI002 | Tech Solutions | Tech | 01/03/2024 | +| CLI003 | Marketing Pro | Marketing | 10/06/2024 | +| CLI004 | E-Shop Plus | E-commerce | 22/09/2024 | +| CLI005 | Finance Group | Finance | 05/11/2024 | + +--- + +## Table: Data_Temps + +Entrees de temps par projet et client. + +| Colonne | Type | Format | Exemple | Validation | +|---------|------|--------|---------|------------| +| Date | Date | jj/mm/aaaa | 15/12/2024 | Date valide | +| ClientID | Texte | CLI### | CLI001 | Liste clients | +| Projet | Texte | - | Site Web | Requis | +| Heures | Nombre | 0.00 | 3.50 | > 0, <= 24 | +| Description | Texte | - | Maquettes | Optionnel | + +### Donnees de demo + +| Date | ClientID | Projet | Heures | Description | +|------|----------|--------|--------|-------------| +| 02/01/2025 | CLI001 | Site Web | 3.5 | Maquettes | +| 02/01/2025 | CLI002 | API Backend | 6.0 | Endpoints | +| 03/01/2025 | CLI001 | Site Web | 4.0 | Integration | +| 03/01/2025 | CLI003 | Campagne SEO | 2.5 | Audit | +| 06/01/2025 | CLI002 | API Backend | 7.0 | Tests | +| 06/01/2025 | CLI004 | Boutique | 5.0 | Setup | +| 07/01/2025 | CLI001 | Maintenance | 1.5 | Updates | +| 08/01/2025 | CLI003 | Campagne SEO | 3.0 | Keywords | +| 08/01/2025 | CLI005 | Dashboard | 4.5 | Design | +| 09/01/2025 | CLI002 | App Mobile | 6.5 | Screens | + +--- + +## Table: Data_Revenus + +Paiements recus des clients. + +| Colonne | Type | Format | Exemple | Validation | +|---------|------|--------|---------|------------| +| Date | Date | jj/mm/aaaa | 31/12/2024 | Date valide | +| ClientID | Texte | CLI### | CLI001 | Liste clients | +| Montant | Nombre | # ##0.00 € | 2500.00 | > 0 | +| Type | Texte | - | Facture | Liste deroulante | + +### Types de paiement + +- Facture +- Acompte +- Avoir +- Autre + +### Donnees de demo + +| Date | ClientID | Montant | Type | +|------|----------|---------|------| +| 15/01/2025 | CLI001 | 2500.00 | Facture | +| 20/01/2025 | CLI002 | 4200.00 | Facture | +| 25/01/2025 | CLI003 | 1800.00 | Facture | +| 28/01/2025 | CLI001 | 1000.00 | Acompte | +| 31/01/2025 | CLI004 | 3500.00 | Facture | +| 05/02/2025 | CLI002 | 2800.00 | Facture | +| 10/02/2025 | CLI005 | 1500.00 | Acompte | + +--- + +## Table: Config + +Parametres de configuration du dashboard. + +| Parametre | Valeur | Description | +|-----------|--------|-------------| +| AnneeCourante | 2025 | Annee par defaut pour filtres | +| TauxHoraireDefaut | 75 | Taux horaire par defaut (euros) | +| DevisePrincipale | EUR | Devise affichee | +| JourDebutSemaine | 2 | 1=Dim, 2=Lun | +| ObjectifMensuel | 10000 | Objectif CA mensuel | +| ObjectifHeures | 140 | Objectif heures/mois | + +--- + +## Plages Nommees + +| Nom | Plage | Description | +|-----|-------|-------------| +| tbl_Clients | Data_Clients[#All] | Table clients | +| tbl_Temps | Data_Temps[#All] | Table temps | +| tbl_Revenus | Data_Revenus[#All] | Table revenus | +| lst_ClientIDs | Data_Clients[ClientID] | Liste ClientID | +| lst_Secteurs | Config!$E$2:$E$8 | Liste secteurs | +| lst_Types | Config!$G$2:$G$5 | Liste types paiement | + +--- + +## Formules de Validation + +### ClientID (Data_Temps, Data_Revenus) + +``` +=COUNTIF(Data_Clients[ClientID], [@ClientID]) > 0 +``` + +### Heures (Data_Temps) + +``` +=AND([@Heures] > 0, [@Heures] <= 24) +``` + +### Montant (Data_Revenus) + +``` +=[@Montant] > 0 +``` + +--- + +## Colonnes Calculees (optionnel) + +### Data_Temps - Mois + +``` +=TEXT([@Date], "mmmm yyyy") +``` + +### Data_Temps - Semaine + +``` +=WEEKNUM([@Date], 2) +``` + +### Data_Temps - NomClient + +``` +=VLOOKUP([@ClientID], Data_Clients, 2, FALSE) +``` + +### Data_Revenus - NomClient + +``` +=VLOOKUP([@ClientID], Data_Clients, 2, FALSE) +``` + +--- + +**Version:** 1.0 +**Date:** 2025-12-30 diff --git a/FORMULAS.md b/FORMULAS.md new file mode 100644 index 0000000..105a6e3 --- /dev/null +++ b/FORMULAS.md @@ -0,0 +1,348 @@ +# Freelance Dashboard - Formules et KPIs + +## Vue d'ensemble + +Toutes les formules utilisees dans le dashboard pour calculer les KPIs. + +--- + +## 1. KPIs Principaux + +### CA Total (periode selectionnee) + +```excel +=SUMIFS( + Data_Revenus[Montant], + Data_Revenus[Date], ">=" & DateDebut, + Data_Revenus[Date], "<=" & DateFin +) +``` + +**Avec slicer client:** +```excel +=SUMIFS( + Data_Revenus[Montant], + Data_Revenus[Date], ">=" & DateDebut, + Data_Revenus[Date], "<=" & DateFin, + Data_Revenus[ClientID], ClientFiltre +) +``` + +--- + +### CA Mois en Cours + +```excel +=SUMIFS( + Data_Revenus[Montant], + Data_Revenus[Date], ">=" & EOMONTH(TODAY(), -1) + 1, + Data_Revenus[Date], "<=" & EOMONTH(TODAY(), 0) +) +``` + +**Version simplifiee:** +```excel +=SUMPRODUCT( + (MONTH(Data_Revenus[Date]) = MONTH(TODAY())) * + (YEAR(Data_Revenus[Date]) = YEAR(TODAY())) * + Data_Revenus[Montant] +) +``` + +--- + +### Heures Totales (periode) + +```excel +=SUMIFS( + Data_Temps[Heures], + Data_Temps[Date], ">=" & DateDebut, + Data_Temps[Date], "<=" & DateFin +) +``` + +--- + +### Taux Horaire Moyen + +```excel +=IFERROR( + SUMIFS(Data_Revenus[Montant], ...) / SUMIFS(Data_Temps[Heures], ...), + 0 +) +``` + +**Format:** `# ##0.00 "€/h"` + +--- + +### Nombre Clients Actifs + +```excel +=SUMPRODUCT( + (COUNTIFS( + Data_Temps[ClientID], Data_Clients[ClientID], + Data_Temps[Date], ">=" & DateDebut, + Data_Temps[Date], "<=" & DateFin + ) > 0) * 1 +) +``` + +**Alternative avec UNIQUE (Excel 365):** +```excel +=COUNTA(UNIQUE( + FILTER( + Data_Temps[ClientID], + (Data_Temps[Date] >= DateDebut) * (Data_Temps[Date] <= DateFin) + ) +)) +``` + +--- + +### Top Client (par CA) + +```excel +=INDEX( + Data_Clients[Nom], + MATCH( + MAX( + SUMIFS( + Data_Revenus[Montant], + Data_Revenus[ClientID], Data_Clients[ClientID] + ) + ), + SUMIFS( + Data_Revenus[Montant], + Data_Revenus[ClientID], Data_Clients[ClientID] + ), + 0 + ) +) +``` + +**Avec XLOOKUP (Excel 365):** +```excel +=LET( + clients, Data_Clients[ClientID], + noms, Data_Clients[Nom], + ca, SUMIFS(Data_Revenus[Montant], Data_Revenus[ClientID], clients), + maxCA, MAX(ca), + topClient, XLOOKUP(maxCA, ca, noms, "N/A"), + topClient +) +``` + +--- + +### Heures Cette Semaine + +```excel +=SUMIFS( + Data_Temps[Heures], + Data_Temps[Date], ">=" & TODAY() - WEEKDAY(TODAY(), 2) + 1, + Data_Temps[Date], "<=" & TODAY() - WEEKDAY(TODAY(), 2) + 7 +) +``` + +--- + +## 2. Formules pour Graphiques + +### CA par Mois (12 derniers mois) + +**Tableau helper:** + +| Mois | CA | +|------|-----| +| =EOMONTH(TODAY(),-11) | =SUMPRODUCT((MONTH(Data_Revenus[Date])=MONTH(A2))*(YEAR(Data_Revenus[Date])=YEAR(A2))*Data_Revenus[Montant]) | +| ... | ... | + +**Avec SEQUENCE (Excel 365):** +```excel +=LET( + mois, SEQUENCE(12, 1, EOMONTH(TODAY(), -11) + 1, 30), + ca, SUMPRODUCT( + (MONTH(Data_Revenus[Date]) = MONTH(mois)) * + (YEAR(Data_Revenus[Date]) = YEAR(mois)) * + Data_Revenus[Montant] + ), + HSTACK(TEXT(mois, "mmm yy"), ca) +) +``` + +--- + +### Repartition CA par Client + +```excel +=SUMIFS( + Data_Revenus[Montant], + Data_Revenus[ClientID], Data_Clients[@ClientID] +) +``` + +**Pourcentage:** +```excel +=[@CA] / SUM([CA]) +``` + +--- + +### Heures par Semaine (8 dernieres semaines) + +```excel +=SUMIFS( + Data_Temps[Heures], + Data_Temps[Date], ">=" & DebutSemaine, + Data_Temps[Date], "<=" & FinSemaine +) +``` + +--- + +## 3. Formules de Mise en Forme Conditionnelle + +### KPI CA - Vert si objectif atteint + +**Condition:** `=B2 >= Config!$C$5` + +- Vert (#27AE60) si >= objectif +- Orange (#F39C12) si >= 80% objectif +- Rouge (#E74C3C) si < 80% + +--- + +### Heures - Barre de progression + +**Formule:** `=[@Heures] / 8` (sur une journee de 8h) + +--- + +### Evolution - Fleche haut/bas + +```excel +=IF([@CA] > [@CA_Precedent], "↑", IF([@CA] < [@CA_Precedent], "↓", "β†’")) +``` + +--- + +## 4. Formules Utilitaires + +### Premier jour du mois + +```excel +=EOMONTH(TODAY(), -1) + 1 +``` + +### Dernier jour du mois + +```excel +=EOMONTH(TODAY(), 0) +``` + +### Premier jour de la semaine (lundi) + +```excel +=TODAY() - WEEKDAY(TODAY(), 2) + 1 +``` + +### Numero de semaine + +```excel +=WEEKNUM([@Date], 2) +``` + +### Nom du mois en francais + +```excel +=TEXT([@Date], "mmmm") +``` + +--- + +## 5. Tableau Croise Dynamique - Champs Calcules + +### Taux Horaire + +``` += Montant / Heures +``` + +### CA Journalier Moyen + +``` += Montant / COUNTA(Date) +``` + +### Heures par Jour Ouvre + +``` += Heures / NETWORKDAYS(MIN(Date), MAX(Date)) +``` + +--- + +## 6. Validation des Donnees + +### Liste deroulante ClientID + +``` +Source: =INDIRECT("Data_Clients[ClientID]") +``` + +### Liste deroulante Type + +``` +Source: Facture,Acompte,Avoir,Autre +``` + +### Heures (entre 0.25 et 24) + +``` +Validation: Decimal +Minimum: 0.25 +Maximum: 24 +Message: "Entrez un nombre d'heures entre 0.25 et 24" +``` + +--- + +## 7. Exemples de Cellules Dashboard + +### Cellule KPI - CA Total + +``` +Cellule: D4 +Formule: =SUMIFS(Data_Revenus[Montant], Data_Revenus[Date], ">="&$B$2, Data_Revenus[Date], "<="&$B$3) +Format: # ##0 "€" +Police: Calibri 28pt Bold +Couleur: #2C3E50 +``` + +### Cellule KPI - Variation + +``` +Cellule: D5 +Formule: =D4 - CA_Mois_Precedent +Format: +# ##0 "€";-# ##0 "€" +Couleur: Vert si positif, Rouge si negatif +``` + +--- + +## 8. Raccourcis Formules + +| Besoin | Formule courte | +|--------|----------------| +| CA total | `=SUM(Data_Revenus[Montant])` | +| Heures total | `=SUM(Data_Temps[Heures])` | +| Nb clients | `=COUNTA(Data_Clients[ClientID])` | +| Nb projets uniques | `=COUNTA(UNIQUE(Data_Temps[Projet]))` | +| Date min | `=MIN(Data_Temps[Date])` | +| Date max | `=MAX(Data_Temps[Date])` | + +--- + +**Version:** 1.0 +**Date:** 2025-12-30 diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..c6c36b5 --- /dev/null +++ b/PLAN.md @@ -0,0 +1,230 @@ +# Freelance Dashboard - Plan de Projet + +Dashboard KPI Excel - Suivi d'activite freelance + +--- + +## 1. Vision + +**Objectif:** Dashboard visuel pour suivre son activite freelance (temps, revenus, clients) en un coup d'oeil. + +**Public cible:** Freelances, independants, usage personnel. + +**Lien portfolio:** Complementaire a TimeTrack Pro (Access = saisie, Excel = visualisation). + +--- + +## 2. Perimetre V1 + +### Inclus + +| Fonctionnalite | Description | +|----------------|-------------| +| Saisie donnees | Heures, revenus, clients | +| KPIs principaux | CA, heures, taux horaire moyen | +| Graphiques | Dynamiques et interactifs | +| Filtres | Periode, client, projet | +| Design pro | Moderne, pret a montrer | + +### Hors Perimetre (V2 eventuelle) + +- Connexion automatique a Access/TimeTrack +- Previsionnel / objectifs +- Multi-devises +- Macros VBA complexes + +--- + +## 3. Structure du Fichier + +| Onglet | Contenu | Type | +|--------|---------|------| +| **Dashboard** | Vue principale avec KPIs et graphiques | Affichage | +| **Data_Temps** | Table des entrees de temps (source) | Donnees | +| **Data_Revenus** | Table des paiements recus | Donnees | +| **Data_Clients** | Liste clients avec infos | Donnees | +| **Config** | Parametres (annee, taux par defaut) | Parametres | + +--- + +## 4. Modele de Donnees + +### Data_Clients + +| Champ | Type | Description | +|-------|------|-------------| +| ClientID | Texte | Identifiant unique (ex: CLI001) | +| Nom | Texte | Nom du client | +| Secteur | Texte | Secteur d'activite | +| DateDebut | Date | Date debut collaboration | + +### Data_Temps + +| Champ | Type | Description | +|-------|------|-------------| +| Date | Date | Date de l'entree | +| ClientID | Texte | Reference client | +| Projet | Texte | Nom du projet | +| Heures | Nombre | Duree en heures | +| Description | Texte | Description du travail | + +### Data_Revenus + +| Champ | Type | Description | +|-------|------|-------------| +| Date | Date | Date du paiement | +| ClientID | Texte | Reference client | +| Montant | Nombre | Montant en euros | +| Type | Texte | Facture / Acompte | + +--- + +## 5. KPIs a Afficher + +| KPI | Calcul | Formule Excel | +|-----|--------|---------------| +| **CA Total** | Somme revenus (periode) | `=SUMIFS(...)` | +| **CA Mois en cours** | Somme revenus (mois) | `=SUMIFS(...,MONTH()=...)` | +| **Heures totales** | Somme heures (periode) | `=SUMIFS(...)` | +| **Taux horaire moyen** | CA / Heures | `=CA/Heures` | +| **Nb clients actifs** | Clients avec heures > 0 | `=COUNTIFS(...)` | +| **Top client** | Client avec le plus de CA | `=INDEX(MATCH(MAX(...)))` | +| **Heures semaine** | Somme heures (semaine) | `=SUMIFS(...,WEEKNUM()=...)` | + +--- + +## 6. Graphiques + +| Graphique | Type | Donnees | Position | +|-----------|------|---------|----------| +| **Evolution CA mensuel** | Barres ou ligne | CA par mois | Haut gauche | +| **Repartition par client** | Camembert | % CA par client | Haut droite | +| **Heures par semaine** | Barres | Heures hebdo | Bas gauche | +| **CA vs Heures** | Combo | Correlation | Bas droite | + +--- + +## 7. Fonctionnalites Excel + +| Feature | Usage | Implementation | +|---------|-------|----------------| +| **Tableaux structures** | Donnees auto-expansion | `Ctrl+T` sur plages | +| **SOMME.SI.ENS** | Calculs conditionnels | Formules KPIs | +| **Tableaux croises** | Agregations flexibles | TCD sur Data_Temps | +| **Slicers** | Filtres visuels | Connectes aux TCD | +| **Mise en forme cond.** | Alertes visuelles | Regles sur KPIs | +| **Validation donnees** | Listes deroulantes | ClientID, Type | +| **Graphiques dynamiques** | Lies aux TCD | Charts connectes | + +--- + +## 8. UI / Design + +### Palette Couleurs + +| Usage | Couleur | Hex | +|-------|---------|-----| +| Primaire | Bleu fonce | #2C3E50 | +| Accent | Vert | #27AE60 | +| Neutre | Gris clair | #ECF0F1 | +| Alerte | Rouge | #E74C3C | + +### Principes Design + +1. **Fond clair**, donnees lisibles +2. **KPIs en gros**, bien espaces +3. **Graphiques alignes**, pas surcharges +4. **Pas de bordures inutiles**, style moderne flat +5. **Hierarchie visuelle** claire + +### Layout Dashboard + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ FREELANCE DASHBOARD [Filtres/Slicers]β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ CA Totalβ”‚ β”‚CA Mois β”‚ β”‚ Heures β”‚ β”‚Taux Moy β”‚ β”‚ +β”‚ β”‚ 45 230€ β”‚ β”‚ 8 500€ β”‚ β”‚ 312h β”‚ β”‚ 72€/h β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ +β”‚ β”‚ Evolution CA β”‚ β”‚ Repartition β”‚ β”‚ +β”‚ β”‚ (barres) β”‚ β”‚ (camembert) β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ +β”‚ β”‚ Heures/semaine β”‚ β”‚ CA vs Heures β”‚ β”‚ +β”‚ β”‚ (barres) β”‚ β”‚ (combo) β”‚ β”‚ +β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +--- + +## 9. Phases de Developpement + +| Phase | Contenu | Methode | Duree | +|-------|---------|---------|-------| +| 1 | Structure fichier + tables | MCP VBA | 1h | +| 2 | Formules KPIs | MCP VBA | 1h | +| 3 | Tableaux croises dynamiques | Excel UI | 1h | +| 4 | Graphiques | Excel UI | 2h | +| 5 | Dashboard layout + slicers | Excel UI | 2h | +| 6 | Design polish + donnees demo | Excel UI | 1h | +| 7 | Tests + documentation | Manuel | 1h | + +**Total estime:** ~9h + +--- + +## 10. Livrables Finaux + +- [ ] Fichier `.xlsx` fonctionnel avec donnees demo +- [ ] README avec screenshots +- [ ] (Bonus) Version `.xlsm` avec macros refresh +- [ ] (Bonus) GIF de demo + +--- + +## 11. Criteres de Succes + +- [ ] Le dashboard est lisible en 5 secondes +- [ ] Les filtres fonctionnent sans lag +- [ ] Les donnees se mettent a jour automatiquement +- [ ] Le design est pro et moderne +- [ ] Utilisation personnelle (dogfooding) + +--- + +## 12. Integration TimeTrack Pro + +### Option A: Export manuel + +``` +TimeTrack Pro (Access) β†’ Export Excel β†’ Copier/Coller β†’ Dashboard +``` + +### Option B: Liaison ODBC (V2) + +``` +TimeTrack Pro (Access) ← Connexion ODBC ← Dashboard (Power Query) +``` + +### Option C: Macro d'import (V2) + +```vba +Sub ImportFromAccess() + ' Connexion ADO vers TimeTrackPro.accdb + ' Import des donnees dans les tables Excel +End Sub +``` + +--- + +**Auteur:** Alexis Trouve +**Date:** 2025-12-30 +**Version:** 1.0 diff --git a/README.md b/README.md new file mode 100644 index 0000000..14618f4 --- /dev/null +++ b/README.md @@ -0,0 +1,62 @@ +# Freelance Dashboard + +Dashboard KPI Excel - Suivi d'activite freelance + +## Vision + +Dashboard visuel pour suivre son activite freelance (temps, revenus, clients) en un coup d'oeil. + +**Public cible:** Freelances, independants +**Lien portfolio:** Complementaire a TimeTrack Pro (Access = saisie, Excel = visualisation) + +## Status + +| Phase | Description | Status | +|-------|-------------|--------| +| 1 | Structure fichier + tables | En attente | +| 2 | Formules KPIs | En attente | +| 3 | Tableaux croises dynamiques | En attente | +| 4 | Graphiques | En attente | +| 5 | Dashboard layout + slicers | En attente | +| 6 | Design polish + donnees demo | En attente | +| 7 | Tests + documentation | En attente | + +## Fonctionnalites V1 + +- [x] Saisie des donnees (heures, revenus, clients) +- [x] KPIs principaux (CA, heures, taux horaire moyen) +- [x] Graphiques dynamiques +- [x] Filtres par periode / client / projet +- [x] Mise en forme pro + +## Structure du fichier + +| Onglet | Contenu | +|--------|---------| +| Dashboard | Vue principale avec KPIs et graphiques | +| Data_Temps | Table des entrees de temps | +| Data_Revenus | Table des paiements recus | +| Data_Clients | Liste clients avec infos | +| Config | Parametres (annee, taux par defaut) | + +## KPIs + +- CA Total +- CA Mois en cours +- Heures totales +- Taux horaire moyen +- Nb clients actifs +- Top client +- Heures cette semaine + +## Screenshots + +*(A venir)* + +## Auteur + +Alexis Trouve - alexistrouve.pro@gmail.com + +## License + +Proprietary - Demo Project diff --git a/docs/MCP_VBA_GUIDE.md b/docs/MCP_VBA_GUIDE.md new file mode 100644 index 0000000..02e1b71 --- /dev/null +++ b/docs/MCP_VBA_GUIDE.md @@ -0,0 +1,260 @@ +# Freelance Dashboard - Guide MCP VBA + +Comment utiliser VBA MCP Server pour construire ce projet Excel. + +## Prerequis + +1. VBA MCP Server v0.6.0+ installe +2. Microsoft Excel installe +3. "Trust access to VBA project object model" active dans Excel + +## Outils MCP Disponibles + +### Pour Excel + +| Outil | Usage dans ce projet | +|-------|---------------------| +| `get_worksheet_data` | Lire donnees des feuilles | +| `set_worksheet_data` | Ecrire donnees et formules | +| `list_excel_tables` | Lister les Excel Tables | +| `create_excel_table` | Creer tables structurees | +| `insert_rows` | Ajouter lignes | +| `delete_rows` | Supprimer lignes | +| `inject_vba` | Injecter macros optionnelles | +| `validate_vba` | Valider syntaxe VBA | +| `run_macro` | Executer macros | +| `open_in_office` | Ouvrir Excel visible | + +--- + +## Etape 1: Creer le Fichier Excel + +**Manuel:** Ouvrir Excel > Nouveau classeur > Enregistrer comme `FreelanceDashboard.xlsx` + +**Emplacement:** `C:\Users\alexi\Documents\projects\freelance-dashboard\templates\FreelanceDashboard.xlsx` + +### Creer les onglets + +Renommer/creer les feuilles: +1. Dashboard +2. Data_Clients +3. Data_Temps +4. Data_Revenus +5. Config + +--- + +## Etape 2: Creer les Tables de Donnees + +### Data_Clients + +``` +Utilise set_worksheet_data pour ecrire les donnees: +``` + +```python +# En-tetes + donnees +data = [ + ["ClientID", "Nom", "Secteur", "DateDebut"], + ["CLI001", "Acme Corporation", "Tech", "15/01/2024"], + ["CLI002", "Tech Solutions", "Tech", "01/03/2024"], + ["CLI003", "Marketing Pro", "Marketing", "10/06/2024"], + ["CLI004", "E-Shop Plus", "E-commerce", "22/09/2024"], + ["CLI005", "Finance Group", "Finance", "05/11/2024"], +] +set_worksheet_data("FreelanceDashboard.xlsx", "Data_Clients", data) +``` + +``` +Puis creer la table structuree: +``` + +```python +create_excel_table("FreelanceDashboard.xlsx", "Data_Clients", "A1:D6", "tbl_Clients", has_headers=True) +``` + +### Data_Temps + +```python +data = [ + ["Date", "ClientID", "Projet", "Heures", "Description"], + ["02/01/2025", "CLI001", "Site Web", 3.5, "Maquettes"], + ["02/01/2025", "CLI002", "API Backend", 6.0, "Endpoints"], + ["03/01/2025", "CLI001", "Site Web", 4.0, "Integration"], + ["03/01/2025", "CLI003", "Campagne SEO", 2.5, "Audit"], + ["06/01/2025", "CLI002", "API Backend", 7.0, "Tests"], + ["06/01/2025", "CLI004", "Boutique", 5.0, "Setup"], + ["07/01/2025", "CLI001", "Maintenance", 1.5, "Updates"], + ["08/01/2025", "CLI003", "Campagne SEO", 3.0, "Keywords"], + ["08/01/2025", "CLI005", "Dashboard", 4.5, "Design"], + ["09/01/2025", "CLI002", "App Mobile", 6.5, "Screens"], +] +set_worksheet_data("FreelanceDashboard.xlsx", "Data_Temps", data) +create_excel_table("FreelanceDashboard.xlsx", "Data_Temps", "A1:E11", "tbl_Temps", has_headers=True) +``` + +### Data_Revenus + +```python +data = [ + ["Date", "ClientID", "Montant", "Type"], + ["15/01/2025", "CLI001", 2500, "Facture"], + ["20/01/2025", "CLI002", 4200, "Facture"], + ["25/01/2025", "CLI003", 1800, "Facture"], + ["28/01/2025", "CLI001", 1000, "Acompte"], + ["31/01/2025", "CLI004", 3500, "Facture"], + ["05/02/2025", "CLI002", 2800, "Facture"], + ["10/02/2025", "CLI005", 1500, "Acompte"], +] +set_worksheet_data("FreelanceDashboard.xlsx", "Data_Revenus", data) +create_excel_table("FreelanceDashboard.xlsx", "Data_Revenus", "A1:D8", "tbl_Revenus", has_headers=True) +``` + +--- + +## Etape 3: Creer la Configuration + +```python +data = [ + ["Parametre", "Valeur"], + ["AnneeCourante", 2025], + ["TauxHoraireDefaut", 75], + ["DevisePrincipale", "EUR"], + ["ObjectifMensuel", 10000], + ["ObjectifHeures", 140], +] +set_worksheet_data("FreelanceDashboard.xlsx", "Config", data) +``` + +--- + +## Etape 4: Ecrire les Formules KPIs + +``` +Sur l'onglet Dashboard, ecrire les formules: +``` + +```python +kpis = [ + ["KPI", "Valeur", "Formule"], + ["CA Total", "=SUM(tbl_Revenus[Montant])", ""], + ["Heures Totales", "=SUM(tbl_Temps[Heures])", ""], + ["Taux Horaire Moyen", "=B2/B3", ""], + ["Nb Clients", "=COUNTA(tbl_Clients[ClientID])", ""], +] +set_worksheet_data("FreelanceDashboard.xlsx", "Dashboard", kpis, start_cell="A1") +``` + +--- + +## Etape 5: VBA Optionnel (Refresh) + +``` +Injecter une macro pour rafraichir les donnees: +``` + +```python +code = ''' +Sub RefreshDashboard() + ' Rafraichit toutes les connexions et TCD + Application.CalculateFull + + Dim ws As Worksheet + For Each ws In ThisWorkbook.Worksheets + Dim pt As PivotTable + For Each pt In ws.PivotTables + pt.RefreshTable + Next pt + Next ws + + MsgBox "Dashboard actualise!", vbInformation +End Sub + +Sub AutoRefresh() + ' Appele a l'ouverture du classeur + RefreshDashboard +End Sub +''' + +validate_vba(code, file_type="excel") +inject_vba("FreelanceDashboard.xlsm", "mod_Refresh", code) +``` + +--- + +## Commandes Frequentes + +### Lire les donnees + +``` +get_worksheet_data("FreelanceDashboard.xlsx", "Data_Temps") +``` + +### Ajouter une entree de temps + +```python +# Lire donnees existantes, ajouter ligne, reecrire +# Ou utiliser insert_rows +insert_rows("FreelanceDashboard.xlsx", "Data_Temps", position=12, count=1) +set_worksheet_data("FreelanceDashboard.xlsx", "Data_Temps", + [["10/01/2025", "CLI001", "Nouveau", 2.5, "Test"]], + start_cell="A12") +``` + +### Lister les tables + +``` +list_excel_tables("FreelanceDashboard.xlsx") +``` + +### Ouvrir Excel visible + +``` +open_in_office("FreelanceDashboard.xlsx") +``` + +### Executer macro refresh + +``` +run_macro("FreelanceDashboard.xlsm", "RefreshDashboard") +``` + +--- + +## Ce qui doit etre fait dans Excel UI + +| Element | Raison | +|---------|--------| +| Tableaux Croises Dynamiques | Interface complexe | +| Graphiques | Design visuel precis | +| Slicers | Connexion aux TCD | +| Mise en forme conditionnelle | Regles visuelles | +| Layout Dashboard | Positionnement precis | + +--- + +## Workflow Complet + +``` +1. Creer fichier Excel vide β†’ Manuel +2. set_worksheet_data β†’ Donnees clients +3. set_worksheet_data β†’ Donnees temps +4. set_worksheet_data β†’ Donnees revenus +5. create_excel_table (x3) β†’ Tables structurees +6. set_worksheet_data β†’ Config +7. set_worksheet_data β†’ Formules KPIs +8. Creer TCD β†’ Excel UI +9. Creer graphiques β†’ Excel UI +10. Design dashboard β†’ Excel UI +11. inject_vba β†’ Macro refresh (optionnel) +``` + +--- + +## Fichiers de Reference + +| Fichier | Contenu | +|---------|---------| +| `DATA_MODEL.md` | Schema tables + donnees demo | +| `FORMULAS.md` | Toutes les formules Excel | +| `PLAN.md` | Layout, couleurs, phases | diff --git a/plans/implemPlan.md b/plans/implemPlan.md new file mode 100644 index 0000000..ec2cffc --- /dev/null +++ b/plans/implemPlan.md @@ -0,0 +1,587 @@ +# Freelance Dashboard - Plan d'Implementation Agent + +## Vue d'Ensemble + +**Objectif:** Creer un dashboard Excel KPI pour suivi d'activite freelance +**Fichier cible:** `templates/FreelanceDashboard.xlsx` +**Outils:** MCP VBA Server (vba-mcp-pro) + +--- + +## Pre-requis + +Avant de commencer, verifier: +- [ ] MCP VBA Server est connecte et fonctionnel +- [ ] Microsoft Excel est installe sur la machine +- [ ] Le dossier `templates/` existe + +--- + +## Phase 1: Preparation et Structure Fichier + +### Step 1.1: Creer le dossier templates + +```bash +# Verifier/creer le dossier +mkdir templates +``` + +**Verification:** Le dossier `templates/` existe + +### Step 1.2: Creer le fichier Excel vide avec les onglets + +**Action manuelle requise:** +1. Ouvrir Excel +2. Creer un nouveau classeur +3. Renommer les feuilles: + - Feuil1 β†’ Dashboard + - Ajouter: Data_Clients + - Ajouter: Data_Temps + - Ajouter: Data_Revenus + - Ajouter: Config +4. Sauvegarder comme `templates/FreelanceDashboard.xlsx` + +**Alternative MCP:** Utiliser `open_in_office` sur un fichier existant, mais la creation initiale est manuelle. + +**Verification:** +``` +list_tables(file_path="templates/FreelanceDashboard.xlsx") +``` +Doit retourner les 5 onglets. + +--- + +## Phase 2: Creation des Tables de Donnees + +### Step 2.1: Peupler Data_Clients + +**Outil:** `set_worksheet_data` + +**Donnees:** +```json +{ + "file_path": "C:\\Users\\alexi\\Documents\\projects\\freelance-dashboard\\templates\\FreelanceDashboard.xlsx", + "sheet_name": "Data_Clients", + "data": [ + ["ClientID", "Nom", "Secteur", "DateDebut"], + ["CLI001", "Acme Corporation", "Tech", "15/01/2024"], + ["CLI002", "Tech Solutions", "Tech", "01/03/2024"], + ["CLI003", "Marketing Pro", "Marketing", "10/06/2024"], + ["CLI004", "E-Shop Plus", "E-commerce", "22/09/2024"], + ["CLI005", "Finance Group", "Finance", "05/11/2024"] + ], + "start_cell": "A1" +} +``` + +**Verification:** `get_worksheet_data` sur Data_Clients doit retourner 6 lignes (header + 5 clients) + +### Step 2.2: Convertir en Excel Table (tbl_Clients) + +**Outil:** `create_table` + +**Parametres:** +```json +{ + "file_path": "...", + "sheet_name": "Data_Clients", + "range": "A1:D6", + "table_name": "tbl_Clients", + "has_headers": true, + "style": "TableStyleMedium2" +} +``` + +**Verification:** `list_tables` doit montrer `tbl_Clients` + +### Step 2.3: Peupler Data_Temps + +**Outil:** `set_worksheet_data` + +**Donnees:** +```json +{ + "sheet_name": "Data_Temps", + "data": [ + ["Date", "ClientID", "Projet", "Heures", "Description"], + ["02/01/2025", "CLI001", "Site Web", 3.5, "Maquettes"], + ["02/01/2025", "CLI002", "API Backend", 6.0, "Endpoints"], + ["03/01/2025", "CLI001", "Site Web", 4.0, "Integration"], + ["03/01/2025", "CLI003", "Campagne SEO", 2.5, "Audit"], + ["06/01/2025", "CLI002", "API Backend", 7.0, "Tests"], + ["06/01/2025", "CLI004", "Boutique", 5.0, "Setup"], + ["07/01/2025", "CLI001", "Maintenance", 1.5, "Updates"], + ["08/01/2025", "CLI003", "Campagne SEO", 3.0, "Keywords"], + ["08/01/2025", "CLI005", "Dashboard", 4.5, "Design"], + ["09/01/2025", "CLI002", "App Mobile", 6.5, "Screens"] + ], + "start_cell": "A1" +} +``` + +**Verification:** 11 lignes (header + 10 entrees) + +### Step 2.4: Convertir en Excel Table (tbl_Temps) + +**Outil:** `create_table` + +**Parametres:** +```json +{ + "sheet_name": "Data_Temps", + "range": "A1:E11", + "table_name": "tbl_Temps", + "has_headers": true +} +``` + +### Step 2.5: Peupler Data_Revenus + +**Outil:** `set_worksheet_data` + +**Donnees:** +```json +{ + "sheet_name": "Data_Revenus", + "data": [ + ["Date", "ClientID", "Montant", "Type"], + ["15/01/2025", "CLI001", 2500, "Facture"], + ["20/01/2025", "CLI002", 4200, "Facture"], + ["25/01/2025", "CLI003", 1800, "Facture"], + ["28/01/2025", "CLI001", 1000, "Acompte"], + ["31/01/2025", "CLI004", 3500, "Facture"], + ["05/02/2025", "CLI002", 2800, "Facture"], + ["10/02/2025", "CLI005", 1500, "Acompte"] + ], + "start_cell": "A1" +} +``` + +### Step 2.6: Convertir en Excel Table (tbl_Revenus) + +**Outil:** `create_table` + +**Parametres:** +```json +{ + "sheet_name": "Data_Revenus", + "range": "A1:D8", + "table_name": "tbl_Revenus", + "has_headers": true +} +``` + +### Step 2.7: Verification Phase 2 + +**Action:** `list_tables` sur le fichier + +**Resultat attendu:** +- tbl_Clients (Data_Clients, 5 lignes) +- tbl_Temps (Data_Temps, 10 lignes) +- tbl_Revenus (Data_Revenus, 7 lignes) + +--- + +## Phase 3: Configuration + +### Step 3.1: Peupler Config + +**Outil:** `set_worksheet_data` + +**Donnees:** +```json +{ + "sheet_name": "Config", + "data": [ + ["Parametre", "Valeur", "", "Secteurs", "", "Types"], + ["AnneeCourante", 2025, "", "Tech", "", "Facture"], + ["TauxHoraireDefaut", 75, "", "Marketing", "", "Acompte"], + ["DevisePrincipale", "EUR", "", "Finance", "", "Avoir"], + ["ObjectifMensuel", 10000, "", "E-commerce", "", "Autre"], + ["ObjectifHeures", 140, "", "Industrie", "", ""], + ["JourDebutSemaine", 2, "", "Services", "", ""], + ["", "", "", "Autre", "", ""] + ], + "start_cell": "A1" +} +``` + +**Note:** Les colonnes D et F serviront de listes deroulantes pour la validation des donnees. + +--- + +## Phase 4: Formules KPIs sur Dashboard + +### Step 4.1: Structure du Dashboard - Labels + +**Outil:** `set_worksheet_data` + +**Donnees (colonne A - labels):** +```json +{ + "sheet_name": "Dashboard", + "data": [ + ["FREELANCE DASHBOARD"], + [""], + ["KPIs Principaux"], + ["CA Total"], + ["CA Mois en cours"], + ["Heures Totales"], + ["Taux Horaire Moyen"], + ["Nb Clients Actifs"], + ["Heures Cette Semaine"], + [""], + ["Top Client"], + [""], + ["Periode"], + ["Date Debut"], + ["Date Fin"] + ], + "start_cell": "A1" +} +``` + +### Step 4.2: Formules KPIs - Valeurs + +**Outil:** `set_worksheet_data` + +**Donnees (colonne B - formules):** +```json +{ + "sheet_name": "Dashboard", + "data": [ + [""], + [""], + [""], + ["=SUM(tbl_Revenus[Montant])"], + ["=SUMPRODUCT((MONTH(tbl_Revenus[Date])=MONTH(TODAY()))*(YEAR(tbl_Revenus[Date])=YEAR(TODAY()))*tbl_Revenus[Montant])"], + ["=SUM(tbl_Temps[Heures])"], + ["=IFERROR(B4/B6,0)"], + ["=COUNTA(tbl_Clients[ClientID])"], + ["=SUMIFS(tbl_Temps[Heures],tbl_Temps[Date],\">=\"&(TODAY()-WEEKDAY(TODAY(),2)+1),tbl_Temps[Date],\"<=\"&(TODAY()-WEEKDAY(TODAY(),2)+7))"], + [""], + ["=IFERROR(INDEX(tbl_Clients[Nom],MATCH(MAX(SUMIFS(tbl_Revenus[Montant],tbl_Revenus[ClientID],tbl_Clients[ClientID])),SUMIFS(tbl_Revenus[Montant],tbl_Revenus[ClientID],tbl_Clients[ClientID]),0)),\"-\")"], + [""], + [""], + ["=MIN(tbl_Temps[Date])"], + ["=MAX(tbl_Temps[Date])"] + ], + "start_cell": "B1" +} +``` + +**Note:** Certaines formules complexes comme Top Client peuvent necessiter validation. Si erreur, utiliser version simplifiee. + +### Step 4.3: Verification des formules + +**Outil:** `get_worksheet_data` + +**Parametres:** +```json +{ + "sheet_name": "Dashboard", + "range": "A1:B15" +} +``` + +**Resultat attendu:** +- B4 (CA Total) = 17300 (somme des montants) +- B6 (Heures Totales) = 43.5 (somme des heures) +- B7 (Taux Horaire) = ~397.70 (17300/43.5) +- B8 (Nb Clients) = 5 + +--- + +## Phase 5: Tableaux Croises Dynamiques (MANUEL) + +> **IMPORTANT:** Cette phase ne peut PAS etre automatisee avec MCP VBA. +> Elle doit etre realisee manuellement dans Excel. + +### Step 5.1: TCD - CA par Client + +**Actions manuelles:** +1. Selectionner une cellule dans tbl_Revenus +2. Insertion > Tableau croise dynamique +3. Placer sur nouvelle feuille ou Dashboard +4. Configuration: + - Lignes: ClientID + - Valeurs: Somme de Montant +5. Renommer la feuille TCD si creee + +### Step 5.2: TCD - Heures par Mois + +**Configuration:** +- Lignes: Date (grouper par mois) +- Valeurs: Somme de Heures + +### Step 5.3: TCD - CA par Mois + +**Configuration:** +- Lignes: Date (grouper par mois) +- Valeurs: Somme de Montant + +--- + +## Phase 6: Graphiques (MANUEL) + +> **IMPORTANT:** Cette phase ne peut PAS etre automatisee avec MCP VBA. + +### Step 6.1: Graphique - Evolution CA Mensuel + +**Type:** Histogramme ou Courbe +**Source:** TCD CA par Mois +**Position:** Dashboard, zone superieure gauche + +### Step 6.2: Graphique - Repartition par Client + +**Type:** Camembert +**Source:** TCD CA par Client +**Position:** Dashboard, zone superieure droite + +### Step 6.3: Graphique - Heures par Semaine + +**Type:** Histogramme +**Source:** TCD Heures par Mois (ou semaine) +**Position:** Dashboard, zone inferieure gauche + +### Step 6.4: Graphique - CA vs Heures + +**Type:** Graphique combine (barres + ligne) +**Source:** Donnees agregees +**Position:** Dashboard, zone inferieure droite + +--- + +## Phase 7: Slicers et Filtres (MANUEL) + +### Step 7.1: Creer Slicer Client + +1. Selectionner un TCD +2. Insertion > Segment +3. Choisir ClientID +4. Connecter aux autres TCD (clic droit > Connexions de rapport) + +### Step 7.2: Creer Slicer Periode + +1. Segment sur Date (annee/mois) +2. Connecter aux TCD + +### Step 7.3: Positionner les Slicers + +- Placer en haut a droite du Dashboard +- Redimensionner pour integration visuelle + +--- + +## Phase 8: Design et Mise en Forme (MANUEL) + +### Step 8.1: Palette Couleurs + +| Element | Couleur | Hex | +|---------|---------|-----| +| Titre/Headers | Bleu fonce | #2C3E50 | +| KPIs positifs | Vert | #27AE60 | +| Fond | Gris clair | #ECF0F1 | +| Alertes | Rouge | #E74C3C | + +### Step 8.2: Mise en forme des KPIs + +- Police: Calibri 24-28pt Bold pour valeurs +- Format nombres: `# ##0 "€"` pour montants +- Format heures: `0.0 "h"` +- Format taux: `0.00 "€/h"` + +### Step 8.3: Mise en forme conditionnelle + +**KPI CA vs Objectif:** +- Vert si >= Config!ObjectifMensuel +- Orange si >= 80% +- Rouge si < 80% + +### Step 8.4: Layout Final + +``` +β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” +β”‚ FREELANCE DASHBOARD [Slicers] β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ +β”‚ β”‚ CA Totalβ”‚ β”‚CA Mois β”‚ β”‚ Heures β”‚ β”‚Taux Moy β”‚ β”‚ +β”‚ β”‚ 17300€ β”‚ β”‚ 0€ β”‚ β”‚ 43.5h β”‚ β”‚ 398€/h β”‚ β”‚ +β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ +β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ +β”‚ [Graph CA Mensuel] [Graph Repartition] β”‚ +β”‚ β”‚ +β”‚ [Graph Heures/Semaine] [Graph CA vs Heures] β”‚ +β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ +``` + +--- + +## Phase 9: VBA Optionnel (Macro Refresh) + +### Step 9.1: Valider le code VBA + +**Outil:** `validate_vba_code` + +**Code:** +```vba +Sub RefreshDashboard() + Application.ScreenUpdating = False + Application.CalculateFull + + Dim ws As Worksheet + Dim pt As PivotTable + + For Each ws In ThisWorkbook.Worksheets + For Each pt In ws.PivotTables + pt.RefreshTable + Next pt + Next ws + + Application.ScreenUpdating = True + MsgBox "Dashboard actualise!", vbInformation +End Sub +``` + +### Step 9.2: Sauvegarder en .xlsm + +**Action manuelle:** +- Fichier > Enregistrer sous > FreelanceDashboard.xlsm (format macro) + +### Step 9.3: Injecter le module VBA + +**Outil:** `inject_vba` + +**Parametres:** +```json +{ + "file_path": "...FreelanceDashboard.xlsm", + "module_name": "mod_Refresh", + "code": "..." +} +``` + +### Step 9.4: Tester la macro + +**Outil:** `run_macro` + +**Parametres:** +```json +{ + "file_path": "...FreelanceDashboard.xlsm", + "macro_name": "RefreshDashboard" +} +``` + +--- + +## Phase 10: Tests et Validation + +### Step 10.1: Verification des donnees + +- [ ] tbl_Clients contient 5 clients +- [ ] tbl_Temps contient 10 entrees +- [ ] tbl_Revenus contient 7 entrees + +### Step 10.2: Verification des KPIs + +| KPI | Valeur Attendue | +|-----|-----------------| +| CA Total | 17 300 € | +| Heures Totales | 43.5 h | +| Taux Horaire | ~397.70 €/h | +| Nb Clients | 5 | + +### Step 10.3: Tests fonctionnels + +- [ ] Les formules se calculent correctement +- [ ] Les TCD se rafraichissent +- [ ] Les graphiques se mettent a jour +- [ ] Les slicers filtrent les donnees +- [ ] La macro fonctionne (si .xlsm) + +### Step 10.4: Ouvrir et verifier visuellement + +**Outil:** `open_in_office` + +```json +{ + "file_path": "...FreelanceDashboard.xlsx" +} +``` + +--- + +## Resume des Actions par Type + +### Automatisables (MCP VBA) + +| Step | Action | Outil MCP | +|------|--------|-----------| +| 2.1 | Donnees Clients | set_worksheet_data | +| 2.2 | Table Clients | create_table | +| 2.3 | Donnees Temps | set_worksheet_data | +| 2.4 | Table Temps | create_table | +| 2.5 | Donnees Revenus | set_worksheet_data | +| 2.6 | Table Revenus | create_table | +| 3.1 | Config | set_worksheet_data | +| 4.1 | Labels Dashboard | set_worksheet_data | +| 4.2 | Formules KPIs | set_worksheet_data | +| 9.1 | Valider VBA | validate_vba_code | +| 9.3 | Injecter VBA | inject_vba | +| 9.4 | Tester macro | run_macro | +| 10.4 | Ouvrir Excel | open_in_office | + +### Manuelles (Excel UI) + +| Step | Action | +|------|--------| +| 1.2 | Creer fichier Excel + onglets | +| 5.x | Tableaux Croises Dynamiques | +| 6.x | Graphiques | +| 7.x | Slicers | +| 8.x | Design et mise en forme | +| 9.2 | Sauvegarder en .xlsm | + +--- + +## Ordre d'Execution Recommande + +``` +AUTOMATISE MANUEL AUTOMATISE + β”‚ β”‚ β”‚ + β–Ό β–Ό β–Ό +[Phase 2-4] β†’ [Phases 5-8] β†’ [Phase 9-10] + Donnees TCD/Graphs VBA + Tables Slicers Tests + Formules Design +``` + +**Workflow optimal:** +1. Agent execute Phases 2-4 (donnees + formules) +2. Utilisateur complete Phases 5-8 dans Excel UI +3. Agent execute Phase 9 (VBA optionnel) +4. Agent execute Phase 10 (tests) + +--- + +## Notes Importantes + +1. **Chemin absolu obligatoire** pour tous les outils MCP: + `C:\Users\alexi\Documents\projects\freelance-dashboard\templates\FreelanceDashboard.xlsx` + +2. **Backup avant modifications:** + Utiliser `backup_vba` avant inject_vba + +3. **Gestion des erreurs:** + - Si formule echoue, verifier syntaxe (guillemets, virgules) + - Si table existe deja, ne pas recreer + +4. **Format dates:** + Les dates doivent etre au format `jj/mm/aaaa` pour Excel FR + +--- + +**Version:** 1.0 +**Date:** 2025-12-30 +**Auteur:** Claude Agent diff --git a/templates/FreelanceDashboard.xlsx b/templates/FreelanceDashboard.xlsx new file mode 100644 index 0000000..0359639 Binary files /dev/null and b/templates/FreelanceDashboard.xlsx differ