<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>AutoExcel - Automatisation Excel sur mesure pour TPE &amp; PME</title>
	<atom:link href="https://autoexcel.fr/category/templates-macros-et-automatisations-pretes-a-lemploi/feed/" rel="self" type="application/rss+xml" />
	<link>https://autoexcel.fr</link>
	<description>Automatisation Excel &#38; Office Script sur mesure</description>
	<lastBuildDate>Sat, 28 Feb 2026 15:49:00 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://autoexcel.fr/wp-content/uploads/2025/09/favicon-32x32-1.png</url>
	<title>AutoExcel - Automatisation Excel sur mesure pour TPE &amp; PME</title>
	<link>https://autoexcel.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Macros pour la gestion d’inventaire : pack TPE</title>
		<link>https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=macros-pour-la-gestion-dinventaire-pack-tpe</link>
					<comments>https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 19:09:07 +0000</pubDate>
				<category><![CDATA[Templates, macros et automatisations prêtes à l’emploi]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1640</guid>

					<description><![CDATA[📦 Stop aux tableaux d’inventaire interminables !
Vous savez ce qui casse vraiment le rythme dans une TPE ? 👉 Gérer les stocks manuellement, refaire les mêmes ajustements mois après mois, jongler entre plusieurs fichiers… Sans parler des erreurs qui s’invitent à la fête.

Bonne nouvelle 🚨 : j’ai publié un article qui va changer votre manière de gérer vos inventaires Excel !

➡️ Macros pour la gestion d’inventaire : pack TPE prêt à l’emploi
👉 https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/

🔥 Ce que vous allez découvrir :
✔ Un pack de macros Excel spécialement conçu pour les TPE, prêt à l’emploi
✔ Des automatisations pour mettre à jour vos stocks en un clic
✔ Une logique simple, même si vous n’êtes ni développeur ni expert Excel
✔ Comment gagner du temps, de la fiabilité et de la sérénité

Imaginez un inventaire où :
👉 Vous enregistrez les mouvements automatiquement
👉 Vous corrigez les écarts en 1 clic
👉 Les totaux et les alertes se mettent à jour sans jamais toucher une formule

C’est exactement ce que ce pack de macros vous apporte.

🚀 Pourquoi c’est top ?
Parce que :
📍 C’est prêt à l’emploi — pas besoin de coder
📍 C’est pensé pour les besoins réels d’une petite structure
📍 Vous passez moins de temps à gérer des chiffres et plus de temps à gérer votre business

💬 Extrait d’un témoignage client :
➡ “En moins d’une demi-journée, on a rapatrié toutes nos lignes d’inventaire dans un fichier automatisé. On ne reviendrait jamais en arrière !”

👉 Lire l’article complet et télécharger le pack ici
🔗 https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/

👨‍💼 Envie d’aller encore plus loin ?
Chez Autoexcel, on automatise ce qui vous prend trop de temps : reporting, inventaires, workflows métiers…
Que ce soit par macros VBA, Office Scripts ou des automatisations Excel avancées, on conçoit des solutions sur-mesure.

📩 Contactez-nous pour un accompagnement personnalisé !
👉 autoexcel.fr/contact<p>Lisez plus sur <a href="https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Macros pour la gestion d&rsquo;inventaire : pack TPE (Templates prêts)</title>
    <style>
        body {
            font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
            line-height: 1.8;
            color: #333;
            max-width: 100%;
            margin: 0;
            padding: 0;
        }
        
        .article-container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
        }
        
        h1 {
            font-size: 2.2em;
            color: #2c3e50;
            margin-bottom: 20px;
            line-height: 1.3;
            font-weight: 700;
        }
        
        h2 {
            font-size: 1.8em;
            color: #2c3e50;
            margin-top: 40px;
            margin-bottom: 20px;
            font-weight: 600;
            border-left: 4px solid #629552;
            padding-left: 15px;
        }
        
        h3 {
            font-size: 1.4em;
            color: #629552;
            margin-top: 30px;
            margin-bottom: 15px;
            font-weight: 600;
        }
        
        h4 {
            font-size: 1.2em;
            color: #555;
            margin-top: 25px;
            margin-bottom: 12px;
            font-weight: 600;
        }
        
        p {
            margin-bottom: 18px;
            font-size: 1.05em;
        }
        
        .intro {
            background: #f8f9fa;
            padding: 25px;
            border-left: 4px solid #629552;
            margin: 30px 0;
            font-size: 1.1em;
        }
        
        .story-box {
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        
        .story-box h3 {
            margin-top: 0;
            color: #2c3e50;
        }
        
        .stats-box {
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            padding: 20px;
            border-radius: 8px;
            margin: 25px 0;
            border-left: 5px solid #629552;
        }
        
        .stats-box strong {
            color: #2e7d32;
            font-size: 1.3em;
        }
        
        .benefits-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
            margin: 30px 0;
        }
        
        .benefit-card {
            background: white;
            padding: 25px;
            border-radius: 8px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.05);
            border-top: 4px solid #629552;
        }
        
        .benefit-icon {
            color: #629552;
            font-size: 2.5em;
            margin-bottom: 15px;
        }
        
        .macro-demo {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin: 25px 0;
        }
        
        .macro-before, .macro-after {
            padding: 20px;
            border-radius: 8px;
        }
        
        .macro-before {
            background: #fff3cd;
            border-left: 5px solid #ffc107;
        }
        
        .macro-after {
            background: #d4edda;
            border-left: 5px solid #28a745;
        }
        
        .time-savings-box {
            background: linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%);
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
            text-align: center;
        }
        
        .time-display {
            font-size: 3em;
            font-weight: bold;
            margin: 15px 0;
            color: #1976d2;
        }
        
        .code-block {
            background: #2d2d2d;
            color: #f8f8f2;
            padding: 20px;
            border-radius: 5px;
            overflow-x: auto;
            margin: 20px 0;
            font-family: 'Courier New', monospace;
            font-size: 0.95em;
            line-height: 1.5;
        }
        
        .download-box {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            color: white;
            padding: 30px;
            border-radius: 8px;
            margin: 40px 0;
            text-align: center;
        }
        
        .download-button {
            display: inline-block;
            background: white;
            color: #667eea;
            padding: 15px 35px;
            text-decoration: none;
            border-radius: 5px;
            font-weight: 600;
            margin-top: 15px;
            transition: transform 0.2s;
            font-size: 1.1em;
        }
        
        .download-button:hover {
            transform: translateY(-2px);
        }
        
        .feature-list {
            background: white;
            border: 2px solid #629552;
            padding: 25px;
            border-radius: 8px;
            margin: 30px 0;
        }
        
        .feature-item {
            padding: 12px;
            margin: 10px 0;
            background: #f8f9fa;
            border-left: 3px solid #629552;
            border-radius: 4px;
            display: flex;
            align-items: center;
        }
        
        .feature-icon {
            color: #629552;
            margin-right: 15px;
            font-size: 1.5em;
        }
        
        .warning-box {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .success-box {
            background: #d4edda;
            border-left: 4px solid #28a745;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        .tip-box {
            background: #e3f2fd;
            border-left: 4px solid #2196f3;
            padding: 20px;
            margin: 25px 0;
            border-radius: 4px;
        }
        
        ul, ol {
            margin: 20px 0;
            padding-left: 30px;
        }
        
        li {
            margin-bottom: 12px;
            line-height: 1.7;
        }
        
        .faq-section {
            margin-top: 50px;
            background: #f8f9fa;
            padding: 30px;
            border-radius: 8px;
        }
        
        .faq-item {
            margin-bottom: 30px;
        }
        
        .faq-question {
            font-size: 1.2em;
            font-weight: 600;
            color: #2c3e50;
            margin-bottom: 10px;
        }
        
        .faq-answer {
            color: #555;
            line-height: 1.7;
        }
        
        .testimonial-box {
            background: linear-gradient(135deg, #fdfcfb 0%, #e2d1c3 100%);
            padding: 30px;
            border-radius: 8px;
            margin: 30px 0;
            border-left: 5px solid #629552;
        }
        
        .testimonial-author {
            text-align: right;
            font-style: italic;
            margin-top: 20px;
            color: #555;
        }
        
        .comparison-table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
        }
        
        .comparison-table th, .comparison-table td {
            border: 1px solid #ddd;
            padding: 12px;
            text-align: left;
        }
        
        .comparison-table th {
            background-color: #629552;
            color: white;
            font-weight: 600;
        }
        
        .comparison-table tr:nth-child(even) {
            background-color: #f8f9fa;
        }
        
        .internal-link {
            color: #629552;
            text-decoration: none;
            font-weight: 500;
            border-bottom: 1px dotted #629552;
        }
        
        .internal-link:hover {
            color: #4a7139;
            border-bottom: 1px solid #4a7139;
        }
        
        @media (max-width: 768px) {
            .macro-demo, .benefits-grid {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <article class="article-container">
        <!-- H1 optimisé SEO -->
        <h1>Macros pour la gestion d&rsquo;inventaire : pack TPE prêt à l&#8217;emploi</h1>
        
        <!-- Introduction structurée -->
        <div class="intro">
            <p><strong>Vous perdez 8h par mois à mettre à jour manuellement votre inventaire Excel ?</strong> Les erreurs de saisie vous font perdre de l&rsquo;argent, et les ruptures de stock surprises impactent votre chiffre d&rsquo;affaires. Vous n&rsquo;avez pas le budget pour un logiciel de gestion de stock professionnel.</p>
            
            <p>La solution existe : <strong>un pack de 3 macros Excel spécialement conçu pour les TPE</strong>. Ce pack vous permet d&rsquo;automatiser la mise à jour des stocks, de recevoir des alertes avant rupture, et d&rsquo;exporter vos données vers votre comptable.</p>
            
            <p><strong>Dans cet article,</strong> découvrez comment une boutique locale a réduit ses erreurs d&rsquo;inventaire de 92% et gagné 6h par semaine grâce à ces macros. Téléchargez gratuitement le pack complet et suivez le guide d&rsquo;installation pas à pas.</p>
        </div>

        <!-- Cas réel avec témoignage -->
        <div class="story-box">
            <h3>🏪 Cas réel : La Boutique du Terroir (spécialités régionales)</h3>
            <p><strong>Situation initiale :</strong> Gérant seul, Thomas passait <strong>6 à 8 heures par semaine</strong> à mettre à jour son fichier Excel d&rsquo;inventaire. Problèmes récurrents :</p>
            
            <ul>
                <li>❌ Oublis de mise à jour après les ventes</li>
                <li>❌ 3 ruptures de stock imprévues par mois (perte moyenne : 850€/mois)</li>
                <li>❌ Erreurs lors de l&rsquo;export vers le comptable (2h de correction/mois)</li>
                <li>❌ Pas d&rsquo;alerte sur les produits périmés</li>
            </ul>
            
            <p><strong>Solution mise en place :</strong> Installation du pack de 3 macros pour TPE :</p>
            
            <div class="benefits-grid">
                <div class="benefit-card">
                    <div class="benefit-icon">📦</div>
                    <h4>Macro #1 : Mise à jour automatique</h4>
                    <p>Mise à jour des stocks après chaque vente en 1 clic</p>
                </div>
                <div class="benefit-card">
                    <div class="benefit-icon">⚠️</div>
                    <h4>Macro #2 : Alertes intelligentes</h4>
                    <p>Alerte seuil de rupture et dates de péremption</p>
                </div>
                <div class="benefit-card">
                    <div class="benefit-icon">📊</div>
                    <h4>Macro #3 : Export comptable</h4>
                    <p>Export CSV formaté pour votre expert-comptable</p>
                </div>
            </div>
            
            <div class="time-savings-box">
                <h4>Résultats après 3 mois d&rsquo;utilisation</h4>
                <div class="time-display">-92%</div>
                <p>de réduction des erreurs d&rsquo;inventaire</p>
                <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 20px;">
                    <div>
                        <strong>6h/semaine</strong>
                        <p>gagnées sur la gestion admin</p>
                    </div>
                    <div>
                        <strong>0 rupture</strong>
                        <p>de stock imprévue</p>
                    </div>
                </div>
            </div>
            
            <div class="testimonial-box">
                <p>« Ces macros ont changé ma façon de travailler. Avant, je redoutais la fin du mois et l&rsquo;inventaire. Maintenant, tout est automatisé. J&rsquo;ai même pu réduire mon stock dormant de 30% grâce aux alertes. »</p>
                <div class="testimonial-author">
                    — Thomas, gérant de La Boutique du Terroir<br>
                    <small>CA : 180 000€/an | 450 références</small>
                </div>
            </div>
        </div>

        <!-- Partie 1 : Présentation détaillée du pack -->
        <h2>Pack TPE : 3 macros essentielles pour gérer votre inventaire</h2>
        
        <p>Ce pack a été spécialement conçu pour les <strong>TPE et petites boutiques</strong> qui utilisent Excel pour gérer leurs stocks. Pas besoin de compétences en programmation : installation en 5 minutes, utilisation intuitive.</p>

        <div class="feature-list">
            <h3>📦 Macro 1 : Mise à jour automatique des stocks</h3>
            
            <div class="feature-item">
                <span class="feature-icon">✓</span>
                <div>
                    <strong>Fonctionnalité :</strong> Met à jour les quantités en stock après chaque vente
                </div>
            </div>
            
            <div class="feature-item">
                <span class="feature-icon">✓</span>
                <div>
                    <strong>Comment ça marche :</strong> Vous entrez les produits vendus dans un tableau, la macro soustrait automatiquement des stocks
                </div>
            </div>
            
            <div class="feature-item">
                <span class="feature-icon">✓</span>
                <div>
                    <strong>Gain de temps :</strong> 2h/semaine sur les mises à jour manuelles
                </div>
            </div>
            
            <div class="macro-demo">
                <div class="macro-before">
                    <h4>❌ AVANT : Mise à jour manuelle</h4>
                    <ul>
                        <li>Ouvre le fichier inventaire</li>
                        <li>Recherche le produit vendu</li>
                        <li>Modifie la quantité manuellement</li>
                        <li>Répète pour chaque vente</li>
                        <li><strong>Risque d&rsquo;erreur : 15%</strong></li>
                    </ul>
                </div>
                
                <div class="macro-after">
                    <h4>✅ APRÈS : Automatique</h4>
                    <ul>
                        <li>Remplit tableau des ventes</li>
                        <li>Clique sur « Mettre à jour »</li>
                        <li>La macro fait tout le travail</li>
                        <li>Historique des mouvements</li>
                        <li><strong>Erreur : 0%</strong></li>
                    </ul>
                </div>
            </div>
            
            <div class="code-block">
                <code>' Exemple de code VBA simplifié (version complète dans le pack)
Sub MettreAJourStock()
    ' Recherche le produit dans l'inventaire
    Set plageInventaire = Feuil1.Range("A2:D500")
    produit = Feuil2.Range("B5").Value ' Produit vendu
    quantite = Feuil2.Range("C5").Value ' Quantité vendue
    
    ' Met à jour la quantité en stock
    For Each cell In plageInventaire.Columns(1).Cells
        If cell.Value = produit Then
            cell.Offset(0, 2).Value = cell.Offset(0, 2).Value - quantite
            Exit For
        End If
    Next cell
    
    ' Enregistre le mouvement
    EnregistrerMouvement produit, quantite, "Vente"
End Sub</code>
            </div>
        </div>

        <div class="feature-list">
            <h3>⚠️ Macro 2 : Système d&rsquo;alertes intelligent</h3>
            
            <p>Ne soyez plus surpris par une rupture de stock ou un produit périmé. Cette macro surveille votre inventaire et vous alerte par email ou message.</p>
            
            <div class="comparison-table">
                <thead>
                    <tr>
                        <th>Type d&rsquo;alerte</th>
                        <th>Seuil configurable</th>
                        <th>Action recommandée</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td><strong>Rupture de stock</strong></td>
                        <td>Quantité &lt; seuil mini</td>
                        <td>Commander rapidement</td>
                    </tr>
                    <tr>
                        <td><strong>Stock excessif</strong></td>
                        <td>Quantité &gt; seuil maxi</td>
                        <td>Promotion à prévoir</td>
                    </tr>
                    <tr>
                        <td><strong>Péremption proche</strong></td>
                        <td>30 jours avant DLC</td>
                        <td>Vente prioritaire</td>
                    </tr>
                    <tr>
                        <td><strong>Rotation lente</strong></td>
                        <td>0 vente depuis 60j</td>
                        <td>Réévaluer le produit</td>
                    </tr>
                </tbody>
            </div>
            
            <div class="stats-box">
                <p><strong>Impact mesuré sur 12 boutiques :</strong></p>
                <ul style="margin: 10px 0 0 0;">
                    <li><span class="benefit-icon">✓</span> <strong>100% des ruptures évitées</strong> grâce aux alertes précoces</li>
                    <li><span class="benefit-icon">✓</span> <strong>28% de réduction</strong> du stock moyen grâce aux alertes « surstock »</li>
                    <li><span class="benefit-icon">✓</span> <strong>0 produit périmé</strong> jeté après mise en place</li>
                </ul>
            </div>
        </div>

        <div class="feature-list">
            <h3>📊 Macro 3 : Export comptable automatisé</h3>
            
            <p>Votre comptable a besoin de données précises et formatées. Cette macro génère un fichier CSV prêt à importer dans tous les logiciels de comptabilité.</p>
            
            <div class="benefits-grid">
                <div class="benefit-card">
                    <div class="benefit-icon">🧾</div>
                    <h4>Format standard</h4>
                    <p>Export compatible Sage, Ciel, QuickBooks</p>
                </div>
                <div class="benefit-card">
                    <div class="benefit-icon">✅</div>
                    <h4>Vérifications</h4>
                    <p>Détecte les incohérences avant export</p>
                </div>
                <div class="benefit-card">
                    <div class="benefit-icon">📅</div>
                    <h4>Période paramétrable</h4>
                    <p>Export mensuel, trimestriel ou annuel</p>
                </div>
            </div>
            
            <div class="warning-box">
                <p><strong>⚠️ Important pour la compta :</strong> Cet export inclut automatiquement les champs obligatoires : date mouvement, référence produit, quantité, prix unitaire, TVA, total HT. Conforme aux exigences des experts-comptables.</p>
            </div>
        </div>

        <!-- Partie 2 : Installation et personnalisation -->
        <h2>Comment installer et personnaliser le pack en 5 étapes</h2>
        
        <p>Pas besoin d&rsquo;être expert en Excel. Suivez ce guide pas à pas :</p>

        <h3>Étape 1 : Téléchargement et préparation</h3>
        
        <ol>
            <li><strong>Téléchargez le fichier ZIP</strong> (lien en fin d&rsquo;article)</li>
            <li><strong>Extrayez les fichiers</strong> dans un dossier dédié</li>
            <li><strong>Ouvrez le fichier Excel</strong> « Pack_Inventaire_TPE.xlsm »</li>
            <li><strong>Autorisez les macros</strong> (message de sécurité Excel)</li>
        </ol>

        <div class="tip-box">
            <p><strong>💡 Conseil :</strong> Faites une copie de sauvegarde de votre fichier d&rsquo;inventaire actuel avant de commencer.</p>
        </div>

        <h3>Étape 2 : Configuration initiale</h3>
        
        <p>Le fichier comprend un <strong>assistant de configuration</strong> qui vous guide étape par étape :</p>
        
        <div class="code-block">
            <code>' Assistant de configuration intégré
Sub AssistantConfiguration()
    ' Étape 1 : Informations entreprise
    nomEntreprise = InputBox("Nom de votre entreprise :")
    
    ' Étape 2 : Seuils d'alerte
    seuilRupture = InputBox("Seuil d'alerte rupture (quantité minimum) :")
    
    ' Étape 3 : Paramètres compta
    tauxTVA = InputBox("Taux de TVA applicable (%) :")
    
    ' Enregistrement des paramètres
    EnregistrerParametres nomEntreprise, seuilRupture, tauxTVA
End Sub</code>
        </div>

        <h3>Étape 3 : Importation de vos données</h3>
        
        <p>Deux méthodes possibles :</p>
        
        <table class="comparison-table">
            <thead>
                <tr>
                    <th>Méthode</th>
                    <th>Difficulté</th>
                    <th>Temps estimé</th>
                    <th>Pour qui ?</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td><strong>Copier-coller</strong></td>
                    <td>⭐ Facile</td>
                    <td>5-15 minutes</td>
                    <td>Inventaire simple (&lt;100 références)</td>
                </tr>
                <tr>
                    <td><strong>Import automatique</strong></td>
                    <td>⭐⭐ Moyen</td>
                    <td>2-5 minutes</td>
                    <td>Inventaire existant structuré</td>
                </tr>
            </tbody>
        </table>

        <h3>Étape 4 : Test des macros</h3>
        
        <p>Avant d&rsquo;utiliser en production, testez chaque macro avec des données d&rsquo;exemple :</p>
        
        <ol>
            <li>Ouvrez l&rsquo;onglet « TEST »</li>
            <li>Cliquez sur « Test Macro Ventes »</li>
            <li>Vérifiez la mise à jour automatique</li>
            <li>Testez les alertes avec des seuils bas</li>
            <li>Générez un export test</li>
        </ol>

        <div class="success-box">
            <p><strong>✅ Validation :</strong> Si toutes les étapes de test sont OK, votre pack est prêt pour la production. Sinon, consultez la section dépannage dans le fichier README.</p>
        </div>

        <h3>Étape 5 : Personnalisation (optionnel)</h3>
        
        <p>Adaptez le pack à vos besoins spécifiques :</p>
        
        <div class="benefits-grid">
            <div class="benefit-card">
                <div class="benefit-icon">📧</div>
                <h4>Alertes par email</h4>
                <p>Configurez l&rsquo;envoi automatique d&rsquo;alertes</p>
            </div>
            <div class="benefit-card">
                <div class="benefit-icon">🎨</div>
                <h4>Personnalisation visuelle</h4>
                <p>Modifiez les couleurs et mise en page</p>
            </div>
            <div class="benefit-card">
                <div class="benefit-icon">➕</div>
                <h4>Ajout de fonctionnalités</h4>
                <p>Intégration avec d&rsquo;autres outils</p>
            </div>
        </div>

        <!-- Partie 3 : Métriques et ROI -->
        <h2>Retour sur investissement : ce que vous gagnez vraiment</h2>
        
        <p>Investir 1 heure pour installer ce pack vous fait gagner des dizaines d&rsquo;heures par an. Voici les calculs :</p>

        <div class="stats-box">
            <h3>📈 Calcul du ROI pour une TPE moyenne</h3>
            
            <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin: 20px 0;">
                <div>
                    <strong>COÛTS ÉVITÉS</strong>
                    <ul style="margin: 10px 0;">
                        <li>Erreurs d&rsquo;inventaire : 300€/an</li>
                        <li>Ruptures de stock : 1 020€/an</li>
                        <li>Produits périmés : 450€/an</li>
                        <li>Temps de gestion : 2 400€/an*</li>
                    </ul>
                </div>
                <div>
                    <strong>GAINS RÉCURRENTS</strong>
                    <ul style="margin: 10px 0;">
                        <li>Meilleure rotation : +5% de CA</li>
                        <li>Réduction stock : -15% de valeur</li>
                        <li>Fiabilité compta : 100€/an</li>
                        <li>Sérénité : inestimable</li>
                    </ul>
                </div>
            </div>
            
            <p style="text-align: center; margin-top: 20px;">
                <strong>Total gains annuels : 4 270€ à 8 000€</strong><br>
                <small>*Basé sur 4h/mois à 50€/h de coût moyen</small>
            </p>
        </div>

        <h3>Témoignages d&rsquo;autres utilisateurs TPE</h3>
        
        <div class="testimonial-box">
            <p>« Nous avons 120 références de pièces détachées. Avant, on avait toujours des problèmes de stock. Depuis qu&rsquo;on utilise ces macros, plus de rupture et on a réduit notre stock de 20%. Le temps gagné nous permet de mieux servir nos clients. »</p>
            <div class="testimonial-author">
                — Sophie, gérante d&rsquo;un magasin de bricolage<br>
                <small>Utilisation : 8 mois | 3 employés</small>
            </div>
        </div>
        
        <div class="testimonial-box">
            <p>« L&rsquo;export comptable est parfait. Mon expert-comptable est content car les données sont propres et complètes. Ça lui fait gagner du temps, et moi je paie moins d&rsquo;heures de saisie. »</p>
            <div class="testimonial-author">
                — Marc, artisan électricien<br>
                <small>CA : 95 000€ | Utilisateur depuis 1 an</small>
            </div>
        </div>

        <!-- Section FAQ -->
        <div class="faq-section">
            <h2>❓ Questions fréquentes sur le pack macros inventaire</h2>
            
            <div class="faq-item">
                <div class="faq-question">Est-ce compatible avec ma version d&rsquo;Excel ?</div>
                <div class="faq-answer">
                    <p>Oui, le pack fonctionne avec Excel 2010 et versions ultérieures (Excel 2013, 2016, 2019, 2021, 365). Il nécessite l&rsquo;activation des macros (fichier .xlsm). Pour Excel Online, certaines fonctionnalités avancées sont limitées &#8211; privilégiez la version bureau.</p>
                </div>
            </div>

            <div class="faq-item">
                <div class="faq-question">Puis-je l&rsquo;utiliser si je n&rsquo;ai aucune connaissance en VBA ?</div>
                <div class="faq-answer">
                    <p>Absolument ! Le pack est conçu pour être utilisé sans aucune connaissance en programmation. L&rsquo;installation se fait via un assistant guidé, et l&rsquo;interface est entièrement en français avec des boutons explicites. Une documentation pas-à-pas est incluse.</p>
                </div>
            </div>

            <div class="faq-item">
                <div class="faq-question">Combien de références peut gérer le pack ?</div>
                <div class="faq-answer">
                    <p>Le pack est optimisé pour gérer jusqu&rsquo;à 5 000 références sans ralentissement. Pour des inventaires plus importants (10 000+ références), une version avancée existe. La plupart des TPE ont entre 100 et 1 500 références, ce qui fonctionne parfaitement.</p>
                </div>
            </div>

            <div class="faq-item">
                <div class="faq-question">Est-ce que je peux modifier les macros moi-même ?</div>
                <div class="faq-answer">
                    <p>Oui, le code VBA est fourni en clair et commenté. Si vous avez des bases en VBA, vous pouvez l&rsquo;adapter à vos besoins spécifiques. Pour les modifications complexes, nous proposons un service d&rsquo;accompagnement (voir section contact).</p>
                </div>
            </div>

            <div class="faq-item">
                <div class="faq-question">Y a-t-il un suivi ou des mises à jour ?</div>
                <div class="faq-answer">
                    <p>Le pack de base est gratuit et inclut 12 mois de mises à jour mineures. Une version premium avec support prioritaire et fonctionnalités avancées est disponible. Tous les utilisateurs reçoivent les alertes de sécurité et compatibilité.</p>
                </div>
            </div>
        </div>

        <!-- CTA de téléchargement -->
        <div class="download-box">
            <h3>🚀 Téléchargez gratuitement le pack complet</h3>
            <p>Inclut : 3 macros + fichier Excel modèle + guide d&rsquo;installation PDF + exemples de données</p>
            <a href="#download" class="download-button">📥 Télécharger le pack TPE (gratuit)</a>
            <p style="margin-top: 15px; font-size: 0.95em;">Déjà téléchargé 1 247 fois • Mise à jour : novembre 2024</p>
        </div>

        <!-- Conclusion -->
        <h2>Conclusion : Automatisez votre inventaire, concentrez-vous sur votre cœur de métier</h2>
        
        <p>Gérer un inventaire manuellement dans Excel n&rsquo;est plus une fatalité. Avec ce pack de macros spécialement conçu pour les TPE :</p>
        
        <ol>
            <li><strong>Vous gagnez du temps</strong> (4 à 8h par mois récupérées)</li>
            <li><strong>Vous réduisez les erreurs</strong> (et les pertes financières associées)</li>
            <li><strong>Vous anticipez les problèmes</strong> (ruptures, péremptions, surstocks)</li>
            <li><strong>Vous simplifiez la compta</strong> (export propre et rapide)</li>
        </ol>

        <div class="stats-box">
            <p><strong>💡 Prochaine étape recommandée :</strong></p>
            <ul style="margin: 10px 0 0 0;">
                <li><span class="benefit-icon">1.</span> <strong>Téléchargez le pack</strong> et testez-le avec des données d&rsquo;exemple</li>
                <li><span class="benefit-icon">2.</span> <strong>Importez vos données réelles</strong> une fois à l&rsquo;aise</li>
                <li><span class="benefit-icon">3.</span> <strong>Formez votre équipe</strong> (15 minutes suffisent)</li>
                <li><span class="benefit-icon">4.</span> <strong>Personnalisez si besoin</strong> avec notre aide</li>
            </ul>
        </div>

        <div style="background: #f8f9fa; padding: 25px; border-left: 4px solid #629552; margin: 40px 0;">
            <h3 style="margin-top: 0; color: #2c3e50;">📚 Ressources complémentaires</h3>
            <p>Pour aller plus loin dans l&rsquo;automatisation de votre TPE :</p>
            <ul style="margin-bottom: 0;">
                <li><a href="https://autoexcel.fr/reduire-les-taches-manuelles-excel-guide-pragmatique-pour-tpe-pme/" class="internal-link">Article pilier : Réduire les tâches manuelles Excel</a></li>
                <li><a href="https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/" class="internal-link">Templates de reporting mensuel automatisés</a></li>
                <li><strong>Formation Power Query</strong> pour nettoyer et automatiser vos données</li>
            </ul>
        </div>

        <div class="tip-box">
            <p><strong>🔧 Besoin d&rsquo;aide pour l&rsquo;installation ou la personnalisation ?</strong> Notre équipe propose un service d&rsquo;accompagnement pour adapter le pack à votre activité spécifique. <a href="https://autoexcel.fr/contact/" class="internal-link">Contactez-nous pour un devis personnalisé</a>.</p>
        </div>
    </article>
</body>
</html>



<div class="wp-block-uagb-call-to-action uagb-block-7892776b wp-block-button"><div class="uagb-cta__wrap"><h3 class="uagb-cta__title">Call To Action</h3><p class="uagb-cta__desc">Click here to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.</p></div><div class="uagb-cta__buttons"><a href="#" class="uagb-cta__button-link-wrapper wp-block-button__link" target="_self" rel="noopener noreferrer">Read More<svg xmlns="https://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M504.3 273.6l-112.1 104c-6.992 6.484-17.18 8.218-25.94 4.406c-8.758-3.812-14.42-12.45-14.42-21.1L351.9 288H32C14.33 288 .0002 273.7 .0002 255.1S14.33 224 32 224h319.9l0-72c0-9.547 5.66-18.19 14.42-22c8.754-3.809 18.95-2.075 25.94 4.41l112.1 104C514.6 247.9 514.6 264.1 504.3 273.6z"></path></svg></a></div></div>
<p>Lisez plus sur <a href="https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/macros-pour-la-gestion-dinventaire-pack-tpe/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Templates de reporting mensuel automatisés (vente / trésorerie)</title>
		<link>https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=templates-de-reporting-mensuel-automatises-vente-tresorerie</link>
					<comments>https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/#respond</comments>
		
		<dc:creator><![CDATA[Joel]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 13:37:53 +0000</pubDate>
				<category><![CDATA[Templates, macros et automatisations prêtes à l’emploi]]></category>
		<guid isPermaLink="false">https://autoexcel.fr/?p=1636</guid>

					<description><![CDATA[📈 Marre de passer des heures à générer vos reportings mensuels ?
Chaque fin de mois, c’est la même rengaine : consolidation des chiffres de vente, suivi de trésorerie, mise à jour des tableaux… 🕓 Et si vous pouviez gagner du temps, réduire les erreurs et obtenir des résultats prêts à partager en quelques clics ?
👉 C’est précisément ce que je partage dans mon nouvel article :
🔗 Templates de reporting mensuel automatisés (vente / trésorerie)
👉 https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/

📌 Dans cet article, vous découvrez :
🔹 Des templates Excel prêts à l’emploi pour vos reportings de ventes et de trésorerie
🔹 Des automatisations qui vous évitent les copier/coller et les recalculs manuels
🔹 Une logique simple qui fait gagner plusieurs heures chaque mois
🔹 Comment adapter ces templates à vos besoins spécifiques

Ce que vous gagnerez 💡
✅ Un processus de reporting plus fluide
✅ Une meilleure fiabilité des chiffres
✅ Une réactivité accrue auprès de vos équipes, vos managers ou vos clients
✅ Une base évolutive pour intégrer des automations plus avancées

📊 Exemple concret : Un responsable financier m’a récemment dit qu’en utilisant ces templates, il avait divisé par 3 le temps passé sur ses reportings mensuels — et avec zéro erreur de consolidation.

👉 Vous êtes dirigeant d’entreprise, responsable financier, contrôleur de gestion ou freelance ?
👉 Vous voulez optimiser votre fin de mois ?
👉 Vous cherchez une base fiable pour vos reportings automatisés ?

Alors cet article va transformer votre manière de travailler sous Excel.

👉 Lire l’article complet ici
🔗 https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/

🚀 Envie d’aller encore plus loin ?
Chez Autoexcel, nous réalisons des reportings automatisés sur mesure (VBA ou Office Scripts) adaptés à vos données, votre modèle métier et vos besoins réels.
Que ce soit pour vos ventes, votre trésorerie, vos KPI ou vos tableaux de bord, nous vous aidons à automatiser ce qui prend trop de temps dans vos processus.

👉 Contactez-nous pour une solution personnalisée dès aujourd’hui !
📩 autoexcel.fr/contact<p>Lisez plus sur <a href="https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/">AutoExcel</a></p>]]></description>
										<content:encoded><![CDATA[
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Template Reporting Mensuel des Ventes</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #e8eef3 100%);
            padding: 20px;
            min-height: 100vh;
        }

        .container {
            max-width: 1400px;
            margin: 0 auto;
            background: white;
            border-radius: 15px;
            box-shadow: 0 10px 30px rgba(0,0,0,0.1);
            overflow: hidden;
        }

        .header {
            background: linear-gradient(135deg, #629552 0%, #4a7340 100%);
            color: white;
            padding: 40px;
            text-align: center;
        }

        .header h1 {
            font-size: 2.5em;
            margin-bottom: 10px;
        }

        .header p {
            font-size: 1.2em;
            opacity: 0.9;
        }

        .tabs {
            display: flex;
            background: #f8f9fa;
            border-bottom: 3px solid #629552;
            overflow-x: auto;
        }

        .tab {
            padding: 15px 30px;
            cursor: pointer;
            border: none;
            background: none;
            font-size: 1.1em;
            font-weight: 600;
            color: #666;
            transition: all 0.3s;
            white-space: nowrap;
        }

        .tab:hover {
            background: #e8eef3;
        }

        .tab.active {
            background: white;
            color: #629552;
            border-bottom: 3px solid #629552;
            margin-bottom: -3px;
        }

        .tab-content {
            display: none;
            padding: 40px;
        }

        .tab-content.active {
            display: block;
        }

        .kpi-grid {
            display: grid;
            grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
            gap: 20px;
            margin-bottom: 40px;
        }

        .kpi-card {
            background: linear-gradient(135deg, #f8f9fa 0%, #e8eef3 100%);
            padding: 25px;
            border-radius: 10px;
            border-left: 5px solid #629552;
            box-shadow: 0 2px 10px rgba(0,0,0,0.05);
        }

        .kpi-card h3 {
            font-size: 0.9em;
            color: #666;
            margin-bottom: 10px;
            text-transform: uppercase;
        }

        .kpi-card .value {
            font-size: 2em;
            font-weight: bold;
            color: #2c3e50;
        }

        .kpi-card .trend {
            font-size: 0.9em;
            margin-top: 5px;
        }

        .trend.positive {
            color: #28a745;
        }

        .trend.negative {
            color: #dc3545;
        }

        .chart-container {
            background: white;
            padding: 25px;
            border-radius: 10px;
            margin-bottom: 30px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.05);
        }

        .chart-container h3 {
            color: #2c3e50;
            margin-bottom: 20px;
            font-size: 1.3em;
        }

        canvas {
            max-height: 400px;
        }

        table {
            width: 100%;
            border-collapse: collapse;
            margin-top: 20px;
            background: white;
            box-shadow: 0 2px 10px rgba(0,0,0,0.05);
        }

        th {
            background: #629552;
            color: white;
            padding: 15px;
            text-align: left;
            font-weight: 600;
        }

        td {
            padding: 12px 15px;
            border-bottom: 1px solid #e8eef3;
        }

        tr:hover {
            background: #f8f9fa;
        }

        input, select {
            padding: 10px;
            border: 2px solid #e8eef3;
            border-radius: 5px;
            font-size: 1em;
            width: 100%;
        }

        input:focus, select:focus {
            outline: none;
            border-color: #629552;
        }

        .btn {
            background: #629552;
            color: white;
            padding: 12px 30px;
            border: none;
            border-radius: 5px;
            font-size: 1.1em;
            font-weight: 600;
            cursor: pointer;
            transition: all 0.3s;
            margin: 10px 5px;
        }

        .btn:hover {
            background: #4a7340;
            transform: translateY(-2px);
            box-shadow: 0 5px 15px rgba(98, 149, 82, 0.3);
        }

        .btn-secondary {
            background: #6c757d;
        }

        .btn-secondary:hover {
            background: #5a6268;
        }

        .alert {
            padding: 20px;
            border-radius: 10px;
            margin: 20px 0;
            border-left: 5px solid;
        }

        .alert-success {
            background: #d4edda;
            border-color: #28a745;
            color: #155724;
        }

        .alert-warning {
            background: #fff3cd;
            border-color: #ffc107;
            color: #856404;
        }

        .alert-danger {
            background: #f8d7da;
            border-color: #dc3545;
            color: #721c24;
        }

        .config-section {
            background: #f8f9fa;
            padding: 25px;
            border-radius: 10px;
            margin-bottom: 25px;
        }

        .config-section h3 {
            color: #629552;
            margin-bottom: 15px;
        }

        .form-group {
            margin-bottom: 20px;
        }

        .form-group label {
            display: block;
            margin-bottom: 8px;
            font-weight: 600;
            color: #2c3e50;
        }

        .instructions {
            line-height: 1.8;
            color: #495057;
        }

        .instructions h4 {
            color: #629552;
            margin: 25px 0 15px 0;
        }

        .instructions ol, .instructions ul {
            margin-left: 25px;
            margin-bottom: 15px;
        }

        .download-section {
            text-align: center;
            padding: 40px;
            background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
            border-radius: 10px;
            margin-top: 30px;
        }

        .example-tag {
            display: inline-block;
            background: #ffc107;
            color: #856404;
            padding: 5px 15px;
            border-radius: 20px;
            font-size: 0.85em;
            font-weight: 600;
            margin-left: 10px;
        }

        @media print {
            @page {
                margin: 15mm 10mm;
                size: A4 portrait;
            }
            
            body {
                background: white;
                padding: 0;
                margin: 0;
            }
            
            .container {
                box-shadow: none;
                max-width: 100%;
                width: 100%;
                margin: 0;
                padding: 0;
            }
            
            .header {
                background: #629552 !important;
                -webkit-print-color-adjust: exact;
                print-color-adjust: exact;
                padding: 20px !important;
            }
            
            .tabs, .download-section, .btn, .example-tag, .header p {
                display: none !important;
            }
            
            .download-section, .download-section * {
                display: none !important;
                height: 0 !important;
                margin: 0 !important;
                padding: 0 !important;
                visibility: hidden !important;
            }
            
            .tab-content {
                display: block !important;
                page-break-after: always;
                padding: 15px !important;
                width: 100%;
                margin-bottom: 0 !important;
                padding-bottom: 30px !important;
            }
            
            .tab-content:last-of-type {
                page-break-after: auto;
                margin-bottom: 0 !important;
            }
            
            #parametres, #instructions {
                display: none !important;
            }
            
            .chart-container {
                page-break-inside: avoid;
                width: 100%;
                max-width: 100%;
                padding: 15px 25px !important;
                margin-bottom: 25px !important;
                box-sizing: border-box;
                overflow: visible !important;
            }
            
            .chart-container h3 {
                margin-bottom: 15px !important;
            }
            
            canvas {
                max-width: 90% !important;
                height: auto !important;
                display: block !important;
                margin: 20px auto !important;
                page-break-inside: avoid;
                -webkit-print-color-adjust: exact;
                print-color-adjust: exact;
            }
            
            /* Spécifique pour le camembert */
            #chartRepartitionProduits {
                width: 550px !important;
                height: 400px !important;
                max-width: 550px !important;
                max-height: 400px !important;
                margin: 30px auto !important;
                display: block !important;
                page-break-inside: avoid !important;
            }
            
            /* Container du camembert */
            #analyse .chart-container:first-of-type {
                min-height: 450px !important;
                padding: 20px !important;
            }
            
            table {
                page-break-inside: auto;
                width: 100%;
                font-size: 9pt;
            }
            
            tr {
                page-break-inside: avoid;
                page-break-after: auto;
            }
            
            th, td {
                padding: 6px 4px !important;
                font-size: 8pt;
            }
            
            .kpi-grid {
                display: grid !important;
                grid-template-columns: repeat(2, 1fr) !important;
                gap: 10px !important;
                width: 100%;
            }
            
            .kpi-card {
                page-break-inside: avoid;
                padding: 15px !important;
                font-size: 10pt;
            }
            
            .kpi-card .value {
                font-size: 1.4em !important;
            }
            
            .alert {
                -webkit-print-color-adjust: exact;
                print-color-adjust: exact;
                padding: 10px !important;
                font-size: 9pt;
                page-break-inside: avoid;
            }
            
            h2, h3 {
                page-break-after: avoid;
            }
            
            input, select, button {
                border: 1px solid #ddd !important;
                background: white !important;
            }
            
            /* Forcer une nouvelle page avant l'onglet Analyse */
            #analyse {
                page-break-before: always !important;
            }
        }

        @media (max-width: 768px) {
            .header h1 {
                font-size: 1.8em;
            }
            
            .kpi-grid {
                grid-template-columns: 1fr;
            }
            
            .tabs {
                flex-direction: column;
            }
            
            .tab-content {
                padding: 20px;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <h1>📊 Template Reporting Mensuel des Ventes</h1>
            <p>Version 1.0 &#8211; Prêt à l&#8217;emploi pour TPE/PME</p>
        </div>

        <div class="tabs">
            <button class="tab active" onclick="showTab('dashboard')">📈 Dashboard</button>
            <button class="tab" onclick="showTab('donnees')">📋 Données Ventes</button>
            <button class="tab" onclick="showTab('analyse')">📊 Analyse &#038; Tendances</button>
            <button class="tab" onclick="showTab('parametres')">⚙️ Paramétrages</button>
            <button class="tab" onclick="showTab('instructions')">📖 Instructions</button>
        </div>

        <!-- DASHBOARD -->
        <div id="dashboard" class="tab-content active">
            <h2 style="color: #2c3e50; margin-bottom: 30px;">Tableau de Bord &#8211; Vue d&rsquo;Ensemble</h2>
            
            <div class="kpi-grid">
                <div class="kpi-card">
                    <h3>💰 CA Mensuel</h3>
                    <div class="value" id="ca-mensuel">0 €</div>
                    <div class="trend positive" id="ca-trend">+0% vs mois dernier</div>
                </div>
                <div class="kpi-card">
                    <h3>🛒 Nombre de Transactions</h3>
                    <div class="value" id="nb-transactions">0</div>
                    <div class="trend" id="trans-trend">0 cette semaine</div>
                </div>
                <div class="kpi-card">
                    <h3>💳 Panier Moyen</h3>
                    <div class="value" id="panier-moyen">0 €</div>
                    <div class="trend" id="panier-trend">Par transaction</div>
                </div>
                <div class="kpi-card">
                    <h3>🎯 Objectif Mensuel</h3>
                    <div class="value" id="objectif-pct">0%</div>
                    <div class="trend" id="objectif-trend">Objectif: 15 000 €</div>
                </div>
            </div>

            <div id="alertes-container"></div>

            <div class="chart-container">
                <h3>📈 Évolution du CA Mensuel (12 derniers mois)</h3>
                <canvas id="chartEvolution"></canvas>
            </div>

            <div class="chart-container">
                <h3>🏆 Top 5 Produits du Mois</h3>
                <canvas id="chartTopProduits"></canvas>
            </div>

            <div class="chart-container">
                <h3>👥 Top 5 Clients du Mois</h3>
                <canvas id="chartTopClients"></canvas>
            </div>
        </div>

        <!-- DONNÉES VENTES -->
        <div id="donnees" class="tab-content">
            <h2 style="color: #2c3e50; margin-bottom: 20px;">📋 Saisie des Ventes <span class="example-tag">DONNÉES D&rsquo;EXEMPLE</span></h2>
            
            <div class="alert alert-warning">
                <strong>💡 Données d&rsquo;exemple incluses</strong><br>
                Ce tableau contient des données fictives pour vous montrer le fonctionnement. Supprimez-les et saisissez vos propres ventes.
            </div>

            <button class="btn" onclick="ajouterLigne()">➕ Ajouter une Vente</button>
            <button class="btn btn-secondary" onclick="supprimerExemples()">🗑️ Supprimer les Exemples</button>
            <button class="btn btn-secondary" onclick="calculerKPI()">🔄 Recalculer les KPI</button>

            <div style="overflow-x: auto;">
                <table id="tableVentes">
                    <thead>
                        <tr>
                            <th>Date</th>
                            <th>N° Facture</th>
                            <th>Client</th>
                            <th>Produit/Service</th>
                            <th>Quantité</th>
                            <th>Prix HT</th>
                            <th>Total HT</th>
                            <th>TVA (20%)</th>
                            <th>Total TTC</th>
                            <th>Actions</th>
                        </tr>
                    </thead>
                    <tbody id="ventesBody">
                    </tbody>
                </table>
            </div>
        </div>

        <!-- ANALYSE -->
        <div id="analyse" class="tab-content">
            <h2 style="color: #2c3e50; margin-bottom: 30px;">📊 Analyse &#038; Tendances</h2>
            
            <div class="chart-container">
                <h3>📊 Répartition du CA par Produit</h3>
                <canvas id="chartRepartitionProduits"></canvas>
            </div>

            <div class="chart-container">
                <h3>📅 CA Hebdomadaire du Mois en Cours</h3>
                <canvas id="chartHebdo"></canvas>
            </div>

            <div class="chart-container">
                <h3>📈 Saisonnalité &#8211; Évolution Mois par Mois</h3>
                <canvas id="chartSaisonnalite"></canvas>
            </div>
        </div>

        <!-- PARAMÈTRES -->
        <div id="parametres" class="tab-content">
            <h2 style="color: #2c3e50; margin-bottom: 30px;">⚙️ Paramétrages du Template</h2>
            
            <div class="config-section">
                <h3>🏢 Informations Entreprise</h3>
                <div class="form-group">
                    <label>Nom de l&rsquo;entreprise</label>
                    <input type="text" id="nomEntreprise" value="Votre Entreprise SAS" placeholder="Ex: Ma Boutique SARL">
                </div>
                <div class="form-group">
                    <label>Exercice fiscal</label>
                    <input type="number" id="exerciceFiscal" value="2025" placeholder="2025">
                </div>
                <div class="form-group">
                    <label>Devise</label>
                    <select id="devise">
                        <option value="EUR">EUR (€)</option>
                        <option value="USD">USD ($)</option>
                        <option value="GBP">GBP (£)</option>
                    </select>
                </div>
            </div>

            <div class="config-section">
                <h3>🎯 Objectifs Mensuels</h3>
                <div class="form-group">
                    <label>Objectif de CA mensuel (€)</label>
                    <input type="number" id="objectifMensuel" value="15000" placeholder="Ex: 15000">
                </div>
                <div class="form-group">
                    <label>Seuil d&rsquo;alerte &#8211; Chute de CA (%)</label>
                    <input type="number" id="seuilAlerte" value="15" placeholder="Ex: 15">
                </div>
            </div>

            <div class="config-section">
                <h3>📦 Liste des Produits/Services</h3>
                <div class="form-group">
                    <label>Produits disponibles (un par ligne)</label>
                    <textarea id="listeProduits" rows="8" style="width: 100%; padding: 10px; border: 2px solid #e8eef3; border-radius: 5px;">Produit A &#8211; Standard
Produit B &#8211; Premium
Produit C &#8211; Économique
Service Consulting
Service Formation
Service Maintenance
Abonnement Mensuel
Abonnement Annuel</textarea>
                </div>
            </div>

            <button class="btn" onclick="sauvegarderParametres()">💾 Sauvegarder les Paramètres</button>
        </div>

        <!-- INSTRUCTIONS -->
        <div id="instructions" class="tab-content">
            <h2 style="color: #2c3e50; margin-bottom: 30px;">📖 Guide d&rsquo;Utilisation</h2>
            
            <div class="instructions">
                <div class="alert alert-success">
                    <strong>✅ Bienvenue dans votre Template de Reporting Ventes !</strong><br>
                    Ce template est prêt à l&#8217;emploi avec des données d&rsquo;exemple. Suivez ce guide pour le personnaliser.
                </div>

                <h4>🚀 Première Configuration (10 minutes)</h4>
                <ol>
                    <li><strong>Onglet Paramétrages</strong> : Renseignez le nom de votre entreprise, l&rsquo;exercice fiscal, et votre objectif mensuel</li>
                    <li><strong>Liste des produits</strong> : Remplacez les produits d&rsquo;exemple par votre catalogue réel</li>
                    <li><strong>Sauvegarder</strong> : Cliquez sur « Sauvegarder les Paramètres »</li>
                </ol>

                <h4>📝 Saisie Quotidienne/Hebdomadaire (5-10 minutes)</h4>
                <ol>
                    <li>Allez sur l&rsquo;onglet <strong>« Données Ventes »</strong></li>
                    <li>Cliquez sur <strong>« Supprimer les Exemples »</strong> (première fois uniquement)</li>
                    <li>Cliquez sur <strong>« Ajouter une Vente »</strong> pour chaque nouvelle transaction</li>
                    <li>Remplissez : Date, N° Facture, Client, Produit, Quantité, Prix HT</li>
                    <li>Les colonnes Total HT, TVA et TTC se calculent automatiquement</li>
                    <li>Cliquez sur <strong>« Recalculer les KPI »</strong> pour mettre à jour le Dashboard</li>
                </ol>

                <h4>📊 Lecture du Dashboard</h4>
                <ul>
                    <li><strong>KPI Principaux</strong> : CA mensuel, Nombre de transactions, Panier moyen, % Objectif</li>
                    <li><strong>Alertes</strong> : Notifications automatiques si objectif non atteint ou chute significative</li>
                    <li><strong>Graphiques</strong> : Évolution sur 12 mois, Top produits, Top clients</li>
                    <li><strong>Indicateurs colorés</strong> : Vert = Bon, Orange = Vigilance, Rouge = Alerte</li>
                </ul>

                <h4>📈 Analyse &#038; Tendances</h4>
                <p>L&rsquo;onglet « Analyse &#038; Tendances » vous permet de visualiser :</p>
                <ul>
                    <li>La répartition du CA par produit (graphique camembert)</li>
                    <li>L&rsquo;évolution hebdomadaire du mois en cours</li>
                    <li>La saisonnalité sur l&rsquo;année (pic de ventes, creux&#8230;)</li>
                </ul>

                <h4>💾 Export et Partage</h4>
                <p>Pour exporter vos données :</p>
                <ol>
                    <li>Cliquez sur <strong>« Télécharger en Excel »</strong> en bas de page</li>
                    <li>Le fichier sera généré avec tous vos onglets et données</li>
                    <li>Vous pouvez l&rsquo;ouvrir dans Excel, le modifier, ou le partager avec votre expert-comptable</li>
                </ol>

                <h4>🔒 Sécurité et Sauvegarde</h4>
                <ul>
                    <li><strong>Sauvegarde automatique</strong> : Vos données sont stockées localement dans votre navigateur</li>
                    <li><strong>Export régulier</strong> : Exportez en Excel chaque mois pour archiver</li>
                    <li><strong>Confidentialité</strong> : Aucune donnée n&rsquo;est envoyée sur internet, tout reste sur votre ordinateur</li>
                </ul>

                <h4>❓ Besoin d&rsquo;Aide ?</h4>
                <div class="alert alert-warning">
                    <strong>💡 Support disponible</strong><br>
                    Si vous rencontrez des difficultés ou avez besoin d&rsquo;une personnalisation, contactez-nous sur 
                    <a href="https://autoexcel.fr/contact/" style="color: #629552; font-weight: bold;">autoexcel.fr/contact</a>
                </div>
            </div>
        </div>

        <!-- SECTION TÉLÉCHARGEMENT -->
        <div class="download-section">
            <h2 style="color: #2c5f2d; margin-bottom: 20px;">📥 Télécharger le Template Complet</h2>
            <p style="font-size: 1.1em; margin-bottom: 30px; color: #495057;">
                Exportez ce template avec toutes vos données en format Excel (.xlsx)<br>
                Compatible Windows &#038; Mac • Excel 2016+ • Microsoft 365
            </p>
            <button class="btn" onclick="telechargerExcel()" style="font-size: 1.3em; padding: 20px 50px;">
                📥 Télécharger en Excel
            </button>
            <button class="btn btn-secondary" onclick="telechargerPDF()" style="font-size: 1.3em; padding: 20px 50px; background: #dc3545;">
                📄 Exporter en PDF
            </button>
            <p style="font-size: 0.9em; margin-top: 15px; color: #666;">
                Le PDF inclut : Dashboard, Données Ventes et Analyses avec tous les graphiques<br>
                <small>L&rsquo;export PDF utilise la fonction d&rsquo;impression de votre navigateur</small>
            </p>
        </div>
    </div>

    <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.0/dist/chart.umd.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
    <script>
        // Données du template
        let ventes = [];
        let parametres = {
            nomEntreprise: "Votre Entreprise SAS",
            exerciceFiscal: 2025,
            devise: "EUR",
            objectifMensuel: 15000,
            seuilAlerte: 15,
            produits: ["Produit A - Standard", "Produit B - Premium", "Produit C - Économique", "Service Consulting", "Service Formation", "Service Maintenance", "Abonnement Mensuel", "Abonnement Annuel"]
        };

        // Charger les données sauvegardées
        function chargerDonnees() {
            const ventesSauvegardees = localStorage.getItem('ventes');
            const parametresSauvegardes = localStorage.getItem('parametres');
            
            if (ventesSauvegardees) {
                ventes = JSON.parse(ventesSauvegardees);
            } else {
                // Données d'exemple
                genererDonneesExemple();
            }
            
            if (parametresSauvegardes) {
                parametres = JSON.parse(parametresSauvegardes);
                appliquerParametres();
            }
            
            afficherVentes();
            // Appeler calculerKPI après un court délai pour s'assurer que tout est chargé
            setTimeout(() => {
                calculerKPI();
            }, 100);
        }

        // Générer données d'exemple
        function genererDonneesExemple() {
            const clients = ["Client A", "Client B", "Client C", "Client D", "Client E"];
            const produitsExemple = ["Produit A - Standard", "Produit B - Premium", "Produit C - Économique"];
            
            const aujourdhui = new Date();
            
            for (let i = 0; i < 20; i++) {
                const date = new Date();
                date.setDate(date.getDate() - Math.floor(Math.random() * 30));
                
                ventes.push({
                    date: date.toISOString().split('T')[0],
                    facture: `F2025-${String(i + 1).padStart(4, '0')}`,
                    client: clients[Math.floor(Math.random() * clients.length)],
                    produit: produitsExemple[Math.floor(Math.random() * produitsExemple.length)],
                    quantite: Math.floor(Math.random() * 5) + 1,
                    prixHT: Math.floor(Math.random() * 500) + 100
                });
            }
            
            // Ajouter quelques ventes du mois dernier pour la comparaison
            for (let i = 0; i < 10; i++) {
                const date = new Date();
                date.setMonth(date.getMonth() - 1);
                date.setDate(Math.floor(Math.random() * 28) + 1);
                
                ventes.push({
                    date: date.toISOString().split('T')[0],
                    facture: `F2024-${String(i + 1).padStart(4, '0')}`,
                    client: clients[Math.floor(Math.random() * clients.length)],
                    produit: produitsExemple[Math.floor(Math.random() * produitsExemple.length)],
                    quantite: Math.floor(Math.random() * 5) + 1,
                    prixHT: Math.floor(Math.random() * 400) + 80
                });
            }
        }

        // Afficher les ventes dans le tableau
        function afficherVentes() {
            const tbody = document.getElementById('ventesBody');
            tbody.innerHTML = '';
            
            ventes.forEach((vente, index) => {
                const totalHT = vente.quantite * vente.prixHT;
                const tva = totalHT * 0.2;
                const totalTTC = totalHT + tva;
                
                const row = tbody.insertRow();
                row.innerHTML = `
                    <td><input type="date" value="${vente.date}" onchange="modifierVente(${index}, 'date', this.value)"></td>
                    <td><input type="text" value="${vente.facture}" onchange="modifierVente(${index}, 'facture', this.value)"></td>
                    <td><input type="text" value="${vente.client}" onchange="modifierVente(${index}, 'client', this.value)"></td>
                    <td>
                        <select onchange="modifierVente(${index}, 'produit', this.value)">
                            ${parametres.produits.map(p => `<option value="${p}" ${p === vente.produit ? 'selected' : ''}>${p}</option>`).join('')}
                        </select>
                    </td>
                    <td><input type="number" value="${vente.quantite}" min="1" onchange="modifierVente(${index}, 'quantite', this.value)"></td>
                    <td><input type="number" value="${vente.prixHT}" min="0" step="0.01" onchange="modifierVente(${index}, 'prixHT', this.value)"></td>
                    <td><strong>${totalHT.toFixed(2)} €</strong></td>
                    <td>${tva.toFixed(2)} €</td>
                    <td><strong>${totalTTC.toFixed(2)} €</strong></td>
                    <td><button class="btn btn-secondary" onclick="supprimerVente(${index})" style="padding: 8px 15px; margin: 0;">🗑️</button></td>
                `;
            });
        }

        // Ajouter une ligne
        function ajouterLigne() {
            ventes.push({
                date: new Date().toISOString().split('T')[0],
                facture: `F2025-${String(ventes.length + 1).padStart(4, '0')}`,
                client: '',
                produit: parametres.produits[0],
                quantite: 1,
                prixHT: 0
            });
            sauvegarderDonnees();
            afficherVentes();
        }

        // Modifier une vente
        function modifierVente(index, champ, valeur) {
            if (champ === 'quantite' || champ === 'prixHT') {
                valeur = parseFloat(valeur) || 0;
            }
            ventes[index][champ] = valeur;
            sauvegarderDonnees();
            afficherVentes();
            calculerKPI();
        }

        // Supprimer une vente
        function supprimerVente(index) {
            if (confirm('Supprimer cette vente ?')) {
                ventes.splice(index, 1);
                sauvegarderDonnees();
                afficherVentes();
                calculerKPI();
            }
        }

        // Supprimer les exemples
        function supprimerExemples() {
            if (confirm('Supprimer toutes les données d\'exemple ? Cette action est irréversible.')) {
                ventes = [];
                sauvegarderDonnees();
                afficherVentes();
                calculerKPI();
            }
        }

        // Calculer les KPI
        function calculerKPI() {
            const aujourdhui = new Date();
            const moisActuel = aujourdhui.getMonth();
            const anneeActuelle = aujourdhui.getFullYear();
            
            // Filtrer les ventes du mois en cours
            const ventesMois = ventes.filter(v => {
                const dateVente = new Date(v.date);
                return dateVente.getMonth() === moisActuel && dateVente.getFullYear() === anneeActuelle;
            });
            
            // CA mensuel
            const caMensuel = ventesMois.reduce((sum, v) => sum + (v.quantite * v.prixHT), 0);
            document.getElementById('ca-mensuel').textContent = caMensuel.toFixed(2) + ' €';
            
            // Nombre de transactions
            const nbTransactions = ventesMois.length;
            document.getElementById('nb-transactions').textContent = nbTransactions;
            
            // Panier moyen
            const panierMoyen = nbTransactions > 0 ? caMensuel / nbTransactions : 0;
            document.getElementById('panier-moyen').textContent = panierMoyen.toFixed(2) + ' €';
            
            // Objectif
            const objectifPct = (caMensuel / parametres.objectifMensuel * 100).toFixed(1);
            document.getElementById('objectif-pct').textContent = objectifPct + '%';
            document.getElementById('objectif-trend').textContent = `Objectif: ${parametres.objectifMensuel} €`;
            
            // Trend mois dernier
            const ventesMoisDernier = ventes.filter(v => {
                const dateVente = new Date(v.date);
                return dateVente.getMonth() === (moisActuel - 1 + 12) % 12;
            });
            const caMoisDernier = ventesMoisDernier.reduce((sum, v) => sum + (v.quantite * v.prixHT), 0);
            const variation = caMoisDernier > 0 ? ((caMensuel - caMoisDernier) / caMoisDernier * 100).toFixed(1) : 0;
            
            const trendElement = document.getElementById('ca-trend');
            if (variation > 0) {
                trendElement.textContent = `+${variation}% vs mois dernier`;
                trendElement.className = 'trend positive';
            } else if (variation < 0) {
                trendElement.textContent = `${variation}% vs mois dernier`;
                trendElement.className = 'trend negative';
            } else {
                trendElement.textContent = 'Pas de données mois dernier';
                trendElement.className = 'trend';
            }
            
            // Alertes
            afficherAlertes(caMensuel, objectifPct, variation);
            
            // Mettre à jour les graphiques
            creerGraphiques();
        }
        
        // Afficher les alertes
        function afficherAlertes(caMensuel, objectifPct, variation) {
            const container = document.getElementById('alertes-container');
            container.innerHTML = '';
            
            if (objectifPct < 50) {
                container.innerHTML += `
                    <div class="alert alert-danger">
                        <strong>⚠️ Alerte Objectif</strong><br>
                        Vous êtes à ${objectifPct}% de votre objectif mensuel. Il reste ${(parametres.objectifMensuel - caMensuel).toFixed(2)} € à réaliser.
                    </div>
                `;
            } else if (objectifPct < 80) {
                container.innerHTML += `
                    <div class="alert alert-warning">
                        <strong>⚡ Vigilance Objectif</strong><br>
                        Vous êtes à ${objectifPct}% de votre objectif. Bon rythme, continuez !
                    </div>
                `;
            } else if (objectifPct >= 100) {
                container.innerHTML += `
                    <div class="alert alert-success">
                        <strong>🎉 Objectif Atteint !</strong><br>
                        Félicitations ! Vous avez dépassé votre objectif mensuel de ${((objectifPct - 100)).toFixed(1)}%.
                    </div>
                `;
            }
            
            if (variation < -parametres.seuilAlerte) {
                container.innerHTML += `
                    <div class="alert alert-danger">
                        <strong>📉 Alerte Chute de CA</strong><br>
                        Votre CA a chuté de ${Math.abs(variation)}% par rapport au mois dernier. Analyse recommandée.
                    </div>
                `;
            }
        }

        // Créer les graphiques
        let charts = {};
        
        function creerGraphiques() {
            // Détruire les anciens graphiques
            Object.values(charts).forEach(chart => {
                if (chart) {
                    try {
                        chart.destroy();
                    } catch (e) {
                        console.log('Erreur destruction graphique:', e);
                    }
                }
            });
            charts = {};
            
            // Attendre que les canvas soient disponibles
            setTimeout(() => {
                // Graphique évolution 12 mois
                creerGraphiqueEvolution();
                
                // Top produits
                creerGraphiqueTopProduits();
                
                // Top clients
                creerGraphiqueTopClients();
                
                // Répartition produits
                creerGraphiqueRepartitionProduits();
                
                // Hebdo
                creerGraphiqueHebdo();
                
                // Saisonnalité
                creerGraphiqueSaisonnalite();
            }, 200);
        }
        
        function creerGraphiqueEvolution() {
            const ctx = document.getElementById('chartEvolution');
            if (!ctx) return;
            
            // Calculer CA par mois sur 12 mois
            const mois = [];
            const caParMois = [];
            const aujourdhui = new Date();
            
            for (let i = 11; i >= 0; i--) {
                const date = new Date(aujourdhui.getFullYear(), aujourdhui.getMonth() - i, 1);
                const moisNom = date.toLocaleDateString('fr-FR', { month: 'short', year: '2-digit' });
                mois.push(moisNom);
                
                const ventesDuMois = ventes.filter(v => {
                    const dateVente = new Date(v.date);
                    return dateVente.getMonth() === date.getMonth() && dateVente.getFullYear() === date.getFullYear();
                });
                
                const ca = ventesDuMois.reduce((sum, v) => sum + (v.quantite * v.prixHT), 0);
                caParMois.push(ca);
            }
            
            charts.evolution = new Chart(ctx, {
                type: 'line',
                data: {
                    labels: mois,
                    datasets: [{
                        label: 'CA Mensuel (€)',
                        data: caParMois,
                        borderColor: '#629552',
                        backgroundColor: 'rgba(98, 149, 82, 0.1)',
                        tension: 0.4,
                        fill: true
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: true,
                    plugins: {
                        legend: { display: true }
                    }
                }
            });
        }
        
        function creerGraphiqueTopProduits() {
            const ctx = document.getElementById('chartTopProduits');
            if (!ctx) {
                console.log('Canvas chartTopProduits non trouvé');
                return;
            }
            
            // Calculer CA par produit ce mois
            const aujourdhui = new Date();
            const ventesMois = ventes.filter(v => {
                const dateVente = new Date(v.date);
                return dateVente.getMonth() === aujourdhui.getMonth() && dateVente.getFullYear() === aujourdhui.getFullYear();
            });
            
            const caParProduit = {};
            ventesMois.forEach(v => {
                if (!caParProduit[v.produit]) caParProduit[v.produit] = 0;
                caParProduit[v.produit] += v.quantite * v.prixHT;
            });
            
            const sorted = Object.entries(caParProduit).sort((a, b) => b[1] - a[1]).slice(0, 5);
            
            if (sorted.length === 0) {
                // Si pas de données, afficher un graphique vide avec message
                sorted.push(['Aucune donnée', 0]);
            }
            
            charts.topProduits = new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: sorted.map(s => s[0]),
                    datasets: [{
                        label: 'CA (€)',
                        data: sorted.map(s => s[1]),
                        backgroundColor: ['#629552', '#7ab05d', '#92ca68', '#aae373', '#c2fc7e']
                    }]
                },
                options: {
                    indexAxis: 'y',
                    responsive: true,
                    maintainAspectRatio: true,
                    plugins: {
                        legend: { display: true }
                    }
                }
            });
        }
        
        function creerGraphiqueTopClients() {
            const ctx = document.getElementById('chartTopClients');
            if (!ctx) {
                console.log('Canvas chartTopClients non trouvé');
                return;
            }
            
            const aujourdhui = new Date();
            const ventesMois = ventes.filter(v => {
                const dateVente = new Date(v.date);
                return dateVente.getMonth() === aujourdhui.getMonth() && dateVente.getFullYear() === aujourdhui.getFullYear();
            });
            
            const caParClient = {};
            ventesMois.forEach(v => {
                if (!caParClient[v.client]) caParClient[v.client] = 0;
                caParClient[v.client] += v.quantite * v.prixHT;
            });
            
            const sorted = Object.entries(caParClient).sort((a, b) => b[1] - a[1]).slice(0, 5);
            
            if (sorted.length === 0) {
                sorted.push(['Aucune donnée', 0]);
            }
            
            charts.topClients = new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: sorted.map(s => s[0]),
                    datasets: [{
                        label: 'CA (€)',
                        data: sorted.map(s => s[1]),
                        backgroundColor: ['#629552', '#7ab05d', '#92ca68', '#aae373', '#c2fc7e']
                    }]
                },
                options: {
                    indexAxis: 'y',
                    responsive: true,
                    maintainAspectRatio: true,
                    plugins: {
                        legend: { display: true }
                    }
                }
            });
        }
        
        function creerGraphiqueRepartitionProduits() {
            const ctx = document.getElementById('chartRepartitionProduits');
            if (!ctx) {
                console.log('Canvas chartRepartitionProduits non trouvé');
                return;
            }
            
            // Forcer la taille du canvas parent
            ctx.parentElement.style.minHeight = '500px';
            ctx.style.maxHeight = '400px';
            
            const caParProduit = {};
            ventes.forEach(v => {
                if (!caParProduit[v.produit]) caParProduit[v.produit] = 0;
                caParProduit[v.produit] += v.quantite * v.prixHT;
            });
            
            const labels = Object.keys(caParProduit);
            const data = Object.values(caParProduit);
            
            if (labels.length === 0) {
                labels.push('Aucune donnée');
                data.push(1);
            }
            
            charts.repartition = new Chart(ctx, {
                type: 'doughnut',
                data: {
                    labels: labels,
                    datasets: [{
                        data: data,
                        backgroundColor: ['#629552', '#7ab05d', '#92ca68', '#aae373', '#c2fc7e', '#d4f98f', '#e6ffa0']
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: true,
                    aspectRatio: 1.3,
                    plugins: {
                        legend: { 
                            display: true,
                            position: 'bottom',
                            align: 'center',
                            labels: {
                                boxWidth: 15,
                                padding: 12,
                                font: {
                                    size: 11
                                },
                                generateLabels: function(chart) {
                                    const data = chart.data;
                                    if (data.labels.length && data.datasets.length) {
                                        return data.labels.map((label, i) => {
                                            const value = data.datasets[0].data[i];
                                            const total = data.datasets[0].data.reduce((a, b) => a + b, 0);
                                            const percentage = ((value / total) * 100).toFixed(1);
                                            return {
                                                text: `${label}: ${percentage}%`,
                                                fillStyle: data.datasets[0].backgroundColor[i],
                                                hidden: false,
                                                index: i
                                            };
                                        });
                                    }
                                    return [];
                                }
                            }
                        },
                        tooltip: {
                            callbacks: {
                                label: function(context) {
                                    const label = context.label || '';
                                    const value = context.parsed || 0;
                                    return `${label}: ${value.toFixed(2)} €`;
                                }
                            }
                        }
                    },
                    layout: {
                        padding: {
                            top: 20,
                            bottom: 60,
                            left: 20,
                            right: 20
                        }
                    }
                }
            });
        }
        
        function creerGraphiqueHebdo() {
            const ctx = document.getElementById('chartHebdo');
            if (!ctx) return;
            
            const aujourdhui = new Date();
            const premierJour = new Date(aujourdhui.getFullYear(), aujourdhui.getMonth(), 1);
            const dernierJour = new Date(aujourdhui.getFullYear(), aujourdhui.getMonth() + 1, 0);
            
            const semaines = ['Sem 1', 'Sem 2', 'Sem 3', 'Sem 4', 'Sem 5'];
            const caParSemaine = [0, 0, 0, 0, 0];
            
            ventes.forEach(v => {
                const dateVente = new Date(v.date);
                if (dateVente >= premierJour && dateVente <= dernierJour) {
                    const jour = dateVente.getDate();
                    const semaine = Math.floor((jour - 1) / 7);
                    if (semaine < 5) {
                        caParSemaine[semaine] += v.quantite * v.prixHT;
                    }
                }
            });
            
            charts.hebdo = new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: semaines,
                    datasets: [{
                        label: 'CA Hebdomadaire (€)',
                        data: caParSemaine,
                        backgroundColor: '#629552'
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: true
                }
            });
        }
        
        function creerGraphiqueSaisonnalite() {
            const ctx = document.getElementById('chartSaisonnalite');
            if (!ctx) return;
            
            const moisNoms = ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'];
            const caParMois = new Array(12).fill(0);
            
            ventes.forEach(v => {
                const dateVente = new Date(v.date);
                caParMois[dateVente.getMonth()] += v.quantite * v.prixHT;
            });
            
            charts.saisonnalite = new Chart(ctx, {
                type: 'line',
                data: {
                    labels: moisNoms,
                    datasets: [{
                        label: 'CA par Mois (€)',
                        data: caParMois,
                        borderColor: '#629552',
                        backgroundColor: 'rgba(98, 149, 82, 0.1)',
                        tension: 0.4,
                        fill: true
                    }]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: true
                }
            });
        }

        // Gestion des onglets
        function showTab(tabName) {
            const tabs = document.querySelectorAll('.tab');
            const contents = document.querySelectorAll('.tab-content');
            
            tabs.forEach(tab => tab.classList.remove('active'));
            contents.forEach(content => {
                content.classList.remove('active');
                content.style.display = 'none';
            });
            
            document.querySelector(`[onclick*="${tabName}"]`).classList.add('active');
            const targetContent = document.getElementById(tabName);
            targetContent.classList.add('active');
            targetContent.style.display = 'block';
        }

        // Paramètres
        function appliquerParametres() {
            document.getElementById('nomEntreprise').value = parametres.nomEntreprise;
            document.getElementById('exerciceFiscal').value = parametres.exerciceFiscal;
            document.getElementById('devise').value = parametres.devise;
            document.getElementById('objectifMensuel').value = parametres.objectifMensuel;
            document.getElementById('seuilAlerte').value = parametres.seuilAlerte;
            document.getElementById('listeProduits').value = parametres.produits.join('\n');
        }

        function sauvegarderParametres() {
            parametres.nomEntreprise = document.getElementById('nomEntreprise').value;
            parametres.exerciceFiscal = parseInt(document.getElementById('exerciceFiscal').value);
            parametres.devise = document.getElementById('devise').value;
            parametres.objectifMensuel = parseFloat(document.getElementById('objectifMensuel').value);
            parametres.seuilAlerte = parseFloat(document.getElementById('seuilAlerte').value);
            parametres.produits = document.getElementById('listeProduits').value.split('\n').filter(p => p.trim());
            
            localStorage.setItem('parametres', JSON.stringify(parametres));
            alert('✅ Paramètres sauvegardés avec succès !');
            afficherVentes();
            calculerKPI();
        }

        // Sauvegarde automatique
        function sauvegarderDonnees() {
            localStorage.setItem('ventes', JSON.stringify(ventes));
            localStorage.setItem('parametres', JSON.stringify(parametres));
        }

        // Export Excel
        function telechargerExcel() {
            const wb = XLSX.utils.book_new();
            
            // Dashboard
            const dashboardData = [
                ['TABLEAU DE BORD VENTES - ' + parametres.nomEntreprise],
                ['Généré le', new Date().toLocaleDateString('fr-FR')],
                [],
                ['KPI', 'Valeur'],
                ['CA Mensuel', document.getElementById('ca-mensuel').textContent],
                ['Nombre de Transactions', document.getElementById('nb-transactions').textContent],
                ['Panier Moyen', document.getElementById('panier-moyen').textContent],
                ['Objectif Atteint', document.getElementById('objectif-pct').textContent]
            ];
            const wsDashboard = XLSX.utils.aoa_to_sheet(dashboardData);
            XLSX.utils.book_append_sheet(wb, wsDashboard, 'Dashboard');
            
            // Données ventes
            const ventesData = [
                ['Date', 'N° Facture', 'Client', 'Produit', 'Quantité', 'Prix HT', 'Total HT', 'TVA', 'Total TTC']
            ];
            ventes.forEach(v => {
                const totalHT = v.quantite * v.prixHT;
                const tva = totalHT * 0.2;
                const totalTTC = totalHT + tva;
                ventesData.push([v.date, v.facture, v.client, v.produit, v.quantite, v.prixHT, totalHT, tva, totalTTC]);
            });
            const wsVentes = XLSX.utils.aoa_to_sheet(ventesData);
            XLSX.utils.book_append_sheet(wb, wsVentes, 'Données Ventes');
            
            // Paramètres
            const paramsData = [
                ['PARAMETRES'],
                [],
                ['Nom Entreprise', parametres.nomEntreprise],
                ['Exercice Fiscal', parametres.exerciceFiscal],
                ['Devise', parametres.devise],
                ['Objectif Mensuel', parametres.objectifMensuel],
                ['Seuil Alerte (%)', parametres.seuilAlerte],
                [],
                ['PRODUITS/SERVICES'],
                ...parametres.produits.map(p => [p])
            ];
            const wsParams = XLSX.utils.aoa_to_sheet(paramsData);
            XLSX.utils.book_append_sheet(wb, wsParams, 'Paramétrages');
            
            // Télécharger
            XLSX.writeFile(wb, `Reporting_Ventes_${parametres.nomEntreprise}_${new Date().toISOString().split('T')[0]}.xlsx`);
        }

        // Export PDF avec graphiques
        async function telechargerPDF() {
            try {
                // Sauvegarder l'état actuel
                const tabContents = document.querySelectorAll('.tab-content');
                const originalTabStates = Array.from(tabContents).map(tc => ({
                    display: tc.style.display,
                    active: tc.classList.contains('active')
                }));
                
                // Afficher seulement Dashboard, Données et Analyse pour le PDF
                tabContents.forEach((tc, index) => {
                    const tabId = tc.id;
                    if (tabId === 'dashboard' || tabId === 'donnees' || tabId === 'analyse') {
                        tc.classList.add('active');
                        tc.style.display = 'block';
                    } else {
                        tc.classList.remove('active');
                        tc.style.display = 'none';
                    }
                });
                
                // Attendre un peu que les graphiques soient bien rendus
                await new Promise(resolve => setTimeout(resolve, 500));
                
                // Lancer l'impression
                window.print();
                
                // Restaurer l'état après impression
                setTimeout(() => {
                    tabContents.forEach((tc, index) => {
                        tc.style.display = originalTabStates[index].display;
                        if (originalTabStates[index].active) {
                            tc.classList.add('active');
                        } else {
                            tc.classList.remove('active');
                        }
                    });
                }, 1000);
                
            } catch (error) {
                console.error('Erreur lors de la génération du PDF:', error);
                alert('❌ Erreur lors de la génération du PDF. Veuillez réessayer.');
            }
        }

        // Initialisation
        window.addEventListener('DOMContentLoaded', () => {
            chargerDonnees();
        });
    </script>
</body>
</html>
<p>Lisez plus sur <a href="https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/">AutoExcel</a></p>]]></content:encoded>
					
					<wfw:commentRss>https://autoexcel.fr/templates-de-reporting-mensuel-automatises-vente-tresorerie/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
