- KPIs complets (CA, Heures, Taux, Stats, Objectifs) - Graphiques CA par client + Heures par client - TCD Heures x Client x Projet avec Slicer interactif - Checkboxes dynamiques bien positionnes (E3:E7) - Documentation technique et guides MCP Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
588 lines
14 KiB
Markdown
588 lines
14 KiB
Markdown
# 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
|