CLAUDE GOUVERNANCE :
PS C:\Users\erolg> claude --help
Les commandes de gouvernance :
Comme ton document est bloqué, je ne peux pas en extraire le contenu, mais je peux te donner la liste complète des commandes de gouvernance réellement utiles, structurées pour GRCA100 / Guild4AI© / UGAIA© / AFEES©.
🧭 1. Commandes de gouvernance (niveau Communauté)
Ces commandes définissent qui fait quoi, comment, et avec quels droits.
set-governance-policy— Définir la politique de gouvernance
Structure les règles : souveraineté, conformité, sécurité, rôles, escalade.set-role— Attribuer un rôle
Exemples : Administrateur, Expert IA, Responsable Audit, COMEX, REX.set-permission— Définir les permissions d’un rôle
Lecture, écriture, audit, supervision, publication, accès aux matrices.create-group— Créer un groupe fonctionnel
Exemple : 106 Gouvernance, 105 Audit Cybersécurité, 112 Matrices.assign-group-owner— Nommer le responsable d’un groupe
Garantit la traçabilité et la responsabilité.set-escalation-path— Définir les circuits d’escalade
Technique → RSSI → DPO → COMEX.
🧩 2. Commandes de gouvernance (niveau Rôles & Identités)
Pour gérer les membres, leurs droits et leur cycle de vie.
add-member— Ajouter un membreremove-member— Retirer un membrepromote-member— Monter en rôledemote-member— Diminuer les droitsaudit-member— Vérifier les actions d’un membrelock-account— Geler un compte en cas d’incidentrotate-keys— Rotation des clés / tokens / accès API
🔐 3. Commandes de gouvernance (niveau Sécurité & Conformité)
Pour la souveraineté, la conformité IA‑Act, RGPD, cybersécurité.
enable-logging— Activer la journalisation complète
(Docker → Loki → Grafana → PowerShell → Excel)set-data-classification— Classifier les données
Public / Interne / Sensible / Critique.set-retention-policy— Définir les durées de conservation
Aligné RGPD + IA‑Act.enable-audit-mode— Activer le mode audit
Capture complète des flux, actions, modèles IA, prompts.run-compliance-check— Vérifier la conformité
Matrices GRCA100 / UGAIA / AFEES.set-risk-level— Définir le niveau de risque IA‑Act
Minimal / Limité / Élevé / Critique.
⚙️ 4. Commandes de gouvernance (niveau Technique & Supervision)
Pour orchestrer l’infrastructure souveraine.
deploy-service— Déployer un service
Exemple : FastAPI, Presidio, Loki, Grafana.restart-service— Redémarrer un composantcheck-health— Vérifier l’état des servicesupdate-container— Mettre à jour une image Dockerscan-vulnerabilities— Scanner les vulnérabilitésexport-logs— Exporter les logs pour auditgenerate-report— Générer un rapport Excel / PowerShell
📊 5. Commandes de gouvernance (niveau Flux & Reporting)
Pour piloter les flux entre groupes et produire les livrables COMEX.
define-workflow— Définir un workflow inter‑groupes
Exemple : Incident → Audit → REX → COMEX.map-flows— Cartographier les flux
(Technique, gouvernance, reporting, conformité)publish-dashboard— Publier un tableau de bord
KPIs : conformité, incidents, maturité, risques IA.schedule-review— Programmer une revue de gouvernance
Hebdo / Mensuelle / COMEX.
🧱 6. Commandes de gouvernance (niveau Documentation & Traçabilité)
Pour garantir la cohérence documentaire GRCA100.
create-governance-record— Créer un enregistrement de gouvernanceupdate-governance-record— Mettre à jour une fichearchive-record— Archiver un documentvalidate-matrix— Valider une matrice d’auditpublish-guideline— Publier une directive officielle
🎯 Synthèse ultra‑condensée (format COMEX)
Gouvernance = 6 blocs de commandes :
- Structure (rôles, groupes, permissions)
- Identités (membres, accès, clés)
- Conformité (RGPD, IA‑Act, audit)
- Technique (Docker, logs, supervision)
- Flux (workflows, reporting, dashboards)
- Documentation (matrices, directives, archives)
Matrice complète Commandes × Groupes × Responsables × Risques :
Elle est directement exploitable dans GRCA100 / Guild4AI© / UGAIA© / AFEES©, et structurée pour intégration immédiate dans un tableau Excel, une fiche COMEX ou une infographie A3.
Je te la donne en version premium, opérationnelle, exhaustive, avec une logique Gouvernance → Groupes → Rôles → Risques.
🧩 Matrice complète : Commandes × Groupes × Responsables × Risques
📌 Légende rapide
- Groupe = un des 13 groupes GRCA100
- Responsable = rôle maître du contrôle
- Risque = risque principal si la commande est mal exécutée ou non appliquée
🧱 1. Bloc STRUCTURE (Rôles, groupes, permissions)
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| set-governance-policy | 106 Gouvernance | Responsable Gouvernance | Gouvernance floue, dérives, non‑conformité IA‑Act |
| create-group | 106 Gouvernance | Admin Communauté | Mauvaise segmentation, confusion des flux |
| set-role | 106 Gouvernance | Admin + Gouvernance | Accès inadaptés, escalade non maîtrisée |
| set-permission | 106 Gouvernance | Gouvernance + RSSI | Sur‑exposition des données, fuite d’information |
| assign-group-owner | 106 Gouvernance | Gouvernance | Absence de responsabilité, zones grises |
| set-escalation-path | 106 Gouvernance | Gouvernance + RSSI + DPO | Incidents non traités, retards, sanctions |
🔐 2. Bloc IDENTITÉS & ACCÈS
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| add-member | Tous | Admin | Ajout non contrôlé, infiltration |
| remove-member | Tous | Admin | Accès résiduels, comptes dormants |
| promote-member | 106 / 111 | Gouvernance | Sur‑délégation, privilèges excessifs |
| demote-member | 106 | Gouvernance | Conflits, perte de traçabilité |
| audit-member | 105 Audit | RSSI + Audit | Actions non tracées, fraude interne |
| lock-account | 105 Audit | RSSI | Compromission persistante |
| rotate-keys | 109 Installations Techniques | RSSI + Tech Lead | Clés compromises, accès illégitimes |
🛡️ 3. Bloc SÉCURITÉ & CONFORMITÉ
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| enable-logging | 109 Installations Techniques | Tech Lead | Absence de preuves, impossibilité d’audit |
| set-data-classification | 107 Réglementaire & Juridique | DPO | Traitement illégal, fuite de données |
| set-retention-policy | 107 | DPO | Non‑conformité RGPD, sanctions |
| enable-audit-mode | 105 Audit | RSSI + Audit | Absence de traçabilité, IA non contrôlée |
| run-compliance-check | 112 Matrices | Audit + Gouvernance | Non‑conformité IA‑Act / RGPD |
| set-risk-level | 112 Matrices | Gouvernance + COMEX | Mauvaise catégorisation des systèmes IA |
⚙️ 4. Bloc TECHNIQUE (Docker, API, Monitoring)
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| deploy-service | 109 Installations Techniques | Tech Lead | Déploiement instable, faille de config |
| restart-service | 109 | Tech Lead | Interruption de service |
| check-health | 109 | Tech Lead | Détection tardive des incidents |
| update-container | 109 | Tech Lead | Vulnérabilités non corrigées |
| scan-vulnerabilities | 105 Audit Cybersécurité | RSSI | Exploitation de failles |
| export-logs | 105 / 109 | RSSI + Audit | Perte de preuves, logs incomplets |
| generate-report | 111 COMEX | Gouvernance + Audit | Mauvaise décision stratégique |
🔄 5. Bloc FLUX & REPORTING
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| define-workflow | 108 Ateliers & Conférences | Gouvernance | Processus incohérents, erreurs humaines |
| map-flows | 104 Architectures G10 | Architecte | Flux non maîtrisés, fuite de données |
| publish-dashboard | 111 COMEX | Gouvernance + COMEX | Mauvaise visibilité, décisions biaisées |
| schedule-review | 106 Gouvernance | Gouvernance | Absence de revue, dérive progressive |
📚 6. Bloc DOCUMENTATION & TRAÇABILITÉ
| Commande | Groupe concerné | Responsable | Risques principaux |
|---|---|---|---|
| create-governance-record | 103 Communication | Gouvernance | Absence de preuve documentaire |
| update-governance-record | 103 | Gouvernance | Versions contradictoires |
| archive-record | 103 | Gouvernance + DPO | Perte d’historique, non‑conformité |
| validate-matrix | 112 Matrices | Audit + Gouvernance | Matrices non fiables |
| publish-guideline | 103 Communication | Gouvernance | Mauvaise diffusion, non‑application |
🎯 Synthèse COMEX (ultra‑condensée)
| Domaine | Commandes clés | Risque majeur |
|---|---|---|
| Structure | set-governance-policy, set-role | Gouvernance faible |
| Identités | add/remove-member, rotate-keys | Compromission |
| Sécurité | enable-logging, audit-mode | Absence de preuves |
| Technique | deploy-service, update-container | Vulnérabilités |
| Flux | define-workflow, dashboards | Mauvaise décision |
| Documentation | validate-matrix, archive | Non‑conformité |
Version “Audit Interne” :
C’est‑à‑dire la matrice opérationnelle, pondérée, scorable, RACI‑ready, directement exploitable dans GRCA100 / UGAIA / Guild4AI / AFEES.
C’est la version qui est a utiliser pour :
- piloter un audit interne,
- mesurer la maturité,
- identifier les risques,
- générer un plan d’action,
- produire un reporting COMEX.
Ici la structure premium, prête à injecter dans ton Excel automatisé ou dans ton pipeline PowerShell.
🧩 Matrice “Audit Interne” – Commandes × Groupes × RACI × Risques × Scoring
📌 Colonnes standardisées (format GRCA100 Audit Interne)
Voici la structure exacte que tu vas utiliser :
- Commande
- Groupe
- RACI (R = Responsable, A = Accountable, C = Consulted, I = Informed)
- Risque principal
- Criticité (1–5)
- Probabilité (1–5)
- Score Risque = Criticité × Probabilité
- Preuves attendues
- Actions correctives
- Délai
- Statut
🧱 1. Bloc STRUCTURE
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| set-governance-policy | 106 Gouvernance | R: Gouvernance / A: COMEX / C: RSSI / I: Tous | Gouvernance floue | 5 | 3 | 15 | Politique validée, versionnée | Formaliser, publier, diffuser |
| set-role | 106 | R: Gouvernance | Accès inadaptés | 4 | 3 | 12 | Registre des rôles | Revue trimestrielle |
| set-permission | 106 | R: Gouvernance / C: RSSI | Sur‑exposition | 5 | 4 | 20 | Matrice des permissions | Réduire privilèges |
| assign-group-owner | 106 | R: Gouvernance | Absence de responsabilité | 4 | 2 | 8 | Nomination officielle | Désigner un owner |
🔐 2. Bloc IDENTITÉS & ACCÈS
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| add-member | Tous | R: Admin | Infiltration | 5 | 2 | 10 | Journal d’ajout | Validation double |
| remove-member | Tous | R: Admin | Accès résiduels | 5 | 4 | 20 | Registre des départs | Désactivation immédiate |
| rotate-keys | 109 | R: RSSI | Clés compromises | 5 | 3 | 15 | Preuve rotation | Automatiser rotation |
🛡️ 3. Bloc SÉCURITÉ & CONFORMITÉ
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| enable-logging | 109 | R: Tech Lead / C: RSSI | Absence de preuves | 5 | 4 | 20 | Logs Loki/Grafana | Activer logging complet |
| enable-audit-mode | 105 | R: Audit | IA non contrôlée | 5 | 3 | 15 | Mode audit actif | Activer systématiquement |
| run-compliance-check | 112 | R: Audit | Non‑conformité IA‑Act | 5 | 3 | 15 | Matrices validées | Revue mensuelle |
⚙️ 4. Bloc TECHNIQUE
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| deploy-service | 109 | R: Tech Lead | Déploiement instable | 4 | 3 | 12 | Logs déploiement | Standardiser |
| update-container | 109 | R: Tech Lead | Vulnérabilités | 5 | 4 | 20 | Versioning images | Mettre à jour |
| scan-vulnerabilities | 105 | R: RSSI | Exploitation de failles | 5 | 3 | 15 | Rapport scan | Corriger failles |
🔄 5. Bloc FLUX & REPORTING
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| define-workflow | 108 | R: Gouvernance | Processus incohérents | 4 | 3 | 12 | Workflow documenté | Normaliser |
| publish-dashboard | 111 | R: Gouvernance | Mauvaise décision | 5 | 2 | 10 | Dashboard publié | Vérifier données |
📚 6. Bloc DOCUMENTATION
| Commande | Groupe | RACI | Risque | Crit. | Prob. | Score | Preuves | Actions |
|---|---|---|---|---|---|---|---|---|
| validate-matrix | 112 | R: Audit | Matrices non fiables | 5 | 3 | 15 | Matrice validée | Revue mensuelle |
| archive-record | 103 | R: Gouvernance / DPO | Perte d’historique | 4 | 2 | 8 | Archive versionnée | Archiver |
🎯 Synthèse Audit Interne (format COMEX)
3 commandes critiques (Score ≥ 20)
- set-permission
- remove-member
- enable-logging
- update-container
Risques majeurs
- Sur‑exposition des données
- Absence de preuves d’audit
- Vulnérabilités non corrigées
- Accès résiduels
Actions prioritaires
- Revue des permissions
- Rotation des clés
- Activation logging complet
- Mise à jour des conteneurs
Le mode opérationnel.
🧩 Objectif
Un script PowerShell qui :
- définit la matrice Audit Interne (Commandes × Groupes × RACI × Risques × Scoring)
- calcule automatiquement le Score
- exporte en CSV ou Excel‑ready (pour ton pipeline existant)
🧾 Script PowerShell – Matrice “Audit Interne” automatisée
# ================================ # GRCA100 - Matrice Audit Interne # Commandes × Groupes × RACI × Risques × Scoring
# Erol GIRAUDY v5 2026 avril 17
# Tests fonctionnels valides # ================================ $source = "C:\Users\xxxxx\Matrice_AuditInterne_GRCA100.csv" $clean = "C:\Users\xxxxx\Matrice_AuditInterne_GRCA100_clean.csv" $xlsx = "C:\Users\xxxxx\Matrice_AuditInterne_GRCA100.xlsx" $pdf = "C:\Users\xxxxx\Matrice_AuditInterne_GRCA100_COMEX.pdf" # Matrice d'appartenance Groupe -> Axe radar $axeParCode = @{ '106' = 'Gouvernance' '122' = 'Gouvernance' '109' = 'Sécurité' '120' = 'Sécurité' '112' = 'Conformité' '115' = 'Souveraineté' '118' = 'Résilience' } # Poids pour score global (M1) $poidsAxes = @{ 'Gouvernance' = 0.30 'Sécurité' = 0.25 'Conformité' = 0.20 'Souveraineté' = 0.15 'Résilience' = 0.10 } # ------------------------------------------------------------ # 1. Vérification du fichier source # ------------------------------------------------------------ if (-not (Test-Path $source)) { Write-Host "Fichier introuvable : $source" -ForegroundColor Red exit } # ------------------------------------------------------------ # 2. Import brut + détection colonnes corrompues # ------------------------------------------------------------ $raw = Import-Csv -Path $source if (-not $raw -or $raw.Count -eq 0) { Write-Host "Le CSV source est vide ou illisible." -ForegroundColor Red exit } $colCrit = ($raw[0].PSObject.Properties.Name | Where-Object { $_ -match "Critic" }) $colProb = ($raw[0].PSObject.Properties.Name | Where-Object { $_ -match "Prob" }) $colDelai = ($raw[0].PSObject.Properties.Name | Where-Object { $_ -match "D.l" }) # ------------------------------------------------------------ # 3. Reconstruction propre + correction Commande vide # ------------------------------------------------------------ $compteurCommande = 1 $fixed = foreach ($row in $raw) { $commande = $row.Commande if ([string]::IsNullOrWhiteSpace($commande)) { $commande = ('GRCA100-{0:000}' -f $compteurCommande) $compteurCommande++ } [PSCustomObject]@{ Commande = $commande Groupe = $row.Groupe R = $row.R A = $row.A C = $row.C I = $row.I Risque = $row.Risque Criticite = $row.$colCrit Probabilite = $row.$colProb Preuves = $row.Preuves Actions = $row.Actions Delai = if ($colDelai) { $row.$colDelai } else { $row.'Délai' } Statut = $row.Statut } } # ------------------------------------------------------------ # 4. Export CSV propre en UTF‑8 BOM # ------------------------------------------------------------ $fixed | Export-Csv -Path $clean -NoTypeInformation -Encoding UTF8 $bytes = [System.IO.File]::ReadAllBytes($clean) $bom = [byte[]](0xEF,0xBB,0xBF) [System.IO.File]::WriteAllBytes($clean, $bom + $bytes) Write-Host "CSV nettoyé et réécrit en UTF‑8 BOM :" -ForegroundColor Green Write-Host $clean # ------------------------------------------------------------ # 5. Scoring dynamique # ------------------------------------------------------------ $data = Import-Csv -Path $clean $scored = foreach ($row in $data) { $crit = $row.Criticite -as [int] $prob = $row.Probabilite -as [int] if (-not $crit) { $crit = 0 } if (-not $prob) { $prob = 0 } $score = $crit * $prob $niveau = switch ($score) { {$_ -ge 20} { "Critique"; break } {$_ -ge 15} { "Élevé"; break } default { "Modéré"; break } } $axe = $null if ($row.Groupe -and $axeParCode.ContainsKey($row.Groupe)) { $axe = $axeParCode[$row.Groupe] } [PSCustomObject]@{ Commande = $row.Commande Groupe = $row.Groupe AxeRadar = $axe R = $row.R A = $row.A C = $row.C I = $row.I Risque = $row.Risque Criticite = $crit Probabilite = $prob ScoreRisque = $score NiveauRisque = $niveau Preuves = $row.Preuves Actions = $row.Actions Delai = $row.Delai Statut = $row.Statut } } # ------------------------------------------------------------ # 6. Synthèse console # ------------------------------------------------------------ $nbCritiques = ($scored | Where-Object NiveauRisque -eq 'Critique').Count $nbEleves = ($scored | Where-Object NiveauRisque -eq 'Élevé').Count $nbModeres = ($scored | Where-Object NiveauRisque -eq 'Modéré').Count Write-Host "" Write-Host "=== SYNTHÈSE SCORING ===" -ForegroundColor Cyan Write-Host "Critiques : $nbCritiques" -ForegroundColor Red Write-Host "Élevés : $nbEleves" -ForegroundColor Yellow Write-Host "Modérés : $nbModeres" -ForegroundColor Green Write-Host "" Write-Host "=== ALERTES CRITIQUES ===" -ForegroundColor Red $scored | Where-Object { $_.ScoreRisque -ge 20 } | Format-Table Commande, Risque, ScoreRisque, Actions -AutoSize # ------------------------------------------------------------ # 7. Préparation des données radar + KPI COMEX # ------------------------------------------------------------ $axes = 'Gouvernance','Sécurité','Conformité','Souveraineté','Résilience' $axesScores = @{} foreach ($axe in $axes) { $items = $scored | Where-Object { $_.AxeRadar -eq $axe -and $_.ScoreRisque -gt 0 } if ($items.Count -gt 0) { $axesScores[$axe] = [math]::Round(($items | Measure-Object -Property ScoreRisque -Average).Average,2) } else { $axesScores[$axe] = 0 } } $scoreGlobal = 0 foreach ($axe in $axes) { $scoreGlobal += $axesScores[$axe] * $poidsAxes[$axe] } $scoreGlobal = [math]::Round($scoreGlobal,2) # ------------------------------------------------------------ # 8. Nettoyage Excel / fichiers existants # ------------------------------------------------------------ Get-Process excel -ErrorAction SilentlyContinue | Stop-Process -Force -ErrorAction SilentlyContinue Start-Sleep -Milliseconds 300 if (Test-Path $xlsx) { Remove-Item $xlsx -Force; Start-Sleep -Milliseconds 200 } if (Test-Path $pdf) { Remove-Item $pdf -Force; Start-Sleep -Milliseconds 200 } # ------------------------------------------------------------ # 9. Excel : création des 3 onglets # ------------------------------------------------------------ $excel = New-Object -ComObject Excel.Application $excel.Visible = $false $excel.DisplayAlerts = $false $wb = $excel.Workbooks.Add() $wsAudit = $wb.Worksheets.Item(1) $wsAudit.Name = "AuditInterne" $wsSynth = $wb.Worksheets.Add() $wsSynth.Name = "Synthese COMEX" $wsHeat = $wb.Worksheets.Add() $wsHeat.Name = "Heatmap GRCA100" # ------------------------------------------------------------ # 10. Remplissage AuditInterne # ------------------------------------------------------------ $headers = $scored[0].PSObject.Properties.Name for ($i=0; $i -lt $headers.Count; $i++) { $wsAudit.Cells.Item(1, $i+1).Value2 = "$($headers[$i])" $wsAudit.Cells.Item(1, $i+1).Font.Bold = $true } $rowIndex = 2 foreach ($item in $scored) { $col = 1 foreach ($prop in $headers) { $wsAudit.Cells.Item($rowIndex, $col).Value2 = "$($item.$prop)" $col++ } $rowIndex++ } $wsAudit.UsedRange.EntireColumn.AutoFit() $excel.ActiveWindow.SplitRow = 1 $excel.ActiveWindow.FreezePanes = $true $colScore = ($headers.IndexOf('ScoreRisque') + 1) if ($colScore -gt 0) { $rangeScore = $wsAudit.Range( $wsAudit.Cells.Item(2, $colScore), $wsAudit.Cells.Item($rowIndex-1, $colScore) ) $fc1 = $rangeScore.FormatConditions.Add( [Microsoft.Office.Interop.Excel.XlFormatConditionType]::xlCellValue, [Microsoft.Office.Interop.Excel.XlFormatConditionOperator]::xlGreaterEqual, "20" ) $fc1.Interior.Color = 255 $fc2 = $rangeScore.FormatConditions.Add( [Microsoft.Office.Interop.Excel.XlFormatConditionType]::xlCellValue, [Microsoft.Office.Interop.Excel.XlFormatConditionOperator]::xlGreaterEqual, "15" ) $fc2.Interior.Color = 49407 $fc3 = $rangeScore.FormatConditions.Add( [Microsoft.Office.Interop.Excel.XlFormatConditionType]::xlCellValue, [Microsoft.Office.Interop.Excel.XlFormatConditionOperator]::xlLess, "15" ) $fc3.Interior.Color = 5287936 } # ------------------------------------------------------------ # 11. Synthèse COMEX : KPI + radar # ------------------------------------------------------------ $row = 1 $wsSynth.Cells.Item($row,1).Value2 = "Synthèse COMEX GRCA100" $wsSynth.Cells.Item($row,1).Font.Bold = $true $wsSynth.Cells.Item($row,1).Font.Size = 14 $row += 2 $wsSynth.Cells.Item($row,1).Value2 = "Score global de maturité" $wsSynth.Cells.Item($row,2).Value2 = "$scoreGlobal" $row++ $wsSynth.Cells.Item($row,1).Value2 = "Risques critiques" $wsSynth.Cells.Item($row,2).Value2 = "$nbCritiques" $row++ $wsSynth.Cells.Item($row,1).Value2 = "Risques élevés" $wsSynth.Cells.Item($row,2).Value2 = "$nbEleves" $row++ $wsSynth.Cells.Item($row,1).Value2 = "Risques modérés" $wsSynth.Cells.Item($row,2).Value2 = "$nbModeres" $row += 2 $wsSynth.Cells.Item($row,1).Value2 = "Axe" $wsSynth.Cells.Item($row,2).Value2 = "Score" $wsSynth.Range("A$($row):B$($row)").Font.Bold = $true $row++ $startRadarRow = $row foreach ($axe in $axes) { $wsSynth.Cells.Item($row,1).Value2 = $axe $wsSynth.Cells.Item($row,2).Value2 = "$($axesScores[$axe])" $row++ } $endRadarRow = $row-1 $wsSynth.Columns.Item("A:B").AutoFit() $chartObj = $wsSynth.Shapes.AddChart().Chart $chartObj.ChartType = 81 # xlRadar $chartRange = $wsSynth.Range("A$startRadarRow:B$endRadarRow") $chartObj.SetSourceData($chartRange) $chartObj.HasTitle = $true $chartObj.ChartTitle.Text = "Radar GRCA100 - Maturité" $chartObj.Legend.Delete() $chartObj.Parent.Left = $wsSynth.Columns.Item("D").Left $chartObj.Parent.Top = $wsSynth.Rows.Item(2).Top $chartObj.Parent.Width = 350 $chartObj.Parent.Height = 250 # ------------------------------------------------------------ # 12. Heatmap GRCA100 (version stable) # ------------------------------------------------------------ $wsHeat.Cells.Item(1,1).Value2 = "Groupe" $wsHeat.Cells.Item(1,2).Value2 = "Score moyen" $wsHeat.Cells.Item(1,3).Value2 = "Score max" $wsHeat.Range("A1:C1").Font.Bold = $true $rowH = 2 $groupes = $scored | Where-Object { $_.Groupe } | Select-Object -ExpandProperty Groupe -Unique foreach ($g in $groupes) { $items = $scored | Where-Object { $_.Groupe -eq $g -and $_.ScoreRisque -gt 0 } if ($items.Count -gt 0) { $moy = [math]::Round(($items | Measure-Object -Property ScoreRisque -Average).Average,2) $max = ($items | Measure-Object -Property ScoreRisque -Maximum).Maximum } else { $moy = 0 $max = 0 } $wsHeat.Cells.Item($rowH,1).Value2 = "$g" $wsHeat.Cells.Item($rowH,2).Value2 = "$moy" $wsHeat.Cells.Item($rowH,3).Value2 = "$max" $rowH++ } $wsHeat.UsedRange.EntireColumn.AutoFit() # Heatmap stable (sans ColorScaleCriteria) $rangeHeat = $wsHeat.Range("B2:B$($rowH-1)") if ($rowH -gt 2) { $null = $rangeHeat.FormatConditions.AddColorScale(3) } # ------------------------------------------------------------ # 13. Sauvegarde Excel + export PDF # ------------------------------------------------------------ $wb.SaveAs($xlsx, 51) $wb.ExportAsFixedFormat( 0, $pdf, 0, $true, $false, 1, 2, $false ) $wb.Close() $excel.Quit() Write-Host "" Write-Host "Excel généré avec succès :" -ForegroundColor Green Write-Host $xlsx Write-Host "PDF COMEX généré :" -ForegroundColor Green Write-Host $pdf
------------------------------------------------------------------------
Ce pipeline GRCA100 COMEX est maintenant 100% stable.
------------------------------------------------------------------------Vision dans la console PowerShell.
Ensuite il sera disponible au format Excel et PDF.
Version d'un extrais au format PDFVersion Excel.

