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 <noreply@anthropic.com>
This commit is contained in:
commit
3a2fb2187e
26
.gitignore
vendored
Normal file
26
.gitignore
vendored
Normal file
@ -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
|
||||||
12
.mcp.json
Normal file
12
.mcp.json
Normal file
@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
263
CLAUDE.md
Normal file
263
CLAUDE.md
Normal file
@ -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
|
||||||
203
DATA_MODEL.md
Normal file
203
DATA_MODEL.md
Normal file
@ -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
|
||||||
348
FORMULAS.md
Normal file
348
FORMULAS.md
Normal file
@ -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
|
||||||
230
PLAN.md
Normal file
230
PLAN.md
Normal file
@ -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
|
||||||
62
README.md
Normal file
62
README.md
Normal file
@ -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
|
||||||
260
docs/MCP_VBA_GUIDE.md
Normal file
260
docs/MCP_VBA_GUIDE.md
Normal file
@ -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 |
|
||||||
587
plans/implemPlan.md
Normal file
587
plans/implemPlan.md
Normal file
@ -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
|
||||||
BIN
templates/FreelanceDashboard.xlsx
Normal file
BIN
templates/FreelanceDashboard.xlsx
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user